gpt4 book ai didi

go - goroutines到底是什么?

转载 作者:IT王子 更新时间:2023-10-29 01:17:43 26 4
gpt4 key购买 nike

我读过的教程和文档都说 goroutines“不完全是线程”或“轻量级线程”,但通常可以像对待它们自己的独立线程一样对待它们。

那么...它们到底是什么?

最佳答案

goroutines 与典型的 OS 线程有几点区别:

  • 用户模式调度。当一个 goroutine 被阻塞时(比如在网络上等待),Go 运行时会寻找另一个可以运行的 goroutine。这无需进入和退出内核模式,也无需操作系统内核的调度程序运行。
  • 只有用户模式调度:为了使用多核,Go 将启动多个操作系统线程并在所有线程上运行 goroutine,可能会在操作系统线程之间移动一个 goroutine 以保持一切忙碌.如果您听说 goroutines 被“多路复用”到 OS 线程上,那就是这个意思。
  • 它们的启动成本应该很低。堆栈开始时很小,只有几 KB,并且会根据需要增长,无论操作系统是否使用虚拟内存过量使用。
  • 他们与语言密切相关;除了 go 语句本身,还有 channel types和运营和select statements用于协调 goroutine。
  • 它们缺乏一些操作系统线程功能:目前,Go 的调度器不保证公平,只有非常有限的抢占(一个空的 for{} 循环将永远不会离开)。

它们与许多其他术语密切相关:

  • fibers ,一个与用户模式调度线程相关的术语
  • green threads ,另一个用于指代用户模式调度线程的术语
  • coroutines ,指的是可以在代码中的任意点相互控制的例程
  • event-driven architectures ,它可能会在等待网络 I/O 等异步事件时切换到其他任务,但可能不会呈现类似线程的接口(interface)(例如,它们可能会使用回调函数)
  • M:N hybrid threading ,这涉及内核和用户模式线程,并且可能涉及跨操作系统线程的用户模式线程迁移。

关于go - goroutines到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27789227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com