यदि आप पर्ल दुभाषिया धागे का उपयोग करने के लिए सीखना चाहते हैं, तो perlthrtut
(threads tutorial) और the threads
pragma manpage में अच्छा प्रलेखन है। यह कुछ सरल लिपियों को लिखने के लिए निश्चित रूप से काफी अच्छा है।पर्ल और तर्क में इथ्रेड (दुभाषिया धागे) के लिए केस का उपयोग या उपयोग करने के लिए उपयोग करें?
हालांकि, मैं क्यों और क्या समझदारी के लिए पर्ल के दुभाषिया धागे का उपयोग करने पर वेब पर थोड़ा मार्गदर्शन मिल गया है। वास्तव में, उनके बारे में ज्यादा बात नहीं है, और यदि लोग उनके बारे में बात करते हैं तो अक्सर लोगों को उनका उपयोग करने से हतोत्साहित करना पड़ता है।
ये सूत्र, उपलब्ध जब perl -V:useithreads
useithreads='define';
और use threads
द्वारा फैलाया है, यह भी ithreads, और कहा जाता है शायद अधिक उचित रूप में वे धागे के रूप में लिनक्स या विंडोज ऑपरेटिंग सिस्टम या में जावा वी एम द्वारा की पेशकश से बहुत अलग हैं तो कि डिफ़ॉल्ट रूप से कुछ भी साझा नहीं किया जाता है और इसके बजाय बहुत सारे डेटा की प्रतिलिपि बनाई जाती है, न केवल थ्रेड स्टैक, इस प्रकार प्रक्रिया आकार में काफी वृद्धि होती है। (प्रभाव देखने के लिए, एक परीक्षण लिपि में कुछ मॉड्यूल लोड करते हैं, तो हर बार चारों ओर कुंजी दबाव के लिए रोक एक पाश में धागे बनाते हैं, और कार्य प्रबंधक या top
में स्मृति वृद्धि को देखते हैं।)
[...] प्रत्येक बार जब आप थ्रेड शुरू करते हैं तो सभी डेटा संरचनाओं को पर नया धागा कॉपी किया जाता है। और जब मैं सब कुछ कहता हूं, मेरा मतलब है सब कुछ। यह उदा। पैकेज स्टैश, वैश्विक चर, दायरे में शब्दावली शामिल हैं। सब कुछ!
- Things you need to know before programming Perl ithreads (Perlmonks 2003)
जब पर्ल ithreads का विषय शोध, तुम लोग उन्हें ("extremely bad idea", "fundamentally flawed", या "never use ithreads for anything") का उपयोग करने से हतोत्साहित देखेंगे।
The Perl thread tutorial highlights that "Perl Threads Are Different", लेकिन यह समझाने के लिए बहुत परेशान नहीं है कि वे अलग कैसे हैं और उपयोगकर्ता के लिए इसका क्या अर्थ है।
वास्तव में क्या ithreads के उपयोगी लेकिन बहुत संक्षिप्त स्पष्टीकरण from the Coro
manpage under the heading WINDOWS PROCESS EMULATION है। उस मॉड्यूल के लेखक (कोरो - perl में एकमात्र असली धागे) पर्ल दुभाषिया धागे का उपयोग करके भी निराश होते हैं।
कहीं मैंने पढ़ा है कि सक्षम थ्रेड के साथ प्रतिलिपि perl परिणामस्वरूप एक धीमी दुभाषिया का परिणाम होगा।
2003 (Things you need to know before programming Perl ithreads) से एक परमोनक्स पृष्ठ है, जिसमें लेखक पूछता है: "अब आप सोच सकते हैं कि पर्ल इथ्रेड्स ने फोर्क() का उपयोग क्यों नहीं किया? क्या इससे ज्यादा समझ नहीं आएगी?" ऐसा लगता है कि forks
प्रज्ञा के लेखक द्वारा लिखा गया है। सुनिश्चित नहीं है कि उस पृष्ठ पर दी गई जानकारी अभी भी 2012 में नए पर्ल के लिए सच है।
यहां कुछ दिशानिर्देश दिए पर्ल में धागे के उपयोग के लिए मैं अपने रीडिंग से आसवित है (शायद ग़लती से तो) कर रहे हैं:
- गैर अवरुद्ध आईओ धागे के बजाय,
HTTP::Async
, याAnyEvent::Socket
, orCoro::Socket
साथ की तरह उपयोग करने पर विचार। - पर्ल दुभाषिया धागे on Windows only, not on UNIX because on UNIX, forks are more efficient both for memory and execution speed का उपयोग करने पर विचार करें।
- प्रोग्राम की शुरुआत में धागे बनाएं, न कि जब मेमोरी कंसम्प्शन पहले से ही उल्लेखनीय है - "ideal way to reduce these costs" in
perlthrtut
देखें। - धागे because it's slow (उस पृष्ठ पर सभी उत्तरों) के बीच संचार को कम करें।
अभी तक मेरा शोध। अब, पर्ल में धागे के इस मुद्दे पर आप और भी प्रकाश के लिए धन्यवाद कर सकते हैं। पर्ल में ithreads के लिए कुछ समझदार उपयोग के मामले क्या हैं? उनका उपयोग करने या उपयोग करने के लिए तर्क क्या है?
धन्यवाद! पर्ल के धागे के लिए यह सबसे विस्तृत उपयोग निर्देश है जिसे मैंने आज तक देखा है। - मेरे प्रश्न में मैंने कहा कि * इथ्रेड का उपयोग करने का * कैसे * कवर किया गया है जबकि * क्यों * और * के लिए क्या कमी है। इसके बारे में और सोचते हुए, * कैसे *, * क्यों *, और * * के लिए * निकटता से संबंधित हैं, और वास्तव में * कैसे * सटीक सटीक नहीं है (मेरे जैसे सामान्य पर्ल उपयोगकर्ताओं के लिए) * का जवाब देने के लिए * और * * के लिए क्या। - यह जवाब एक कदम आगे है। एक बार फिर धन्यवाद। – Lumi
"वे अभी भी पायथन के थ्रेड से बेहतर हैं।" - क्या आप इसे समझा सकते हैं? कृपया, यह बहुत intresting – nordicdyno
अधिकतर कार्यान्वयन में मुख्य रूप से पाइथन जीआईएल के बारे में है (मुख्य रूप से cpython लेकिन दूसरों को कम विस्तार के लिए)। असल में, इसका मतलब है कि पायथन पर ओएस थ्रेड वास्तव में सीपीयू काम को निष्पादित नहीं कर सकते हैं - जो पूरी तरह से उन बिंदुओं को हरा देता है। I/O को थोड़ा अधिक समवर्ती बनाने के लिए आप उन्हें (पायथन थ्रेड) का उपयोग कर सकते हैं, लेकिन ऐसा करने के लिए ईवेंट-उन्मुख API का उपयोग करना आसान है। –