Tôi đang dabbling với quá trình truyền thông quá trình; mục đích là để có các quy trình công nhân thực hiện một số tính toán và trả lại kết quả cho một quá trình kiểm soát. Tôi đã cài đặt zeromq.node và thiết lập trình yêu cầu và trả lời đơn giản trong coffeescript.Hiệu suất mong đợi của ZeroMQ là gì?
người yêu cầu:
# 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
Các trả lời:
# 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
Bây giờ khi tôi chạy chúng trong cửa sổ terminal riêng biệt trên ubuntu của tôi (11.10, 8GB, Intel Core Duo 3GHz, NodeJS 0.8.6) máy, tôi nhận được kết quả sau:
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) trông hơi giống một số loại satu khẩu phần ăn trong kênh truyền sau vài giây; (2) cảm thấy không đủ nhanh. theo số this benchmark, tôi phải ở trong hàng trăm nghìn - không phải hàng nghìn tin nhắn mỗi giây, được phân phối bởi this discussion ("ZeroMQ: Mất khoảng 15 giây để nhận 10.000 tin nhắn").
Tôi cũng đã cố sử dụng bộ trả lời được viết bằng python 3 và có cùng số chính xác. những gì nhiều hơn, tôi đã viết một cặp thay thế của kịch bản, nơi mà quá trình tổng thể sẽ đẻ trứng một quá trình con và giao tiếp với nó trên stdout/stdin; Tôi thu được khoảng 750 tin nhắn mỗi giây (tôi không thể thấy nhiều khác biệt khi tôi tăng chiều dài tin nhắn), mà là giống như các ballpark giống như thí nghiệm zeromq.
Những con số này có được mong đợi không? Yếu tố hạn chế ở đây là gì?
REQ-REP đồng bộ là giới hạn chính, xem hướng dẫn về các ví dụ không đồng bộ khác để tăng tỷ lệ hiệu suất. –
không chắc chắn tôi hiểu bạn một cách chính xác, nhưng không có vấn đề bao nhiêu thiết bị đầu cuối trả lời tôi mở, tỷ lệ báo cáo của người yêu cầu luôn ở trong phạm vi 900 mps. bây giờ người yêu cầu chắc chắn không chặn, và nó gửi ra các yêu cầu nhanh như nó có thể - như đối với javascript trên nodejs, chắc chắn nhanh hơn 1 yêu cầu mỗi mili giây? – flow
bạn có 'setInterval ... 1', điều đó không có nghĩa là nó chỉ gửi một tin nhắn mỗi mili giây? Điều đó sẽ cho bạn giới hạn trên 1k msg/giây. Loại bỏ setInterval và đặt socket.send bên trong khối 'on 'message'' cho người yêu cầu nếu bạn thực sự muốn xem giới hạn của nó. – minrk