go - Goroutines 和预定的

标签 go

我不明白这句话请详细解释我并使用简单的英语来做到这一点 Go 例程是协作调度的,而不是依赖内核来管理它们的时间共享。

最佳答案

免责声明:这是对内核和 Go 运行时中调度的粗略和不准确的描述,旨在解释概念,而不是对真实系统的准确或详细解释。

您可能(或不知道),一个 CPU 实际上不能同时运行两个程序:一个 CPU 只有一个执行线程,它一次可以执行一条指令。对早期系统的直接影响是您不能同时运行两个程序,每个程序都需要(系统方面)一个专用线程。

目前采用的解决方案称为伪并行:给定多个逻辑线程(例如多个程序),系统将在一个逻辑线程中执行其中一个一定时间后切换到下一个。使用非常少量的时间(以毫秒为单位),您会给人类用户一种并行性的错觉。这种操作称为调度。

Go 语言不直接使用这个系统:它本身实现了一个运行在系统调度器之上的调度器,并调度 goroutines 本身的执行,绕过了为每个例程使用一个真实线程的性能成本。这种类型的系统称为浅色/绿色线程

关于go - Goroutines 和预定的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32173352/

相关文章:

linux - Golang UDP Server 只接收本地发送的数据包

go - 在具有 select case 和 default 的 Goroutines 中,一旦 channel 关闭,default 不应该被执行

docker - 如何从二进制文件在docker上运行go server

memory-leaks - 去(语言): How to use PPROF heap profile to find memory leaks?

go - 使用 go-sql-driver 和 mysql 安全插入查询

xml - `,omitempty`和Go 's standard ` xml`包中的指针字段

http - 异步 http 请求处理

go - 在 Go 中正确获取多态代码

go - 试图找到这个 perl 数组的 golang 等价物

go - go中的移动线位置(使用标准输出)