मैं प्रक्रिया-से-प्रक्रिया संचार के साथ डबलिंग कर रहा हूं; इसका उद्देश्य कार्यकर्ता प्रक्रियाओं को करना है जो कुछ कंप्यूटेशंस करते हैं और परिणाम को एक नियंत्रण प्रक्रिया में वापस भेज देते हैं। मैंने zeromq.node स्थापित किया और कॉफ़ीस्क्रिप्ट में एक साधारण अनुरोधकर्ता और उत्तरदाता स्थापित किया।ज़ीरोएमक्यू की अपेक्षित प्रदर्शन क्या है?
निवेदक:
# 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 पर अलग टर्मिनल विंडो में उन्हें चलाने के लिए, 8 जीबी, इंटेल डुओ कोर 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) पर्याप्त तेज़ नहीं लगता है। this benchmark के अनुसार, मुझे सैकड़ों हजारों में होना चाहिए - प्रति सेकंड हजारों संदेश नहीं, जो this discussion ("ज़ीरोएमक्यू: 10,000 संदेश प्राप्त करने में लगभग 15 मिलियन सेकंड लगते हैं") द्वारा संक्रमित किया जाता है।
मैंने पायथन 3 में लिखे गए उत्तरदाता का उपयोग करने की भी कोशिश की है और सटीक समान संख्याएं प्राप्त की हैं। और भी, मैंने स्क्रिप्ट की एक वैकल्पिक जोड़ी लिखी, जहां मास्टर प्रक्रिया एक बच्चे की प्रक्रिया पैदा करेगी और stdout/stdin पर इसके साथ संवाद करेगी; मैंने प्रति सेकंड लगभग 750 संदेश प्राप्त किए (जब मैंने संदेश की लंबाई बढ़ा दी तो मुझे बहुत भिन्नता दिखाई नहीं दे रही थी), जो ज़ीरोम प्रयोग के समान गेंदबार्क की तरह है।
क्या इन नंबरों की अपेक्षा की जा सकती है? यहां सीमित कारक क्या है?
सिंक्रोनस आरईक्यू-आरईपी मुख्य सीमा है, प्रदर्शन दर बढ़ाने के लिए अधिक असीमित उदाहरणों के लिए मार्गदर्शिका देखें। –
सुनिश्चित नहीं है कि मैं आपको सही ढंग से समझता हूं, लेकिन इससे कोई फर्क नहीं पड़ता कि मैं कितने उत्तरदाता टर्मिनल खोलता हूं, अनुरोधकर्ता की रिपोर्ट दर हमेशा 900 एमपीएस रेंज में रहती है। अब अनुरोधकर्ता निश्चित रूप से अवरुद्ध नहीं कर रहा है, और यह जितना तेज़ हो सके अनुरोधों को भेजता है - जैसा कि नोडजेस पर जावास्क्रिप्ट के लिए, प्रति मिलीसेकंड से 1 अनुरोध से निश्चित रूप से तेज़ है? – flow
आपके पास 'setInterval ... 1' है, इसका मतलब यह नहीं है कि यह केवल प्रत्येक मिलीसेकंड में एक संदेश भेज रहा है? इससे आपको 1k संदेश/सेकंड की ऊपरी सीमा मिल जाएगी। SetInterval को हटाएं, और अनुरोधकर्ता के लिए 'on' message'l ब्लॉक के अंदर socket.send डालें यदि आप वास्तव में इसकी सीमा देखना चाहते हैं। – minrk