【golang】协程调度
在 Go 语言中,协程是轻量级的用户态线程,也称为 goroutine,运行在操作系统的线程之上,是 Go 语言的核心特性之一。协程的调度是由 Go 语言运行时(runtime)实现的,下面是协程调度的基本流程:
当一个 goroutine 被创建时,它的执行是由主 goroutine 控制的。
如果该 goroutine 遇到了一个 I/O 操作、系统调用、时间延迟等需要阻塞的事件,则该 goroutine 会将自己从内部的队列中移除,直到该事件完成。
运行时系统会从运行队列中调度一个可运行的 goroutine 继续执行。
当一个 goroutine 执行完毕时,它也会自动从队列中退出。
如果主 goroutine 卡住了,运行时系统会尝试捕获 panic 以便程序能够正常退出。
当所有 goroutine 都结束并且 main 函数退出后,程序退出。
总的来说,Go 语言中的协程调度采用了 M:N 模型,即运行时系统会将多个 goroutine 映射到少量的操作系统线程上进行执行。这种方式有效地利用了多处理器系统的资源,并且可以轻松地处理大量的并发请求,提高了程序的执行效率和性能。