6

私は 2 つのプロセスを持っています:シンプルな PULL-PUSH ポイントツーポイント パターンでZMQ経由でメッセージをコンシューマーにプッシュするプロデューサー。プロデューサーには、zmqを介するいくつかの内部スレッドがあります。ただし、0MQ のドキュメントでは、スレッド間でソケットを共有しないことを提案しています。send()

送信には単一のスレッドを使用する必要がありますか?
スレッド間で送信順序を保持するための厳密な要件がないと仮定すると、ソケットが一方向のシンプレックスであるという事実により、ロックを導入することなく複数のスレッドがそれを使用できるようになりませんか?

4

1 に答える 1

6

最も簡単な方法は、プロデューサーのスレッドごとに個別の PUSH ソケットを作成し、connectこれらすべてのソケットをコンシューマーの単一の PULL ソケットに作成することです。

ガイドには、ZeroMQ ソケットを単一のスレッドで使用する必要があることが明示的に記載されています。この要件に違反することは、うまくいくように見えても、良い考えではないと思います。ライブラリの次のバージョン、特定のプラットフォーム、または特定の負荷シナリオで問題が発生する可能性があります。ですから、リスクが高すぎるのです。

于 2013-07-15T10:33:37.120 に答える