同時実行のために GCD の代わりに生の NSThreads を使用したい場合はありますか? 私は GCD が大好きですが、最終的に Cocoa/Cocoa-Touch に NSThreads を使用する必要があるかどうかを知りたいです。
3 に答える
私pthread
は制御、優れたパフォーマンス、および移植性のために s を使用します。NSThread
場合によっては、それが提供する追加のNSObject
インターフェースを使用することを選択するかもしれません.
使用する API (リアルタイム I/O やレンダリングなど) とスレッドを調整する必要がある下位レベルのインターフェイスがいくつかあります。使用するスレッドに関して柔軟性がある場合もあればNSThread
、このような状況で使用すると便利な場合もあるため、これらのインターフェイスで CF または NS 実行ループを簡単に使用できます。したがって、スレッドに設定した実行ループ パラメータは、スレッド自体よりも API にとってより重要である可能性があります。このような場合、GCD は必ずしも代替手段とは限りません。
しかし… ほとんどの開発者は、頻繁にこれらのレベルに落とす必要はありません。
基本的に、OS X または iOS で NSThread/pthread API を直接使用する必要はほとんどありません。他のプラットフォームでは、そうかもしれません (ただし、GCD は *BSD、Linux、さらには Windows にも広く移植されています - Grand Central Dispatch についてはウィキペディアのページを参照してください)。ただし、Apple OS プラットフォームでは、ほとんどの場合、スレッドのライフサイクル管理を行うシステム。独自のスレッド管理を行いたいと考えられる唯一のケースは、スレッドの優先度を管理し、各スレッドが手動で実行する作業量のバランスを取ることによってスレッドの待機時間を直接制御する必要がある高度にリアルタイムなシナリオです。
GCDではできない奇妙なことをしなければならない特別な状況があるかもしれません。ただし、GCDでできることはすべて、そのようにする必要があります(GCDとスレッドは相互に排他的ではありません。実際にスレッドを使用する必要がある場合は、既存のGCDを変更する必要はありません)。
ただし、どのような場合になるかはわかりません。おそらく、セカンダリ専用のRunLoopをセットアップする必要がある場合(GCDで実行できるかどうかはわかりませんが、スレッドで実行できることは確かです)。または、現時点では理解できない他の特殊なケースがあるかもしれません。