Cocoaでは、NSThreadはpthreadよりも高速ですか?パフォーマンスは向上しますか?無視することは無視できますか?
4 に答える
これを裏付けるデータはありませんが、手足に出て「同等だ」と言います。 NSThread
はほぼ確実にpthreadのラッパーです(システムスレッドを作成する他の方法は本当にありますか?)。したがって、NSThread
pthreadと比較して使用するオーバーヘッドは、新しいオブジェクトを作成してから破棄することに関連するオーバーヘッドになります。スレッド自体が開始されると、パフォーマンスの点ではほぼ同じになります。
ここでの本当の質問は、「なぜあなたは知る必要があるのか」ということだと思います。NSThread
スポーンがパフォーマンスに悪影響を与えると思われる状況に遭遇したことがありますか?(数百のスレッドを生成している場合、これが問題であることがわかりますが、その場合、NSThread
オブジェクトではなく、数百のスレッドが問題である可能性があります)
NSThread
オブジェクトの作成がアプリケーションのボトルネックであるという証拠がない限り、私は間違いなく「無視できない」オプションを選択します。
pthreadのオーバーヘッドは実際にはわずかに少なくなりますが、実際に違いが生じるとは思えません。NSThreadは、その下でpthreadを使用します。スレッド内のコードの実際の実行速度は、両方で同じになります。
iPhone SDKでは、NSThreadはpthreadを実際のスレッドとして使用します。率直に言って、それらは同等です。
ただし、pthread APIを使用すると、pthreadAPIを介して「ディープ」設定にアクセスできます。たとえば、スケジューリング方法、スタックサイズ、デタッチされているかどうかなど。これらのAPIはNSThreadカプセルによって隠されています。
したがって、特定の条件下では、pthreadが優先されます。
また、NSThreadの追加料金として支払う「オーバーヘッド」または「インスタンス化の違い」は、pthread APIを使用してpthreadを正しく構成するために、最終的に実行する必要のある追加のサイクルと呼び出しによって均等になると思います。
NSThreadは、マルチスレッド化が必要なCocoa /Cocoa-touchアプリケーションのコーディングを節約する便利なラッパーに他なりません。