GCD、NSThread、NSOperationQueue のどれがベストでしょうか? [closed] 質問する

GCD、NSThread、NSOperationQueue のどれがベストでしょうか? [closed] 質問する

NSThreadiOS には GCD 、、の3 つのオプションがありますが、マルチスレッド化の最適な方法は何ですかNSOperationQueue? どれが最適なのかわかりません。 どれも最適でない場合、どのシナリオでどれを使用すればよいのか、また、それらの違いを教えてください。また、 の使用例がございましたらNSOperationQueue、ぜひ共有して、私が学べるように教えてください。

ベストアンサー1

簡単な答え:

  1. 作成したスレッドを直接制御する必要がある場合、または直接制御する必要がある場合は、NSThread (または pthreads API) を使用します。たとえば、スレッドの優先順位を細かく制御する必要がある場合や、スレッド オブジェクトを直接販売/消費する他のサブシステムとインターフェイスしていて、そのサブシステムと同じページに留まる必要がある場合などです。このようなインスタンスはまれですが、特にリアルタイム アプリケーションでは発生します。

  2. GCD は、タスクが単純な並列化に適している場合に使用します。たとえば、ごくわずかな追加作業で一部の作業を「バックグラウンド」に投入したい場合、単にシリアル化してアクセスしたいデータ構造がある場合 (シリアル キューはロックなしでこれを行うのに最適です)、dispatch_apply() を使用した並列化に適した for ループがある場合、GCD のソース API を使用するとバックグラウンドで簡単に処理できるデータ ソースやタイマーがある場合などです。GCD は非常に強力で、これ以外にもさまざまな用途に使用できますが、これらはすべて、初期化やセットアップのタスクにあまり煩わされることなく、単に「基本的な作業を並列で実行」したいという比較的「簡単な」シナリオです。

  3. NSOperation は、すでに Cocoa API レイヤー (POSIX API に直接 C で記述するのではなく) に達していて、並列化したいより複雑な操作がある場合に使用します。NSOperation では、サブクラス化、任意の複雑な依存関係グラフ、キャンセルが可能で、他にも役立つ可能性のある高レベルのセマンティクスが多数サポートされています。NSOperation は実際には GCD を裏で使用しているため、GCD と同様にマルチコア、マルチスレッドに対応しています。ただし、Foundation フレームワークも一緒に使用されるため、POSIX レイヤーをハッキングする場合は、おそらくオプション 2 を使用することをお勧めします。

ただし、他の人が言っているように、すべてはあなたが何をしようとしているかによって決まるため、あなたの質問に対する単一の、あるいは普遍的に正しい答えはありません。

おすすめ記事