1

現在、通常のLinuxパイプを使用して通信し、さまざまなスレッドにメッセージを送信するpthreadsアプリがあります。それはうまく機能し、実際には壊れていませんが、私はそれが改善できるというしつこい感じがします。

レイテンシーを最小にするように設計したい場合、pthread間で通信するための最速の方法は何ですか?条件変数の使用はパイプよりも高速ですか?

いくつかのパラメータを持つ単一のintオペコードとして、少量のデータを渡す必要があります。pthreads条件変数を使用すると、スレッド間でデータを渡すことができますか?

ありがとう、

-アンドレス

4

2 に答える 2

1

個別のプロセスではなくスレッドを使用する主な利点は、スレッドがメモリを共有することです。パイプを介してデータを送信するには、カーネルを介したラウンドトリップが必要ですが、共有メモリバッファーをミューテックスおよび条件変数と組み合わせて使用​​すると、これを回避できます。確かに、パイプを使用するよりもレイテンシーが低くなります。

条件変数を使用して、対象のデータを直接渡すことはありません。代わりに、データは2つのスレッドによって共有されるメモリ位置に配置され、条件変数を使用して、データの到着を待機しているスレッドをウェイクアップします。

于 2012-12-11T06:04:20.007 に答える
1

スレッド間であるため、共有メモリまたはロックフリーキューのいずれかがかなり高速になります。

どちらを選択するかは、渡すデータによって異なります。ロックによって保護されている2つのスレッド間で共有される静的バッファーは問題ありません。データを生成して別のスレッドに渡す場合は、おそらくキューの方が適しています。

制限付きロックフリーMPMCキューのいくつかの実装は、 http://www.1024cores.netで入手できます。

ちなみに、独自のロックフリーデータ構造を作成する場合は注意が必要です。彼らはあなたが正しくなると期待するほど些細なことではありません。ロッキングバージョンは良いスタートであり、それでもパイプよりも優れています。

プロセス間では、Linuxパイプを呼び出します(またはunixドメインソケットが適切なオプションです)。

于 2012-12-10T23:50:57.350 に答える