2

dispatch_asyncと を使用して非同期にタスクを実行できることを知っていdispatch_get_global_queueます。

しかし、dispatch_async が作成するスレッドはいくつあるでしょうか。GCD で正確に N 個 (それ以上でもそれ以下でもありません) のスレッドを実行し、それらに対していくつかのタスクを実行するにはどうすればよいですか? タスクの実行後、解放されたスレッドに新しいタスクを追加する必要があります。おそらく、前のタスクの完了ブロックに追加する必要があります。

それとも、スレッドの数を制御できNSOperationQueueますか? プロパティがあることは知っていますmaxConcurrentOperationCountが、タスクの最大制限のみを制御します。したがって、maxConcurrentOperationCount = 8 を設定して 12 の操作NSOperationQueue

どうもありがとうございました!

4

4 に答える 4

5

NSThreadを調べる必要があります。実行したいスレッドの正確な数を細かく制御する必要がある場合は、これが適しています。

于 2013-02-06T11:35:27.577 に答える
4

実行したいタスクのNSOperationをサブクラス化し、それらをNSOperationQueueに入れます。キューでの同時操作の数を設定できます。

NSOperationQueue *q = [[NSOperationQueue alloc] init];
q. maxConcurrentOperationCount = N;
于 2013-02-06T11:38:57.437 に答える
1

キューの概念はスレッドとは異なります。NSThread クラスを通過します。NSOperation は GCD を使用するため、ここからスレッドを設定することはできません。NSThread と NSOperation をマージして、異なるスレッドを作成および渡すことができます。
しかし、なぜあなたはそれをするのですか?より多くのスレッドがより多くの速度を意味するわけではありません。通常、メモリ、ロック、同時実行性などについて多くの懸念がある場合は逆
です。非常に具体的な理由が必要です。

于 2013-02-06T11:44:31.380 に答える