2
ディスパッチキュー内でdispatch_semaphore_wait
を使用している場合、多くのスレッドがdispatch_semaphore_wait
でブロックされている場合、スレッドのディスパッチキューが不足する可能性がありますか?ディスパッチキュー内でdispatch_semaphore_waitを使用しているときのスレッドスターベーション?
parallelDownloadsSemaphore = dispatch_semaphore_create(4);
[...]
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
dispatch_semaphore_wait([self parallelDownloadsSemaphore], DISPATCH_TIME_FOREVER);
// perform lengthy download
dispatch_semaphore_signal([self parallelDownloadsSemaphore]);
});
ブロックされたスレッドがスレッドプールに返されないため、多くのスレッドがブロックされていると、スレッドがなくなる危険性がかなり高くなります。一般に、標準キューにはCPUコアあたり1つのスレッドしかありません。誰かがこれをサポートするためのドキュメントへの参照を持っていますか? – Twilite
スレッドをブロックすることで、私はかなり確信しており、常にこれを避けるべきです。並列キューあたりのスレッド数は何とかCPUの数に制限されているということは、私が行ったことだけでした。しかし、これで私は絶対に確信していません。私はいくつかの参考文献を見つけることを試みる。 –