- यह लेख Rust कम्युनिटी में मल्टी-थ्रेडेड executor के उपयोग पर चल रही बहस पर चर्चा करता है, जो एक async runtime है और काम को संतुलित ढंग से बाँटने के लिए work-stealing करता है.
- कुछ Rust उपयोगकर्ता "thread-per-core" नाम की एक वैकल्पिक आर्किटेक्चर की वकालत करते हैं, जिसका दावा है कि यह बेहतर performance देता है और implement करना आसान है.
- "thread-per-core" शब्द भ्रामक हो सकता है. सभी मल्टी-थ्रेडेड executor वास्तव में thread-per-core ही होते हैं: वे हर core के लिए एक OS thread बनाते हैं और उन्हीं threads पर काम schedule करते हैं.
- Thread-per-core तीन विचारों को जोड़ता है: user space में concurrency को संभालना, threads के block होने से बचने के लिए I/O को asynchronous बनाना, और synchronization cost तथा CPU cache के बीच data movement को हटाने के लिए CPU cores के बीच data को partition करना.
- यह बहस मुख्यतः तीसरे बिंदु को लेकर है, और async Rust का उपयोग करके पहली दो आवश्यकताओं को पूरा किया जा सकता है.
- Thread-per-core आर्किटेक्चर में दो optimization किए जा सकते हैं: threads के बीच काम चुराना, और जितना संभव हो उतना कम state साझा करना.
- Work-stealing यह सुनिश्चित करके tail latency को बेहतर बनाता है कि सभी threads के पास हमेशा काम रहे, लेकिन इसे implement करना कठिन है और इससे synchronization cost तथा cache miss बढ़ सकते हैं.
- Share-nothing data को एक ही CPU core से जुड़े तेज cache में बनाए रखकर tail latency को बेहतर बनाता है, लेकिन उन जटिल applications के लिए इसे implement करना कठिन हो सकता है जिन्हें कई partitions में state बदलनी पड़ती है.
- यह लेख सुझाव देता है कि shared state का उपयोग करने वाले systems में work-stealing, load के दौरान CPU utilization को बेहतर बना सकता है.
1 टिप्पणियां
Hacker News राय
Send + Sync + 'staticकी आवश्यकता भी शामिल है, और कुछ लोगों को यह बोझिल लगती है।Sendbound वह requirement है जो executor threads के बीच tasks को स्थानांतरित करने की अनुमति देती है, और यह Rust async system की एक कमी जैसा लगता है।asyncका उपयोग कई Rust programs के लिए premature optimization माना जाता है।Send,Sync, तथा'staticजैसी अतिरिक्त developer constraints भी पैदा होती हैं।