2012-04-13 29 views
9

के लिए एक क्यूइंग सिस्टम मैं एक पर्ल प्रोजेक्ट पर काम कर रहा हूं जिसके लिए एक मशीन (यूनिक्स) पर कई प्रक्रियाओं के बीच कार्यों को वितरित करने के लिए फीफो संदेश कतार की आवश्यकता है। कतार का आकार 1 एम नौकरियों तक बढ़ सकता है।पर्ल

मैंने IPC::DirQueue की कोशिश की है, लेकिन यह 50k या उससे अधिक नौकरियों के साथ बहुत धीमी हो जाती है। इस मॉड्यूल के अच्छे विकल्प क्या हैं जिनका उपयोग पर्ल में किया जा सकता है?

उत्तर

9

मुझे पर्ल और अन्य भाषाओं दोनों के साथ इस प्रकार की समस्या के लिए ज़ीरोएमक्यू का उपयोग करने में बहुत अच्छी सफलता मिली है।

मेरे अनुभव में, ZeroMQ मॉड्यूल वर्तमान में पर्ल के लिए सबसे विश्वसनीय बाध्यकारी प्रतीत होता है।

+0

ज़ीरोएमक्यू बहुत दिलचस्प लग रहा है, मैं इसे आज़माउंगा। –

4

मैंने आपके द्वारा सूचीबद्ध शर्तों के तहत इसे आजमाया नहीं है, लेकिन Thread::Queue मेरे लिए उपयोगी साबित हुआ है। forks के साथ संयुक्त, इसका उपयोग प्रक्रियाओं के साथ संवाद करने के लिए किया जा सकता है, जब तक कि उन प्रक्रियाओं को कतार निर्माता द्वारा उत्पन्न किया गया हो।

use forks; # If you want to use processes instead of threads. 
use Thread::Queue qw(); 

एक कार्यकर्ता मॉडल आमतौर पर आदर्श होता है।

my $q = Thread::Queue->new(); 

my @workers; 
for (1..$NUM_WORKERS) { 
    push @workers, async { 
     while (my $item = $q->dequeue()) { 
     ... 
     } 
    }; 
} 

# ... Enqueue requests [ $q->enqueue($request); ] ... 

# Signal termination 
$q->enqueue(undef) for [email protected]; 

# Collect workers. 
$_->join() for @workers;