在调用系统调用时,其他goroutine如何继续执行?(当使用GOMAXPROCS = 1时)
据我所知,在调用系统调用时,线程会放弃控制,直到系统调用返回为止.Go如何在不使用block-on-syscall goroutine创建系统线程的情况下实现这种并发性?
从文档:
够程
它们被称为goroutines,因为现有的术语 - 线程,协同程序,进程等 - 传达了不准确的内涵.goroutine有一个简单的模型:它是一个与同一地址空间中的其他goroutine同时执行的函数.它是轻量级的,比堆栈空间的分配花费更多.并且堆栈开始很小,因此它们很便宜,并且通过根据需要分配(和释放)堆存储来增长.
Goroutines被多路复用到多个OS线程上,因此如果应该阻塞,例如在等待I/O时,其他线程继续运行.他们的设计隐藏了线程创建和管理的许多复杂性.
我对goroutine,用户线程和内核线程概念感到困惑
从有效的介绍goroutine,那么os threads本文提到的是什么意思?是用户线程还是内核线程?
我从go-scheduler论文中了解到M G P,为什么的数量P等于CPU的数量?如果所有的cpus用于go程序,但是os系统中的其他程序没有cpu线程要执行?
os系统生成了多少个内核线程?