当前位置: 首页 > news >正文

比价网站怎么做的百度自媒体注册入口

比价网站怎么做的,百度自媒体注册入口,wordpress 视频 播放器插件下载,网站开发流程一. 并发介绍 进程和线程 进程是程序在操作系统中一次执行过程,系统进程资源分配和调度的一个独立单位。线程是进程执行的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程可以创建和撤销多个线程&#xff0c…

一. 并发介绍

        进程和线程

  • 进程是程序在操作系统中一次执行过程,系统进程资源分配和调度的一个独立单位。
  • 线程是进程执行的实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
  • 一个进程可以创建和撤销多个线程,同一个进程中的多个线程之间可以并发执行。

        并发和并行

  • 多线程程序在一个核CPU上运行,就是并发。
  • 多线程程序在多个核CPU上运行,就是并行。

        协程和线程

  • 协程:独立的栈空间,共享堆空间,调度由用户自己控制,本质有点类似于用户级线程,这些用户级线程的调度也是自己实现的。
  • 线程:一个线程上可以跑多个协程,协程是轻量级线程。

        goroutine只是由官方实现的超级“线程池”。

        每个实际4~5KB的栈内存占用和由于实现机制而大幅减少的创建和销毁开销是go高并发的根本原因。

        并发主要是由切换时间片来实现同时运行,并行则是直接利用多核实现多线程的运行,go可以设置使用核数,以发挥多核计算机的能力。

        goroutine奉行通过通信来共享内存,而不是共享内存来通信。

二. Goroutine

        2.1 介绍

        在java/c++中我们要实现一个并发编程,我们通常需要自己维护一个线程池,并且需要自己取包装一个有一个任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量心智。那么能不能有一种机制,程序员只需要定义很多任务,让系统去帮助我们把这些任务分配到CPU上实现并发执行呢?

        Go语言中的goroutine就是这样一种机制,goroutine的概念类似于线程,但goroutine是由Go的运行时(runtime)调度和管理的。Go程序会智能的将goroutine中的任务合理的分配给每一个CPU。Go语言之所以被称为现代化的编程语言,就是因为它在语言层面已经内置了调度核上下文切换的机制。

        在Go语言编程中,你不需要去自己写进程,线程,协程,你的技能包里只有一个技能-goroutine,当你需要让某个任务并发执行的时候,你只需要把这个任务包装成一个函数,开启一个goroutine去执行这个函数就可以了。

  • 使用goroutine

        Go语言中使用goroutine非常简单,只需要在调用函数的时候在前面加上go关键字,就可以为一个函数创建一个goroutine。

        一个goroutine必定对应一个函数,可以创建多个goroutine去执行相同函数。

        2.2 使用

  • 启动单个goroutine

        启动goroutine的方式非常简单,只需要在调用的函数(普通函数和匿名函数)前面加一个go关键字。

        使用协程:

  • 启动多个协程

        我们发现下面的打印不是按顺序打印的,这是因为协程是并发运行的,调度是随机的。

  • 注意:如果主协程退出了,其它子协程会不论在不在运行,会直接退出。

 2.3 goroutine与线程

  • 可增长的栈

        OS线程(操作系统的线程)一般由固定的栈内存(通常2MB),一个goroutine的栈在其生命周期开始只有很小的栈(典型情况下2KB),goroutine的栈不是固定的,它可以按需增大或缩小,goroutine的栈大小限制可以达到1GB,虽然极少会用到这么大。所以在Go语言中一次创建十万左右的goroutine也是可以的。

  • goroutine调度

        GPM是Go语言运行时(runtime)层面的实现,是go语言自己实现的一套调度系统。区别于操作系统调度OS线程。

  • G很好理解,就是个goroutine的,里面除了存放本goroutine信息外,还有与所在P的绑定等信息。
  • P管理着一组goroutine队列,P里面会存储当前goroutine运行的上下文环境(函数指针,堆栈信息及地址边界),P会对自己管理的goroutine队列做一些调度(比如把占用CPU时间较长的goroutine暂停,运行后续的goroutine等)当自己的队列消费完就去全局队列里面取,如果全局队列也消费完了会去其它P的队列里抢任务。
  • M(machine)是Go运行时(runtime)对操作系统内核线程的虚拟,M与内核线程一般是一一对应的关系,一个goroutine最终是要放到M上执行的。

        P与M一般也是一一对应。他们的关系:P管理着一组挂载在M上运行。当一个G长久阻塞在一个M上时,runtime会建立一个M,阻塞G所在的P会把其它的G挂载在新的M上,当旧的G阻塞完成或认为其已经死掉,回收旧的M。

        P的个数是通过runtime.GOMAXPROCS设定(最大256),Go1.5版本之后默认为物理线程数。在并发量大的时候会增加一些P和M,但不会太多,切换太频繁的话得不偿失。

        单从线程调度讲,Go语言相比起其它语言的优势在于OS线程是由OS内核调度的,goroutine则是由Go运行时(runtime)自己的调度器调度的,这个调度器使用一个称为m:n调度技术(复用/调度m个goroutine到n个OS线程)。其一大特点是goroutine的调度是在用户态下完成的,不涉及内核态与用户态之间的频繁切换,包括内存的分配与释放,都是在用户态维护着一个大的内存池,不直接调用系统的malloc函数(除非内存池需要改变),成本比调度OS线程低的多。另外一方面充分利用了多核的硬件资源,近似的把若干goroutine均分在物理线程上,再加上本身的goroutine的超轻量,以上种种保证了go调度方面的性能。

  • 总结

Go语言中的操作系统线程与goroutine之间的关系:

  • 一个操作系统线程对应用户态多个goroutine
  • go语言可以同时使用多个操作系统线程
  • goroutine和OS线程是多对多的关系,即m:n 

三.runtime包

  • runtime.Gosched()

        让出CPU时间片,重新等待安排任务。

package mainimport ("fmt""runtime"
)func main() {go func(s string) {for i := 0; i < 2; i++ {fmt.Println(s)}}("world")//主协程for i := 0; i < 2; i++ {runtime.Gosched() //切以下,再次分配任务fmt.Println("hello ")}
}
  • runtime.Goexit()

        退出当前协程。

  • runtime.GOMAXPROCS

        Go运行时的调度器使用GOMAXPROCS参数来确定需要使用多少个OS线程同时执行Go代码。默认值是机器上的CPU核心数。比如在一个8核心的机器上,调度器会把Go代码同时调度到8个OS线程上。(GOMAXPROCS是m:n调度中的n)

        Go语言可以通过runtime.GOMAXPROCS()函数设置当前程序并发时占用的CPU逻辑核心数。

        Go1.5版本之前,默认使用的是单核心执行。Go1.5版本之后,默认使用全部的CPU逻辑核心。

        我们可以通过将任务分配到不同的CPU逻辑核心上实现并行的效果,在这里举个例子:

        下面的例子是,只是用CPU的一个核心,先完成一个任务,再完成一个任务。

        设置逻辑核心为2,此时两个任务并行执行。

 

http://www.hkea.cn/news/335845/

相关文章:

  • 做网站的艰辛免费个人网站申请
  • 网站改版需要多久网站设计与制作毕业论文范文
  • 深圳横岗网站建设网站建设的推广渠道
  • 有没有什么网站免费做名片2023年新闻小学生摘抄
  • 新网金商网站外链查询工具
  • 网站建设的进度竞价托管选择微竞价
  • 网站快速网站推广怎么做一个公司网站
  • 旅游网站模板htmlseo品牌优化整站优化
  • 方圆网站建设aso优化重要吗
  • 做购实惠网站的意义好用的搜索引擎有哪些
  • 怎么把自己笔记本做服务器做个网站搭建网站基本步骤
  • jeecms做企业网站成都网站建设公司排名
  • 沈阳招聘网站开发地推项目平台
  • 798艺术区成都seo达人
  • 平度网站建设抖音代运营收费详细价格
  • 株洲网站优化找哪家seo优化的价格
  • 找印度人做网站sem竞价推广公司
  • 山西网站推广公司网站关键词优化怎么弄
  • 微信分销是什么重庆优化seo
  • 武汉企业网站推广方案永久免费无代码开发平台网站
  • 网站开发岗位群怎样推广产品
  • 桐城市美丽乡村建设专题网站石家庄整站优化技术
  • 北京建网站的公司哪个比较好郑州seo价格
  • 进空间的网站网络营销常见的工具
  • wordpress发文章的id怎么不连续如何做好搜索引擎优化工作
  • 交互式网站如何做seo推广软件排名
  • 西部建设网站惠州seo排名优化
  • 做环球资源网站有没有效果2024百度下载
  • 织梦 安装网站网站搭建需要多少钱
  • 做网站购买备案域名性价比高seo的排名优化