javascript - what is the expected performance of ZeroMQ? -


i dabbling process-to-process communication; aim have worker processes perform computations , pass result controlling process. installed zeromq.node , set simple requester , responder in coffeescript.

the requester:

# requester.coffee  zmq                       = require 'zmq' context                   = new zmq.context() socket                    = zmq.socket 'req'  socket.bind 'tcp://127.0.0.1:5555', ( error ) =>   throw error if error?   console.log 'requesting writer bound port 5555'   setinterval ( -> socket.send 'helo world' ), 1   response_count  = 0 t0              = new date() / 1000  socket.on 'message', ( message ) ->   response_count += 1   # x = message.tostring 'utf-8'   if response_count % 1000 0     t1              = new date() / 1000     console.log "received #{ parseint response_count / ( t1 - t0 ) + 0.5 } messages per second"     response_count  = 0     t0 = new date() / 1000 

the responder:

# responder.coffee  zmq                       = require 'zmq' context                   = new zmq.context() socket                    = zmq.socket 'rep'  socket.connect 'tcp://127.0.0.1:5555' console.log 'responder bound port 5555' process.stdin.resume()  request_count   = 0 t0              = new date() / 1000  socket.on 'message', ( message ) ->   request_count += 1   # message = message.tostring 'utf-8'   # console.log message   socket.send 'helo back'   if request_count % 1000 0     t1              = new date() / 1000     console.log "received #{ parseint request_count / ( t1 - t0 ) + 0.5 } messages per second"     request_count  = 0     t0 = new date() / 1000 

now when run them in separate terminal windows on ubuntu (11.10, 8gb, intel duo core 3ghz, nodejs 0.8.6) machine, following output:

received 135 messages per second received 6369 messages per second received 6849 messages per second received 6944 messages per second received 7042 messages per second received 7143 messages per second received 5952 messages per second received 2967 messages per second received 914 messages per second received 912 messages per second received 928 messages per second received 919 messages per second received 947 messages per second received 906 messages per second received 918 messages per second received 929 messages per second received 916 messages per second received 917 messages per second received 916 messages per second received 928 messages per second 

which (1) looks little there kind of saturation in transmission channel after few seconds; (2) feels not fast enough. according this benchmark, should in hundreds of thousands – not thousands – of messages per seconds, corrobrated this discussion ("zeromq: takes 15 milli seconds receive 10,000 messages").

i have tried to use responder written in python 3 , got exact same numbers. what's more, wrote alternative pair of scripts, master process spawn child process , communicate on stdout/stdin; obtained around 750 messages per second (i couldn't see variance when increased message length), in same ballpark zeromq experiment.

are these numbers expected? limiting factor here?

i think 2 things going on. first, have setinterval ( -> socket.send 'helo world' ), 1. sends request every millisecond, going limited 1000 request per second.

also, request/response model synchronous. request comes in on socket , blocks until response given. response, next request processed , blocked.

i changed requester script socket = zmq.socket 'req' socket = zmq.socket 'push' , setinterval ( -> socket.send 'helo world' ), 0 socket.send 'helo world' while true. changed responder script socket = zmq.socket 'rep' socket = zmq.socket 'pull' , got output

$ coffee responder.coffee responder bound port 5555 received 282 messages per second received 333357 messages per second received 249988 messages per second received 333331 messages per second received 250003 messages per second received 333331 messages per second received 333331 messages per second received 333331 messages per second ... 

the requester got no output because blocking on while loop, demonstrate Ømq can better performance.


Comments

Popular posts from this blog

how to insert data php javascript mysql with multiple array session 2 -

multithreading - Exception in Application constructor -

windows - CertCreateCertificateContext returns CRYPT_E_ASN1_BADTAG / 8009310b -