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

分销网站开发合同百度收录方法

分销网站开发合同,百度收录方法,深圳设计网站有限公司,京东商家入驻入口官网一、GMP 调度器 1、调度器理解思路 理解golang的调度器要从进程到协程演进来说明: 进程--->线程--->协程---> golang的协程(goroutine) 从上图可以看出,进程到多线程到协程,最终目的就是为了提高CPU的利用率…

一、GMP 调度器

1、调度器理解思路

理解golang的调度器要从进程到协程演进来说明:

       进程--->线程--->协程---> golang的协程(goroutine)

      从上图可以看出,进程到多线程到协程,最终目的就是为了提高CPU的利用率,但都存在着不同的问题,因此golang的调度器也是为解决协程引发的问题,提高PCU利用率从而提高Go语言效率;

2.GMP概念

        G — 表示 Goroutine,它是一个待执行的任务;

        M — 表示操作系统的线程,它由操作系统的调度器调度和管理;

         P — 表示处理器,它可以被看做运行在线程上的本地调度器;

      首先Go语言合理利用多核的进行并行处理,也就是多线程 对应GMP中的M。
为了减少内核级线程调用切换成本,Go基于协程进行程序任务执行单元。对应GMP中的G。
同时go实现对G的调度器,对应GMP中的P。

3.GMP模型的简介

面对之前调度器的问题,Go 设计了新的调度器。

在新调度器中,除了 M (thread) 和 G (goroutine),又引进了 P (Processor)。

Processor,它包含了运行 goroutine 的资源,如果线程想运行 goroutine,必须先获取 P,P 中还包含了可运行的 G 队列。

       在 Go 中,线程是运行 goroutine 的实体,调度器的功能是把可运行的 goroutine 分配到工作线程上。

        Goroutine 调度器和 OS 调度器是通过 M 结合起来的,每个 M 都代表了 1 个内核线程,OS 调度器负责把内核线程分配到 CPU 的核上执行

4.调度器设计策略

5.go func() 调度流程

6.调度器生命周期

特殊的 M0 和 G0

M0:M0 是启动程序后的编号为 0 的主线程,这个 M 对应的实例会在全局变量 runtime.m0 中,不需要在 heap 上分配,M0 负责执行初始化操作和启动第一个 G, 在之后 M0 就和其他的 M 一样了。

G0:G0 是每次启动一个 M 都会第一个创建的 goroutine,G0 仅用于负责调度的 G,G0 不指向任何可执行的函数,每个 M 都会有一个自己的 G0。在调度或系统调用时会使用 G0 的栈空间,全局变量的 G0 是 M0 的 G0。

7.Go 调度器调度场景过程全解析

(1) 场景 1
P 拥有 G1,M1 获取 P 后开始运行 G1,G1 使用 go func() 创建了 G2,为了局部性 G2 优先加入到 P1 的本地队列。


(2) 场景 2
G1 运行完成后 (函数:goexit),M 上运行的 goroutine 切换为 G0,G0 负责调度时协程的切换(函数:schedule)。从 P 的本地队列取 G2,从 G0 切换到 G2,并开始运行 G2 (函数:execute)。实现了线程 M1 的复用。

(3) 场景 3
假设每个 P 的本地队列只能存 3 个 G。G2 要创建了 6 个 G,前 3 个 G(G3, G4, G5)已经加入 p1 的本地队列,p1 本地队列满了。

(4) 场景 4
G2 在创建 G7 的时候,发现 P1 的本地队列已满,需要执行负载均衡 (把 P1 中本地队列中前一半的 G,还有新创建 G 转移到全局队列)

(实现中并不一定是新的 G,如果 G 是 G2 之后就执行的,会被保存在本地队列,利用某个老的 G 替换新 G 加入全局队列)

这些 G 被转移到全局队列时,会被打乱顺序。所以 G3,G4,G7 被转移到全局队列。

(5) 场景 5
G2 创建 G8 时,P1 的本地队列未满,所以 G8 会被加入到 P1 的本地队列。

G8 加入到 P1 点本地队列的原因还是因为 P1 此时在与 M1 绑定,而 G2 此时是 M1 在执行。所以 G2 创建的新的 G 会优先放置到自己的 M 绑定的 P 上。

(6) 场景 6
规定:在创建 G 时,运行的 G 会尝试唤醒其他空闲的 P 和 M 组合去执行。

假定 G2 唤醒了 M2,M2 绑定了 P2,并运行 G0,但 P2 本地队列没有 G,M2 此时为自旋线程(没有 G 但为运行状态的线程,不断寻找 G)。

(7) 场景 7
M2 尝试从全局队列 (简称 “GQ”) 取一批 G 放到 P2 的本地队列(函数:findrunnable())。M2 从全局队列取的 G 数量符合下面的公式:

n = min(len(GQ)/GOMAXPROCS + 1, len(GQ/2))
至少从全局队列取 1 个 g,但每次不要从全局队列移动太多的 g 到 p 本地队列,给其他 p 留点。这是从全局队列到 P 本地队列的负载均衡。

假定我们场景中一共有 4 个 P(GOMAXPROCS 设置为 4,那么我们允许最多就能用 4 个 P 来供 M 使用)。所以 M2 只从能从全局队列取 1 个 G(即 G3)移动 P2 本地队列,然后完成从 G0 到 G3 的切换,运行 G3。

(8) 场景 8
假设 G2 一直在 M1 上运行,经过 2 轮后,M2 已经把 G7、G4 从全局队列获取到了 P2 的本地队列并完成运行,全局队列和 P2 的本地队列都空了,如场景 8 图的左半部分。

全局队列已经没有 G,那 m 就要执行 work stealing (偷取):从其他有 G 的 P 哪里偷取一半 G 过来,放到自己的 P 本地队列。P2 从 P1 的本地队列尾部取一半的 G,本例中一半则只有 1 个 G8,放到 P2 的本地队列并执行。

(9) 场景 9
G1 本地队列 G5、G6 已经被其他 M 偷走并运行完成,当前 M1 和 M2 分别在运行 G2 和 G8,M3 和 M4 没有 goroutine 可以运行,M3 和 M4 处于自旋状态,它们不断寻找 goroutine。

为什么要让 m3 和 m4 自旋,自旋本质是在运行,线程在运行却没有执行 G,就变成了浪费 CPU. 为什么不销毁现场,来节约 CPU 资源。因为创建和销毁 CPU 也会浪费时间,我们希望当有新 goroutine 创建时,立刻能有 M 运行它,如果销毁再新建就增加了时延,降低了效率。当然也考虑了过多的自旋线程是浪费 CPU,所以系统中最多有 GOMAXPROCS 个自旋的线程 (当前例子中的 GOMAXPROCS=4,所以一共 4 个 P),多余的没事做线程会让他们休眠。

(10) 场景 10
​ 假定当前除了 M3 和 M4 为自旋线程,还有 M5 和 M6 为空闲的线程 (没有得到 P 的绑定,注意我们这里最多就只能够存在 4 个 P,所以 P 的数量应该永远是 M>=P, 大部分都是 M 在抢占需要运行的 P),G8 创建了 G9,G8 进行了阻塞的系统调用,M2 和 P2 立即解绑,P2 会执行以下判断:如果 P2 本地队列有 G、全局队列有 G 或有空闲的 M,P2 都会立马唤醒 1 个 M 和它绑定,否则 P2 则会加入到空闲 P 列表,等待 M 来获取可用的 p。本场景中,P2 本地队列有 G9,可以和其他空闲的线程 M5 绑定。

(11) 场景 11
G8 创建了 G9,假如 G8 进行了非阻塞系统调用。


​ M2 和 P2 会解绑,但 M2 会记住 P2,然后 G8 和 M2 进入系统调用状态。当 G8 和 M2 退出系统调用时,会尝试获取 P2,如果无法获取,则获取空闲的 P,如果依然没有,G8 会被记为可运行状态,并加入到全局队列,M2 因为没有 P 的绑定而变成休眠状态 (长时间休眠等待 GC 回收销毁)。

参考:https://learnku.com/articles/41728

http://www.15wanjia.com/news/40894.html

相关文章:

  • 深圳龙岗做网站的公司武汉网站设计十年乐云seo
  • 私募基金网站开发流程提交百度收录
  • 全国疫情最新消息各省排名搜索引擎快速优化排名
  • 网站建设工具品牌有哪些免费推广app
  • 中山外贸网站建设报价淘宝排名查询工具
  • 站长工具平台广东疫情最新消息
  • 湘潭网站建设 很好磐石网络成都搜索优化排名公司
  • 做网站建设比较好的公司网络营销的含义
  • 四川省城乡建设网站做竞价推广大概多少钱
  • 网站开速度几秒百度关键词如何优化
  • 建设银行观澜支行网站windows优化大师会员
  • 做免费网站有哪些凡科建站怎么建网站
  • 做食品研发都有哪些网站免费推广网
  • 个人网站可以做信息网站吗百度网站检测
  • 牛商网做网站潜江seo
  • 西安政府网站设计论文关键词
  • 潍坊网站制作保定公司潍坊网站模板建站
  • 个人网站做企业备案吗nba排名赛程
  • 武汉网站建设制作saas建站
  • 网站怎么做竞价付费内容网站
  • 网站推广的主题重庆seo网站收录优化
  • 网络营销是什么时候兴起的珠海seo快速排名
  • 怎么制作网站建设兰州正规seo整站优化
  • 淘宝做的代码能在其他网站用吗个人如何推广app
  • 免费架设网站建网站赚钱
  • 做网站被黑后怎么办怎么建立一个自己的网站
  • fm网站开发百度官方下载安装
  • 内网网站怎么建设重大军事新闻最新消息
  • 徐州好点的做网站的公司有哪些网络广告投放公司
  • 湘潭商城网站建设定制百度搜索指数是怎么计算的