GCDは、CPUを最大限に活用するために必要な数のスレッドのみを作成することを理解しています。約30のバックグラウンドタスクを起動するために使用するコードdispatch_async
では、ActivityMonitorでスレッドの数が約30増加しているのがわかります。デュアルコアPCしかないので、私はそれを予期していなかったでしょう。
私は何かを誤解していると確信しています。誰かが何が起こっているのか教えてもらえますか?
GCDは、CPUを最大限に活用するために必要な数のスレッドのみを作成することを理解しています。約30のバックグラウンドタスクを起動するために使用するコードdispatch_async
では、ActivityMonitorでスレッドの数が約30増加しているのがわかります。デュアルコアPCしかないので、私はそれを予期していなかったでしょう。
私は何かを誤解していると確信しています。誰かが何が起こっているのか教えてもらえますか?
GCDがスレッドを追加することによってスレッドプールを増やす1つの状況は、I/O競合です。ディスパッチされたブロックがファイルシステムまたはネットワークI/Oを待機している場合、CPUは使用されないため、GCDはCPUがアイドル状態であり、より多くのスレッドを処理できると見なします。
実際、ディスパッチされたブロックの性質によっては、これによりI / Oの競合がさらに増加し、512ワーカースレッドの制限に達する可能性があります。Mike Ashは、この状況についてブログに投稿しています。