सामग्री पर जाएँ

ब्लॉग

Rust Async ब्लॉकिंग, Rayon और आधुनिक अनुप्रयोग

Async Rust में "ब्लॉकिंग" का क्या मतलब है, जब Rayon CPU-बाउंड कार्य में फिट बैठता है, और क्यों Rust APIs, एज, एजेंटों और CI/CD प्लेटफार्मों के लिए मजबूत रहता है

  • Balinder Walia
  • 3 मिनट में पढ़ें
  • Updated

TenthMatrixइस बात पर कि क्यों Rust आधुनिक अनुप्रयोगों के लिए प्रथम श्रेणी की पसंद बनी हुई है - और जब आप Tokio को CPU-हैवी वर्क के साथ मिलाते हैं तो "ब्लॉकिंग" का वास्तव में क्या मतलब होता है। Alice Ryhl केAsync से प्रेरित: क्या अवरुद्ध कर रहा है?(Rayon अनुभाग)। गहरा गोता:लंबा लेख।

Rust async blocking and Rayon for modern applications

निचली पंक्ति।async Rust में, "ब्लॉकिंग" का अर्थ है रनटाइम वर्कर को.awaitसे इतनी देर तक दूर रखना कि अन्य कार्य समाप्त हो जाएं। महंगे CPU कार्य को Tokio के पूल से हटा दें - अक्सरRayonप्लस oneshot चैनल के साथ - और Async पथ को APIs, एज प्रॉक्सी, एजेंटों और CI/CD नियंत्रण विमानों के लिए उत्तरदायी रखें।

क्यों Rust आधुनिक एप्लिकेशन स्लॉट

जीतता रहता है

टीमें Rust को चुनती हैं, जब उन्हें GC पॉज़ टैक्स के बिना मेमोरी सुरक्षा, लोड के तहत पूर्वानुमानित विलंबता और समवर्तीता की आवश्यकता होती है, जिससे टाइप सिस्टम आपको सही होने में मदद करता है। वह संयोजन हर जगह दिखाई देता है जहां TenthMatrix का निर्माण होता है: उच्च-थ्रूपुट APIs, एज गेटवे, एजेंट रनटाइम और प्रमोशन कंट्रोल प्लेन जो CPU कार्य में वृद्धि आने पर स्थिर नहीं हो सकते।

यह "हर चीज़ के लिए Rust" नहीं है। हमारेPolyglot Benchmarksडैशबोर्ड और सहयोगी पोस्ट -ब्लॉग/लेख- समान HTTP वर्कलोड पर गो, बन, जेवीएम स्टैक और स्क्रिप्टिंग किनारों के साथ Rust की तुलना करें। Rust अक्सर CPU-बाउंड और समवर्ती-भारी पंक्तियों पर आगे बढ़ता है; अन्य रनटाइम वेग या किनारे परिवर्तन पर जीतते हैं। मुद्दा साक्ष्य का है, फिर एडीआर का।

async Rust

में "ब्लॉकिंग" का क्या मतलब है

Async रनटाइम (Tokio और मित्र).awaitबिंदुओं पर कार्यों को स्वैप करते हैं। यदि आपका कार्य CPU के मिलीसेकंड को जला देता है या प्रतीक्षा किए बिनाstd::thread::sleepके साथ सो जाता है, तो कार्यकर्ता उस थ्रेड पर किसी और को शेड्यूल नहीं कर सकता है। स्थानीय स्तर पर आप ध्यान नहीं दे सकते (कुछ कोर बग को छिपाते हैं); उत्पादन में आपके पास श्रमिक खत्म हो जाते हैं और विलंबता पूंछ फट जाती है।

पारिस्थितिकी तंत्र से अंगूठे का नियम: विलंबता-संवेदनशील सेवाओं के लिए प्रतीक्षा के बीच दसियों से सैकड़ों माइक्रोसेकंड के भीतर रहें - और किसी भी लंबे समय तक काम को कहीं और से संबंधित कार्य के रूप में मानें।

जब Rayon मदद करता है (CPU-बाउंड)

  • spawn_blocking- Tokio का ब्लॉकिंग पूल: सिंक IO (फ़ाइल सिस्टम, DB ड्राइवरों को ब्लॉक करना) के लिए बढ़िया; भारी CPU के लिए उप-इष्टतम क्योंकि यह कोर को ओवरसब्सक्राइब कर सकता है।
  • Rayon- समानांतर पुनरावृत्तियों और महंगी गणनाओं के लिए एक छोटा, CPU आकार का थ्रेड पूल।rayon::spawn+tokio::sync::oneshotके साथ ब्रिज करें ताकि एसिंक कार्य रनटाइम थ्रेड को अवरुद्ध किए बिना परिणाम की प्रतीक्षा करे।
  • समर्पित थ्रेड- फॉरएवर-लूप्स (कनेक्शन मैनेजर, लंबे समय तक रहने वाले कर्मचारी) के लिए जिन्हें स्थायी रूप से पूल क्षमता का उपभोग नहीं करना चाहिए।

वह Rayon + oneshot पैटर्न बिल्कुल वही है जो Alice Ryhl

जहां यह TenthMatrix उत्पादों

में दिखाई देता है

अगला पढ़ें

  1. लंबा लेख- चीट शीट, कोड-आकार के पैटर्न और आर्किटेक्चर नोट्स।
  2. polyglot-benchmarks.fictionally.org- लाइव Rust बनाम समकक्ष साक्ष्य।
  3. Alice Ryhl —Async: क्या अवरुद्ध कर रहा है?

TenthMatrixद्वारा प्रकाशित।