Go runtime 调度器精讲(十一):总览全局

前言 前面用了十讲介绍了 Go runtime 调度器,这一讲结合一些图在总览下 Go runtime 调度器。 状态转换图 首先是 Goroutine 的状态转换图: 大部分转移路径前面几讲也介绍过,这里就不继续介绍了(下同)。 ...

2024-09-17 · xhy

Go runtime 调度器精讲(十):异步抢占

前言 前面介绍了运行时间过长和系统调用引起的抢占,它们都属于协作式抢占。本讲会介绍基于信号的真抢占式调度。 在介绍真抢占式调度之前看下 Go 的两种抢占式调度器: ...

2024-09-16 · xhy

Go runtime 调度器精讲(九):系统调用引起的抢占

前言 第八讲介绍了当 goroutine 运行时间过长会被抢占的情况。这一讲继续看 goroutine 执行系统调用时间过长的抢占。 系统调用时间过长的抢占 看下面的示例: 1func longSyscall() { 2 timeout := syscall.NsecToTimeval(int64(5 * time.Second)) 3 fds := make([]syscall.FdSet, 1) 4 5 if _, err := syscall.Select(0, &fds[0], nil, nil, &timeout); err != nil { 6 fmt.Println("Error:", err) 7 } 8 9 fmt.Println("Select returned after timeout") 10} 11 12func main() { 13 threads := runtime.GOMAXPROCS(0) 14 for i := 0; i < threads; i++ { 15 go longSyscall() 16 } 17 18 time.Sleep(8 * time.Second) 19} longSyscall goroutine 执行一个 5s 的系统调用,在系统调用过程中,sysmon 会监控 longSyscall,发现执行系统调用过长,会对其抢占。 ...

2024-09-16 · xhy

Go runtime 调度器精讲(八):运行时间过长的抢占

前言 在 Go runtime 调度器精讲(七):案例分析 一文我们介绍了一个抢占的案例。从案例分析抢占的实现,并未涉及到源码层面。本文将继续从源码入手,看 Go runtime 调度器是如何实现抢占逻辑的。 ...

2024-09-16 · xhy

Go runtime 调度器精讲(七):案例分析

前言 前面用了六讲介绍 Go runtime 调度器,这一讲我们看一个关于调度 goroutine 的程序案例分析下调度器做了什么。需要说明的是,这个程序和抢占有关,抢占目前为止还没有介绍到,如果看不懂也没有关系,有个印象就行。 ...

2024-09-15 · xhy

Go runtime 调度器精讲(六):非 main goroutine 运行

前言 在 Go runtime 调度器精讲(三):main goroutine 创建 介绍了 main goroutine 的创建,文中我们说 main goroutine 和非 main goroutine 有区别。当时卖了个关子并未往下讲,这一讲我们会继续介绍非 main goroutine (也就是 go 关键字创建的 goroutine,后文统称为 gp) 的运行,并且把这个关子解开,说一说它们的区别在哪儿。 ...

2024-09-14 · xhy

Go runtime 调度器精讲(五):调度策略

前言 在 第四讲 我们介绍了 main goroutine 是如何运行的。其中针对 main goroutine 介绍了调度函数 schedule 是怎么工作的,对于整个调度器的调度策略并没有介绍,这点是不完整的,这一讲会完善调度器的调度策略部分。 ...

2024-09-14 · xhy

Go runtime 调度器精讲(四):运行 main goroutine

前言 皇天不负有心人,终于我们到了运行 main goroutine 环节了。让我们走起来,看看一个 goroutine 到底是怎么运行的。 运行 goroutine 稍微回顾下前面的内容,第一讲 Go 程序初始化,介绍了 Go 程序是怎么进入到 runtime 的,随之揭开 runtime 的面纱。第二讲,介绍了调度器的初始化,要运行 goroutine 调度器是必不可少的,只有调度器准备就绪才能开始工作。第三讲,介绍了 main goroutine 是如何创建出来的,只有创建一个 goroutine 才能开始运行,否则执行代码无从谈起。这一讲,我们继续介绍如何运行 main goroutine。 ...

2024-09-13 · xhy