- यह लेख बड़े पैमाने की concurrency वाले user-space software में Rust के उपयोग की चुनौतियों पर चर्चा करता है.
- Rust का asynchronous model आधुनिक computing की दो मुख्य अवधारणाओं, concurrency और parallelism, को संभालने के लिए डिज़ाइन किया गया है.
- Parallelism में कई CPU पर एक साथ code चलाना शामिल है.
- Concurrency में समस्या को अलग-अलग करना, उसे स्वतंत्र हिस्सों में बाँटना, और उन्हें क्रम की परवाह किए बिना या आंशिक क्रम में चलाना शामिल है.
- यह लेख महंगे inter-process communication के कारण concurrency के लिए कई process उपयोग करने की सीमाओं पर ज़ोर देता है.
- वही memory साझा करने वाले process, यानी thread, को एक विकल्प के रूप में प्रस्तुत किया जाता है, लेकिन वे race condition और deadlock जैसी जटिल समस्याएँ पैदा कर सकते हैं.
- Tony Hoare का 1978 का पेपर "Communicating Sequential Processes" यह प्रस्तावित करता है कि thread एक-दूसरे को message भेजने के लिए queue या channel का उपयोग करें, जिससे process जैसी isolation और आसान debugging जैसे कई फायदे मिलते हैं.
- Rust की standard library में
std::sync::mpsc::sync_channel के अंतर्गत channel शामिल हैं.
- लेकिन web server जैसे, जो दसियों हज़ार उपयोगकर्ताओं से जुड़े होते हैं, उच्च स्तर की concurrency की आवश्यकता वाले मामलों में thread पर्याप्त नहीं हो सकते.
- ऐसे परिदृश्यों के लिए Rust "async/await" model का उपयोग करता है, जिसमें function को asynchronous चिह्नित करने पर वह future या promise लौटाता है और परिणाम बनने तक प्रतीक्षा की जा सकती है.
- इसके फायदों के बावजूद, asynchronous Rust में ऐसी चुनौतियाँ हैं जैसे compiler को यह विश्वास दिलाने की आवश्यकता कि सब कुछ ठीक रहेगा. यह raw thread की तुलना में कठिन हो सकता है.
- "atomic reference count" या Arc का उपयोग एक समाधान के रूप में सुझाया जाता है, लेकिन यह garbage collector की समस्याओं जैसी दिक्कतें पैदा कर सकता है, इसलिए यह कोई सर्वव्यापी समाधान नहीं है.
- लेख अंत में यह सुझाव देता है कि अन्य क्षेत्रों में Rust की ताकत के बावजूद, बड़े पैमाने की concurrency वाले user-space software के लिए यह सबसे उपयुक्त टूल नहीं हो सकता.
1 टिप्पणियां
Hacker News राय
async-scopedजैसे unsafe crate का उपयोग करके उन ज़्यादातर bugs को पकड़ लेना, जो C++ में लिखे जाने पर होते, एक उचित compromise है।