协程的优势
来源:10-2 go语言的调度器

198703
2020-04-04
相对于线程,协程对资源的利用率更高,其他语言应用层大量的创建线程,但是真正并发执行的只是CPU核数个,其他线程都处在sleeping的状态,还设计到线程的切换,所以对资源的利用率很低,我们线上服务器java一个服务有1500个线程,但是running的是最高就8个。
但是我有一个疑问?
线程是抢占式公平的, 多个线程池之间是有隔离的效果的。
但是如果用协程,非公平、非抢占式,会不会造成某一个协程被“饿死” ?
写回答
1回答
-
ccmouse
2020-04-05
理论上在go13及之前,如果你的一个goroutine占着cpu,的确有可能饿死其他goroutine,就像我这里做的实验那样。
但现实中,造成切换的点其实非常多,我在本节中有罗列,只要不是cpu运算量很大,不用担心。
go14加入了可剥夺调度,如果真的有运算量很大的情况,可以观察一下。
不过你的情况有那么多线程等在那里,用goroutine语言应该能显著减少开销132020-04-06
相似问题