core.async 去街区自己停车,还是有 'scheduler'?
Do core.async go blocks park themselves, or is there a 'scheduler'?
据我了解,在 JVM 上有一个线程池可用于 core.async go 块,线程数为 n + 2
,其中 n
是核心数机器。
但是,可以在一个线程上同时部署多个go blocks。每个都处于停放状态(这意味着它的计算没有进行)或处于 运行 状态(其中它的计算围绕着产生热量的核心嗡嗡作响)。如果在四核机器上有 1000 个 go 块,那么我猜这 1000 个 go 块中最多有 6 个在任何时候处于 运行 状态。其他994个围棋块必须停放。
全线程被调度到一个核心上;通过 OS 调度程序或 JVM 主管线程。那么go是如何阻塞enter/exit停放状态的呢?当它对运行(块)感到厌倦时,它是否决定停放自己,或者是否有一个主管线程充当'go block scheduler',它确定哪个go块是运行在哪个线程上并受制于一些调度算法,如 Round Robin 等
谢谢
他们自己停车。
go
宏遍历整个表单,找到它需要停放的地方,并显式调用以将线程停放在这些地方。一些常见的是:
- 其他go块的开始
- 取自陈
<!
- 发送给一个频道
>!
- 调用
async/thread
这是 go 块不能跨越函数调用的很大一部分原因。 compiler/macro 需要能够看到整个代码块才能将它们放在正确的位置。
据我了解,在 JVM 上有一个线程池可用于 core.async go 块,线程数为 n + 2
,其中 n
是核心数机器。
但是,可以在一个线程上同时部署多个go blocks。每个都处于停放状态(这意味着它的计算没有进行)或处于 运行 状态(其中它的计算围绕着产生热量的核心嗡嗡作响)。如果在四核机器上有 1000 个 go 块,那么我猜这 1000 个 go 块中最多有 6 个在任何时候处于 运行 状态。其他994个围棋块必须停放。
全线程被调度到一个核心上;通过 OS 调度程序或 JVM 主管线程。那么go是如何阻塞enter/exit停放状态的呢?当它对运行(块)感到厌倦时,它是否决定停放自己,或者是否有一个主管线程充当'go block scheduler',它确定哪个go块是运行在哪个线程上并受制于一些调度算法,如 Round Robin 等
谢谢
他们自己停车。
go
宏遍历整个表单,找到它需要停放的地方,并显式调用以将线程停放在这些地方。一些常见的是:
- 其他go块的开始
- 取自陈
<!
- 发送给一个频道
>!
- 调用
async/thread
这是 go 块不能跨越函数调用的很大一部分原因。 compiler/macro 需要能够看到整个代码块才能将它们放在正确的位置。