0

私は、役割ごとにスレッドを持つ単一のプロデューサー、複数のコンシューマープログラムを持っています。私は、各コンシューマーにtcpの循環バッファーを実装し、プロデューサーが循環バッファーのメモリーへのポインターを保持できるようにしてから、データをオフロードするためにポインタースペースをtcpに渡すことを考えています。

私の問題は、データがいつ入っているかをコンシューマースレッドに知らせる方法ですか?

ポインタの場所で0以外のものをチェックするのに忙しいのを待っていると思っています。私はCPUホッグであってもかまいません。

各スレッドはSCHED_FIFOによるcpusetおよびsoftRTであり、もちろんcが実装されていることに言及する必要があります。

4

1 に答える 1

1

私の経験では、複数のコンシューマーデータ構造の問題は、誤った共有やCPUサイクルの過度の浪費の問題を回避しながら、同時実行を適切に処理することです。

したがって、問題が許せば、私はpipe各消費者へのパイプを作成し、ラウンドロビン方式でこれらのパイプにアイテムを入れるために使用します。その後、コンシューマーepollはファイルハンドルを監視するために使用できます。これにより、並行データ構造を実装および最適化する必要がなくなり、CPUサイクルを不必要に消費することがなくなります。コストは、システムコールを通過する必要があるということです。

システムコールを回避するためにポーリングを使用してすべてを自分で実行する場合は、循環バッファを構築できますが、アイテムが書き込まれた後にのみ、1つのプロセスだけが同時にアイテムを読み取るようにする必要があります。通常、これは4つのポインターと適切なミューテックスを使用して行われます。

XenのI/Oリングバッファに関するこの記事は興味深いかもしれません。

于 2012-06-11T19:37:42.313 に答える