2013-07-14 2 views
5

Ich habe zwei Prozesse: ein Produzent die Nachrichten über ZMQ an einen Verbraucher in einem einfachen PULL-PUSH Punkt-zu-Punkt-Muster drückt. Der Produzent hat mehrere interne Threads, die send() über zmq. Die 0MQ-Dokumentation schlägt jedoch vor, Sockets zwischen Threads nicht zu teilen.ZMQ: kann mehrere Threads PUSH in einem einfachen PUSH-PULL Muster

Muss ich einen einzelnen Thread zum Senden verwenden?
Angenommen, es gibt keine strikte Anforderung, die Reihenfolge der Versendung zwischen den Threads beizubehalten, erlaubt die Tatsache, dass der Socket ein eindirektionaler Simplex ist, mehreren Threads, ihn ohne Einführung von Sperren zu verwenden?

Antwort

4

Am einfachsten ist es, einen separaten PUSH-Sockel auf jedem der Threads des Herstellers und connect all diese Sockel zu einem einzigen PULL-Buchse in Verbraucher zu erstellen.

In der Anleitung wird explizit erwähnt, dass ZeroMQ-Sockets für einen einzelnen Thread verwendet werden müssen. Ich würde sagen, dass die Verletzung dieser Anforderung keine gute Idee ist, auch wenn es zu funktionieren scheint: Dinge können in der nächsten Version der Bibliothek oder auf einer bestimmten Plattform oder in einem bestimmten Lastszenario brechen. Also, es ist einfach zu riskant.