私が理解しているように、JVMには、n + 2
スレッド数のcore.async goブロックに利用可能なスレッドプールがあります。n
はマシン上のコア数です。core.async goブロック自体がパークしていますか、または「スケジューラ」がありますか?
しかし、多くのgoブロックを同時に1つのスレッドにデプロイすることができます。それぞれは、駐車状態(その計算が進行していないことを意味する)または実行状態(その計算が熱を発生する炉心の周りで鳴っている)のいずれかである。クアッドコアマシンに1000個のブロックがある場合、これらの1000個のブロックのうち最大6個がいつでも実行状態にあると推測します。したがって、他の994ブロックは駐車する必要があります。
フルスレッドはコアにスケジュールされます。 OSスケジューラまたはJVMスーパバイザスレッドによって実行されます。だから、goブロックは駐車状態にどのように出入りしますか?それは、実行中(ブロック)に飽きたときに自分自身をパークするか、ブロックがどのスレッド上で実行され、ラウンドロビンなどのいくつかのスケジューリングアルゴリズムの影響を受けるブロックを決定する「ブロックスケジューラ」として働くスーパバイザスレッドです。
ありがとうございました
'core.async'のチャンネルを' go'マクロを使って作ることができるIOCの "スレッド"と混同していると思います。チャネルは実際には何もしないので、実行中の状態やパーキング状態にはなりません。 –
'core.async'の* goブロック*パークは、駐車操作が使用される特定のポイントにあります。これらは 'core.async'コンパイラがこれらのブロックを駐車できるポイントです。 goブロック内でIO操作をブロックしている場合、それはcore.asyncによって提供される操作の1つではなく、core.asyncのスレッドプール内のスレッドの1つをブロックします。これはTimothy Baldrigeの動画「マクロ内部」(https://www.youtube.com/watch?v=R3PZMIwXN_g)と「パートII」(https://www.youtube.com/watch?)から私が理解したものです。 v = SI7qtuuahhU)。どちらも非常に面白いです。 –
@ user3231690私は質問がチャンネルにではなくブロックになるように質問を更新しました。 –