Я занимаюсь коммуникацией процесса с процессом; цель состоит в том, чтобы рабочие процессы выполняли некоторые вычисления и передавали результат в управляющий процесс. Я установил zeromq.node и установил простой запросчик и ответчик в coffeescript.
запросчик:
# 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 to 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 is 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
Ответчик:
# 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 to 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 is 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
Теперь, когда я запускаю их в отдельных терминальных окнах на моем компьютере ubuntu (11.10, 8GB, Intel Duo Core 3GHz, NodeJS 0.8.6), я получаю следующий вывод:
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
который (1) немного похож на некоторое насыщение в канале передачи через несколько секунд; (2) чувствует себя недостаточно быстро. в соответствии с этот контрольный показатель, я должен быть в сотнях тысяч - не тысячи - сообщений в секундах, который подкрепляется это обсуждение ( "ZeroMQ: для получения 10 000 сообщений требуется около 15 миллисекунд" ).
Я также попытался использовать ответчика, написанного на python 3, и получил точные номера. что еще, я написал альтернативную пару скриптов, где мастер-процесс будет порождать дочерний процесс и связываться с ним по stdout/stdin; Я получил около 750 сообщений в секунду (я не видел большой дисперсии, когда я увеличил длину сообщения), который находится в том же самом шаге, что и эксперимент zeromq.
Ожидаются ли эти цифры? Какой здесь ограничивающий фактор?