मैं रूबी की समानांतर/एसिंक्रोनस प्रोसेसिंग क्षमताओं में देख रहा था और कई लेख और ब्लॉग पोस्ट पढ़ता था। मैं EventMachine, रेशे, Revactor, REIA, आदि, आदि के माध्यम से देखा दुर्भाग्य से, मैं इस बहुत ही सरल उपयोग के मामले के लिए एक सरल, प्रभावी (और गैर आईओ-अवरुद्ध) समाधान खोजने के लिए सक्षम नहीं था:रूबी समवर्ती/एसिंक्रोनस प्रोसेसिंग (सरल उपयोग के मामले के साथ)
File.open('somelogfile.txt') do |file|
while line = file.gets # (R) Read from IO
line = process_line(line) # (P) Process the line
write_to_db(line) # (W) Write the output to some IO (DB or file)
end
end
आप देख सकते हैं मेरी छोटी स्क्रिप्ट तीन आपरेशनों पढ़ें (आर), प्रक्रिया (पी) & लिखने (डब्ल्यू) प्रदर्शन कर रहा है है,। के मान लेते हैं - सादगी के लिए - कि प्रत्येक आपरेशन समय की वास्तव में 1 यूनिट लेता है (उदाहरण के लिए 10ms), वर्तमान कोड इसलिए कुछ इस तरह (5 लाइनों) करना होगा:
Time: 123456789(15 units in total)
Operations: RPWRPWRPWRPWRPW
लेकिन, मैं इसे कुछ करना चाहते हैं इस तरह:
Time: 1234567 (7 units in total)
Operations: RRRRR
PPPPP
WWWWW
जाहिर है, मैं तीन प्रक्रियाओं (पाठक, प्रोसेसर & लेखक) चला सकते हैं और पाठक से लाइनों को पढ़ने के पारित प्रोसेसर कतार में और फिर लेखक कतार में संसाधित लाइनों पारित (सभी जैसे RabbitMQ के माध्यम से समन्वित) । लेकिन, उपयोग-मामला इतना आसान है, यह सही नहीं लगता है।
यह कैसे किया जा सकता है इस पर कोई संकेत (रुबी से एरलांग, क्लोजर या स्कैला से स्विच किए बिना)?
क्या लिखना उसी क्रम में कहा जाना चाहिए जैसा उन्हें पढ़ा गया था? –
नहीं, यह पूरी बात है कि वे पूरी तरह से असीमित हो सकते हैं। – Dim