據我瞭解,在JVM上有一個線程池可用於core.async go塊,其線程數爲n + 2
,其中n
是機器上的內核數。core.async是否會阻止自己停止,或者是否有'調度程序'?
但是,許多go塊可以同時部署在一個線程上。每個處於停放狀態(這意味着它的計算沒有進行)或者處於運行狀態(其計算是圍繞產生熱量的核心發出嗡嗡聲)。如果在四核機器上有1000個go塊,那麼我猜想在任何一次運行狀態下,這1000個go塊中最多有6個是go塊。因此,其他994個方塊必須停放。
全線程被調度到核心;無論是由OS調度程序還是由JVM管理程序線程來完成。那麼一個go block如何進入/退出停放狀態?當它厭倦了正在運行的程序塊(塊)時,它是否決定停止自己?還是有一個作爲「go block scheduler」的supervisor線程,它決定哪個線程正在哪個線程上運行,並受到某些調度算法的影響,例如Round Robin等
謝謝
我認爲你正在將'core.async'的通道與它的IOC「線程」混合在一起,你可以使用'go'宏來創建通道。頻道實際上並不做任何事情,所以它們不會處於跑步或停車狀態。 –
core.async的* go block * park在某些使用停車操作的地方。這些是'core.async'編譯器可以停放這些塊的點。如果在go塊中執行一些阻止IO操作,那不是core.async提供的操作之一,那麼您將阻塞core.async線程池中的一個線程。這是我從Timothy Baldrige的視頻Macro Internals [part I](https://www.youtube.com/watch?v=R3PZMIwXN_g)和[part II](https://www.youtube.com/watch? v = SI7qtuuahhU)。兩者都非常有趣。 –
@ user3231690我更新了問題,以便問題指的是去塊而不是頻道。 –