2013-07-14 10 views
5

Ho due processi: un produttore che spinge messaggi tramite ZMQ ad un consumatore in un semplice schema pull-push point-to-point. Il produttore ha diversi thread interni che sono send() tramite zmq. Tuttavia, i documenti 0MQ suggeriscono di non condividere socket tra i thread.zmq: può più fori di estrazione in un semplice schema PUSH-PULL

Devo utilizzare una singola discussione da inviare?
Supponendo che non vi sia alcun requisito rigoroso per mantenere l'ordine di invio tra i thread, il fatto che il socket sia un simplex unidirezionale consenta a più thread di utilizzarlo senza introdurre blocchi?

risposta

4

La cosa più semplice da fare è creare una presa PUSH separata su ciascun thread del produttore e connect tutte queste prese su un singolo socket PULL nel consumer.

Nella guida è esplicitamente indicato che le prese ZeroMQ devono essere utilizzate su una singola filettatura. Direi che violare questa richiesta non è una buona idea, anche se sembra funzionare: le cose potrebbero rompersi nella prossima versione della libreria o su una piattaforma specifica o in uno scenario di caricamento specifico. Quindi, è troppo rischioso.

Problemi correlati