我对goroutine,用户线程和内核线程概念感到困惑
来自effective go introduce goroutine,那么os threads
是什么意思?它是指用户线程还是内核线程?
从go-scheduler paper开始,我了解M G P
,以及为什么P
的数量等于CPU的数量?如果所有的cpus都用于go程序,但是os系统中的其他程序没有cpu线程来执行?
os系统生成了多少内核线程?
答案 0 :(得分:4)
让我们包含您链接到的go-scheduler页面中的图片。
建立术语:
goroutines是我们在Go中最熟悉的,可以被认为是用户线程。这些更具技术性的名称是Green Threads。
P 用于执行从许多goroutine到许多OS线程的映射。每个OS线程有一个,该数字由GOMAXPROCS
的值确定(默认情况下,系统报告的CPU数量)。
所以,按顺序回答你的问题:
ps -eL
默认为核心数,但您可以更改它。仅仅因为您可以在所有核心上运行并不意味着您不会将CPU时间留给其他进程。并发通常涉及大量等待IO。即使你正在疯狂地挖掘东西,内核调度程序也会引导你运行其他东西。您可以在this answer
中找到有关操作系统与绿色线程的非常好的解释