0

GCDを使用したマルチスレッド機能を備えたiPadアプリケーションがあります。は、GCDを使用してキューにブロックを追加する方法についてアドバイスが必要です

私は、バックグラウンド処理のいくつかの種類を行う必要があるとき、私は次のコードを使用し

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ -backgroundProcessing- }** 

をだから私の2つの質問は次のとおりです。

1)私は私のバックグラウンドのALLを追加しているので、同じキューへの処理、およびキューのデキューFIFOは常に並行して実行されますか?私は彼らがいると仮定しているが、わからない。アップルのドキュメントによると

2)私はすでに

システムは3つの同時ディスパッチ キューと各アプリケーションを提供することを知っています。これらのキューはアプリケーションに対してグローバルで、 は優先レベルによってのみ区別されます。

しかし、私の処理はDISPATCH_QUEUE_PRIORITY_HIGH、DISPATCH_QUEUE_PRIORITY_LOWまたはDISPATCH_QUEUE_PRIORITY_BACKGROUNDを必要としないので、それはDISPATCH_QUEUE_PRIORITY_DEFAULTグローバルキューにすべての私のバックグラウンド処理を入れて/何史上ことをお勧め/ OK /良い練習/でしょうか?または、複数のカスタムキューを使用できるようにカスタムキューを作成する必要があります。さらに、キューを増やすとパフォーマンスが向上しますか?

+0

を私は強く、独自のキューを作成し、それへの参照を保持することをお勧め。そうすれば、彼らは自分のスレッドで実行することがわかります。 –

答えて

3

1)いいえ、グローバルキューには特別な役割があります。それらは、異なるスレッド上で複数のブロックを同時に実行することができる。彼らは多かれ少なかれ、バックグラウンドジョブを入力するための素早い方法があります([1]、これらのグローバル並行キューにサブミットされたブロックはお互いに同時に実行されるかもしれません。)。順序付けが必要な場合は、タスクのキューを作成します。これらは非常に軽量であり、パフォーマンスに大きな影響を与えません。

2)デフォルトの優先度は、通常のタスクでは問題ありません。優先順位は、CPU負荷の集中するタスクや複雑なキュー階層を作成するとき(キューをキューに入れることができるように)、より興味深いものになります。

PS:WWDC 2010と2011のGCDビデオは、GCDのより精巧な部分についてかなりの洞察を与えてくれているので絶対にお勧めします。

[1] http://developer.apple.com/library/ios/#documentation/Performance/Reference/GCD_libdispatch_Ref/Reference/reference.html

+1

私はすべての処理をグローバルキューDEFAULTに追加します。キューを追加すると効率が上がるという印象を受けましたが、私は確信していませんでした。私はWWDC vidsもこれを投稿する前に見てきました。これを明確にする必要があった。ありがとう –

関連する問題