我对goroutine、用户线程和内核线程的概念感到困惑
1.从有效的开始引入goroutine,那么论文中提到的os threads
是什么意思呢?是用户线程还是内核线程?
1.从go-scheduler paper中,我了解了M G P
,以及为什么P
的数量等于CPU的数量?如果所有的cpu都为go程序服务,而操作系统中的其他程序没有cpu线程执行?
1.操作系统生成多少个内核线程?
我对goroutine、用户线程和内核线程的概念感到困惑
1.从有效的开始引入goroutine,那么论文中提到的os threads
是什么意思呢?是用户线程还是内核线程?
1.从go-scheduler paper中,我了解了M G P
,以及为什么P
的数量等于CPU的数量?如果所有的cpu都为go程序服务,而操作系统中的其他程序没有cpu线程执行?
1.操作系统生成多少个内核线程?
1条答案
按热度按时间50pmv0ei1#
让我们包含您链接到的go-scheduler页面中的图片。
并建立术语:
*M:操作系统线程,也可以称为内核线程
*P:处理器或调度上下文
*G:Goroutine
goroutine是我们在Go中最熟悉的,可以被认为是用户线程。更专业的名称是Green Threads。
P用于执行从许多goroutine到许多OS线程的Map。每个操作系统线程有一个,其数量由
GOMAXPROCS
的值(默认情况下,系统报告的CPU数量)确定。所以,按顺序回答你的问题:
GOMAXPROCS
默认为内核数量,但您可以更改它。仅仅因为您可以在所有内核上运行并不意味着您不会将CPU时间留给其他进程。并发通常需要等待大量的IO。即使你正在疯狂地进行散列运算,内核调度程序也会 Boot 你去运行其他东西。ps -eL
,我的系统目前有1434个,其中一些是实际的内核作业,一些是我的go程序。你可以在this answer中找到一个关于OS和绿色线程的很好的解释