Go: g0, 特殊的goroutine

栏目: IT技术 · 发布时间: 4年前

内容简介:Go中创造所有的goroutine都是由内部的调度器管理。Go调度器会尝试为所有goroutine分配运行时间,并在当前goroutine被阻止或终止时使所有CPU忙于运行goroutine。它实际上是作为特殊的goroutine运行的。Go通过

:information_source:  本文基于 Go 1.13

Go中创造所有的goroutine都是由内部的调度器管理。Go调度器会尝试为所有goroutine分配运行时间,并在当前goroutine被阻止或终止时使所有CPU忙于运行goroutine。它实际上是作为特殊的goroutine运行的。

调度协程

Go通过 GOMAXPROCS 变量限制了运行的系统线程数。这意味着Go必须在每个正在运行的线程上调度和管理goroutine。该角色被委派给名为 g0 的特殊goroutine,这是为每个系统线程创建的第一个goroutine:

Go: g0, 特殊的goroutine

然后,它将安排就绪的goroutine在系统线程上运行。

为了更好地了解在 g0 上的调度方式,让我们回顾一下通道的使用情况。这是当goroutine阻塞在通道上发送时:

ch := make(chan int)

[...]

ch <- v

在通道上阻塞时,当前goroutine将被停放,即处于等待模式,并且不会在任何goroutine队列中被推送:

Go: g0, 特殊的goroutine

然后, g0 替换goroutine并进行第一轮调度:

Go: g0, 特殊的goroutine

在调度期间,本地队列拥有优先级,并且goroutine#2现在将运行:

Go: g0, 特殊的goroutine

一旦接收器将读取通道,则goroutine#7将被解除阻塞:

v := <-ch

接收到消息的goroutine将切换到 g0 并通过将其放置在本地队列中来解锁停放的goroutine:

Go: g0, 特殊的goroutine

特殊的goroutine除了管理调度,它还有更多的职责。

职责范围

与一般goroutine相反, g0 拥有固定的较大的栈。这样,Go可以在需要更大栈并且在不希望栈增长的情况下执行操作。在 g0 的职责中,我们可以列出:

  • Goroutine创建。当调用 go func(){ ... }()go myFunction() 时,Go会将函数创建委托给 g0 ,然后再将其放置在本地队列中。新创建的goroutine优先运行,并放置在本地队列的顶部。

Go: g0, 特殊的goroutine

  • Defer方法分配。

  • Gc操作,例如stw,扫描goroutine的栈以及一些标清操作。

  • 栈增长。在需要时,Go会增加goroutine的大小。该操作由 g0 在prolog方法中完成。

这个特殊的goroutine g0 涉及许多其他操作(大量分配,cgo等),使我们的程序可以更高效地管理操作,并且需要更大的栈,以保持我们的程序在低内存下更加高效。

编译整理自  Go: g0, Special Goroutine

https://medium.com/a-journey-with-go/go-g0-special-goroutine-8c778c6704d8

Go: g0, 特殊的goroutine


以上所述就是小编给大家介绍的《Go: g0, 特殊的goroutine》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

TensorFlow:实战Google深度学习框架(第2版)

TensorFlow:实战Google深度学习框架(第2版)

顾思宇、梁博文、郑泽宇 / 电子工业出版社 / 2018-2-1 / 89

TensorFlow是谷歌2015年开源的主流深度学习框架,目前已得到广泛应用。《TensorFlow:实战Google深度学习框架(第2版)》为TensorFlow入门参考书,旨在帮助读者以快速、有效的方式上手TensorFlow和深度学习。书中省略了烦琐的数学模型推导,从实际应用问题出发,通过具体的TensorFlow示例介绍如何使用深度学习解决实际问题。书中包含深度学习的入门知识和大量实践经......一起来看看 《TensorFlow:实战Google深度学习框架(第2版)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具