对go的goroutine理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对go的goroutine理解相关的知识,希望对你有一定的参考价值。

1.实际是go运行时自己控制线程数目(线程池),执行许多的task(goroutine),防止线程切换的开销,充分利用多核做并行计算

2.在io等需要等待的操作发生的时候go运行时切换task,但是线程不切换继续执行其他task,io完成后挂起的task重新参与调度

3.底层处理io的实现在windows下是iocp,在linux下是epoll,mac下是kqueue, golang自己封装了抽象层(这些都是这些操作系统下目前最优方案)。

 

背景知识自行脑补

1.线程切换的开销

2.epoll

3.iocp

以上是关于对go的goroutine理解的主要内容,如果未能解决你的问题,请参考以下文章

Go 语言调度: goroutine 调度器

理解Go语言的Goroutine和协程

golang语言并发与并行——goroutine和channel的详细理解

理解go中goroutine的GPM

go进阶 -深入理解goroutine并发运行机制

进程线程轻量级进程协程和go中的Goroutine