web-dev-qa-db-ja.com

ディスパッチキューとNSOperationQueueの違い

私はGCDとスレッド化に非常に慣れていません。私はチュートリアルを通り抜けて、非常に混乱しました。誰かが簡単な言葉で説明できますか。Apple開発者リンクを提案しないでください。

前もって感謝します !

14
Valli

NSOperationQueueは、キャンセルする必要がある、または複雑な依存関係を持つ可能性のある長時間実行操作に適しています。 GCDディスパッチキューは、パフォーマンスとメモリのオーバーヘッドを最小限に抑える必要がある短いタスクに適しています。

NSOperationQueueにエンキューされた操作をキャンセルすることができます(操作がサポートしている場合)。ブロックをGCDディスパッチキューにエンキューすると、ある時点で確実に実行されます。

以下のリンクを確認してください、それはあなたに役立つかもしれません。

iOSアプリケーションの操作キューとディスパッチキュー

15
Sabareesh

GCDNSOperationQueueよりも低レベルであり、その主な利点は、その実装が非常に軽量であり、ロックフリーのアルゴリズムとパフォーマンスに重点を置いていることです。

一般に、ニーズに合った最高レベルの抽象化を使用する必要があります。つまり、通常はNSOperationQueueの代わりにGCDを使用する必要があります。 NSOperationQueueを使用すると、操作の実行方法をより細かく制御できます。

1
Bhavin_m

操作必要なときに特定の操作をキャンセルしたり、すべての操作を同時にキャンセルしたりできるように、タスクをより細かく制御できます。しかし、これと同じことはできませんディスパッチキューを使用して

さらにディスパッチキュー[〜#〜] fifo [〜#〜]の概念に取り組んでいますが、操作ではありません

操作の場合、タスクに優先順位を付け、優先順位を定義することで、最初に実行するタスクと最後に実行するタスクなどを制御できます。

これは、「queuePriority」という名前のプロパティを非常に低い、低い、通常、高い、非常に高いに設定することによって行われます。他の多くのそのようなことは、操作を使用して実行でき、ディスパッチキューでは実行できません。

操作デフォルトでは同時であるため、シリアルに実行することはできませんしかしこれは、操作2操作1に依存しているように、操作の相互依存関係を追加することによっても実現できます。 および操作3は操作2に依存します。したがって、これを行うことにより、それらはシリアルに実行されます。

1
Swifty Codes