参考资料 - M 如何找工作
在 schedule 函数中,我们简单提过找一个 runnable goroutine 的过程,这一讲我们来详细分析源码。
2950 字
|
15 分钟
参考资料 - mian gorutine 如何创建
上一讲我们讲完了 Go scheduler 的初始化,现在调度器一切就绪,就差被调度的实体了。本文就来讲述 main goroutine 是如何诞生,并且被调度的。
1058 字
|
5 分钟
参考资料 - Go 原理 · 调度器
上一讲新创建了一个 goroutine,设置好了 sched 成员的 sp 和 pc 字段,并且将其添加到了 p0 的本地可运行队列,坐等调度器的调度。
1008 字
|
5 分钟
参考资料 - 调度器 · schedule 循环如何运转
上一节,我们讲完 main goroutine 以及普通 goroutine 的退出过程。main goroutine 退出后直接调用 exit(0) 使得整个进程退出,而普通 goroutine 退出后,则进行了一系列的调用,最终又切到 g0 栈,执行 schedule 函数。
873 字
|
4 分钟
抢占进行系统调用的 P - Go 原理
在 runtime.main() 函数中,执行 runtimeinit() 前,会启动一个 sysmon 的监控线程,执行后台监控任务:
2840 字
|
14 分钟
一个调度相关的陷阱 - Go 原理
由于 Go 语言是协作式的调度,不会像线程那样,在时间片用完后,由 CPU 中断任务强行将其调度走。对于 Go 语言中运行时间过长的 goroutine,Go scheduler 有一个后台线程在持续监控,一旦发现 goroutine 运行超过 10 ms,会设置 goroutine 的“抢占标志位
521 字
|
3 分钟
什么是 sheduler - Go 原理
Go 程序的执行由两层组成:Go Program,Runtime,即用户程序和运行时。它们之间通过函数调用来实现内存管理、channel 通信、goroutines 创建等功能。用户程序进行的系统调用都会被 Runtime 拦截,以此来帮助它进行调度以及垃圾回收相关的工作。
1525 字
|
8 分钟
什么是workstealing - Go 原理
Go scheduler 的职责就是将所有处于 runnable 的 goroutines 均匀分布到在 P 上运行的 M。
414 字
|
2 分钟