【发布时间】:2016-06-12 21:03:04
【问题描述】:
据我了解,在 JVM 上有一个线程池可供 core.async go 块使用 n + 2 线程数,其中 n 是机器上的内核数。
但是,许多 go 块可以同时部署在一个线程上。每个都处于停放状态(这意味着它的计算没有进行)或处于运行状态(其中它的计算围绕核心产生热量嗡嗡作响)。如果四核机器上有 1000 个 go 块,那么我猜这 1000 个 go 块中最多有 6 个处于运行状态。因此,必须停放其他 994 个 go 街区。
全线程被调度到一个核心上;由 OS 调度程序或 JVM 主管线程执行。那么 go 块是如何进入/退出 parked 状态的呢?当它厌倦了运行(块)时,它是否决定自行停放,或者是否有一个主管线程充当“执行块调度程序”,它确定哪个执行块在哪个线程上运行并受制于某些调度算法,例如循环等.
谢谢
【问题讨论】:
-
我认为您将
core.async的频道与其可以使用go宏创建的IOC“线程”混为一谈。频道实际上不做任何事情,因此它们永远不会处于运行或停放状态。 -
@user3231690 我更新了问题,以便问题指的是 go 块而不是频道。
标签: clojure core.async