2

NSOperationQueueブログやドキュメントを読んでいます。

NSOperationQueue属性ごとに同時操作数を設定できsetMaxConcurrentOperationCountます。

私の疑問はsetMaxConcurrentOperationCount =1、それを使用している場合、キューが一度に1つのタスクしか実行できないことを意味します。では同時実行の意味は、シングルスレッド実行となります。

間違った意味を解釈している場合は教えてください。

4

3 に答える 3

5

はい、一度に 1 つのタスクのみを実行します。一度に 1 つずつ設定することが理にかなっている場合があります。たとえば、写真をダウンロードしてフィルターを適用します。あなたの観点からは、一度に 1 つずつダウンロードし、フィルターを適用して保存/表示することをお勧めします。ジョナサンがコメントに追加したように:

maxConcurrentOperationCount=1 を設定する代わりに。基本的に同じ効果を持つ別の操作の完了に依存する操作を作成できます。たとえば、A は B に依存していますが、B が A に依存していないことを確認してください。

setMaxConcurrentOperationCount =1、この種のものに適しています:

[myOperationQueue setMaxConcurrentOperationCount:1];
for (NSOperation *operation in myArrayOfOperations )
{
   [myOperationQueue addOperation:operation];
}

したがって、ループに新しい操作を追加しますが、それらはシリアル キューで実行されます。それでも、ドキュメントから:

操作キューは、優先度と準備状況に基づいて、キューに入れられた操作オブジェクトを実行します。キューに入れられたすべての操作オブジェクトが同じ優先度を持ち、キューに入れられたときに実行する準備ができている場合 (つまり、それらの isReady メソッドが YES を返す場合)、それらはキューに送信された順序で実行されます。同時操作の最大数が 1 に設定されているキューの場合、これはシリアル キューに相当します。ただし、操作オブジェクトのシリアル実行に依存しないでください。操作の準備状態が変化すると、実行順序が変わる可能性があります。

于 2013-10-28T13:58:07.427 に答える
0

maxConcurrentOperationCount を 1 に設定すると、実質的に NSOperation キューがシリアル キューに変更されるため、一度に 1 つのタスクのみを実行することを犠牲にして同時実行性の問題を回避できます。

ただし、好きなだけ NSOperationQueues を持つことができます。また、maxConcurrentOperationCount = 1 の 12 個の NSOperationQueues は、すべてのタスクを同時に実行できます。12 個のコアがある場合はそれを使用します。唯一の制限は、各キューで 1 つのタスクしか実行できないことです。

于 2014-07-25T14:56:33.217 に答える
0

キュー内の操作が1つずつ実行されることを意味し、1つが終了すると別の操作が開始できるため、1つのキューを選択するとSERIALキューになります

于 2013-10-28T13:54:27.067 に答える