2015-04-22 8 views
18

जहां तक ​​मैं अब libgreen is not a part of Rust standard library समझता हूं। इसके अलावा मुझे एक अलग libgreen पैकेज नहीं मिल रहा है। कुछ विकल्प हैं - coroutine, जो अब के लिए वास्तविक हरे धागे प्रदान नहीं करता है, और green-rs, जो टूटा हुआ है। क्या मैं सही समझता हूं कि अब जंग में कोई हल्का गो-जैसी प्रक्रिया नहीं है?libgreen के साथ क्या हुआ?

+3

कुछ अन्य संबंधित चीजें: [थ्रेडपूल] (https://crates.io/crates/threadpool), [mio] (https://github.com/carllerche/mio)। –

+2

सेकेंडिंग क्रिस की टिप्पणी: कोई भी आकार-फिट नहीं है-जब हरी-थ्रेडिंग की बात आती है, तो आपको अपना व्यापार-बंद चुनना होगा। –

उत्तर

14

आप सही वहाँ std में कोई हल्के टास्किंग पुस्तकालय (या मुख्य वितरण के बाकी) है कि कर रहे हैं, कि green संकलन नहीं है और है कि coroutine अभी तक पूरी तरह सूत्रण पहलू को संभालने के लिए प्रतीत नहीं होता। मुझे इस जगह में किसी अन्य पुस्तकालय की जानकारी नहीं है।

क्या हुआ इसके लिए: उस समस्या से जुड़े आरएफसी — RFC 230 — जानकारी का कैननिक स्रोत है। सारांश यह है कि यह पाया गया कि जिस विधि से हरे रंग के थ्रेडिंग/आईओ को संभाला गया था (std दोनों मॉडलों में सार करने की कोशिश की, जिससे उन्हें अंतःक्रियात्मक रूप से इस्तेमाल किया जा सके) डाउनसाइड्स के लायक नहीं थे। अब, std का उद्देश्य केवल उपयोगी समर्थन की न्यूनतम आधार प्रदान करना है: आईओ/थ्रेडिंग के लिए, इसका मतलब ऑपरेटिंग सिस्टम कार्यक्षमता के लिए "पतला", सुरक्षित रैपर है। टिप्पणी में

Steve Klabnik's response:

9

इस https://aturon.github.io/blog/2016/08/11/futures/ और भी पढ़ें

शुरुआत में, जंग केवल हरी सूत्र था। आखिरकार, यह का निर्णय लिया गया कि सिस्टम थ्रेड के बिना सिस्टम सिस्टम ... अजीब है। तो हमें उन्हें जोड़ने की जरूरत है। पसंद क्यों नहीं जोड़ें? चूंकि इंटरफेस समान हो सकता है, क्यों उन पर सार नहीं है, और आप केवल चुन सकते हैं कि आप कौन सा चाहते थे?

उसी समय, डिफ़ॉल्ट रूप से हरे धागे के साथ समस्याएं समस्याएं बन रही थीं। विभाजित ढेर धीमी सी इंटरऑप का कारण बनता है। उन्हें प्रबंधित करने के लिए आपको रनटाइम की आवश्यकता है, इसके अलावा, कुल अमूर्त एक अस्वीकार्य लागत पैदा कर रहा था। हरे धागे बहुत हरे रंग के नहीं थे। प्लस, वास्तव में किसी दिन रिलीज होने की आवश्यकता के साथ, निर्णय ट्रेडऑफ के संबंध में किए जाने की आवश्यकता है। और चूंकि जंग को माना जाता है, एक सिस्टम भाषा हो, जिसमें 1: 1 धागे होते हैं और मूल रूप से कोई रनटाइम एन: एम थ्रेड और रनटाइम से अधिक समझ में आता है। । तो libgreen हटा दिया गया था, इंटरफ़ेस 1: 1 थ्रेड केंद्रित होने के लिए फिर से किया गया था।


'रिलीज someday looming' इसका एक बड़ा हिस्सा है। हम जंग के साथ वास्तव में स्थिर होना चाहते हैं, और वास्तव में पर एक चीज करने के लिए सभी चीजों के साथ, हम एक इंटरफेस को क्रिस्टलाइज नहीं करना चाहते थे, हम खुश नहीं थे। बिल्ली, हमने कई पुस्तकालयों को खींच लिया जो कम से कम समान कारणों से रैंड की तरह महत्वपूर्ण हैं। इंजीनियरिंग ट्रेडऑफ के बारे में है, और हमने minimalism चुनने का फैसला किया। क्योंकि हम विंडोज की जरूरत है और इसके अलावा हम पुस्तकालय को बदलने के लिए एक महंगी में लॉक हो नहीं करना चाहती

Mio, हमारे लिए एक गैर स्टार्टर के रूप में async जंग के लिए आई/ओ चौखटे अन्य के सबसे कर रहे हैं, जो अनाथ हो सकता है।

विशेष रूप से सामान्य मामले में, यहां पूरी तरह से समझा जाता है। विशिष्ट मामले में, एमओओ के पास या तो विंडोज़ समर्थन होगा, या एमआईओ के विंडोज-विशिष्ट संस्करण को जारी किया जा रहा है, उच्च-स्तरीय पैकेज सभी प्लेटफार्मों के लिए सुविधाएं प्रदान करता है। और में इस मामले में, यह वर्तमान में जंग का उत्पादन कर रहा है, जो कि उत्पादन में भारी जंग का उपयोग कर रहा है, इसलिए इसे जल्द ही पर जाने की संभावना नहीं है। लेकिन, जब तक आप सक्रिय रूप से शामिल नहीं होते हैं, तो चीजों को जानना मुश्किल है, जो स्वयं ही एक मुद्दा है।

libgreen को हटाने में हमें सहज कारणों में से एक यह है कि आप विभिन्न प्रकार के आईओ करने के लिए अपनी खुद की पुस्तकालय लिख सकते हैं। 1.0 मजबूत कोर है कि हम हमेशा के लिए स्थिरीकरण के बारे में अच्छा महसूस करते हैं, अंतिम बिट नहीं। https://github.com/carllerche/mio जैसी लाइब्रेरी एसिंक आईओ जैसी चीजों को संभालने के विभिन्न तरीकों का परीक्षण कर सकती हैं, और, जब वे परिपक्व हैं, तो हम की आवश्यकता होने पर उन्हें हमेशा मानक लाइब्रेरी में वापस खींच सकते हैं। लेकिन इस बीच में, यह सिर्फ एक पंक्ति अपने Cargo.toml को करने के लिए उन में जोड़ने

reddit से

और ऐसे पाठ:।

दुर्भाग्य से वे greenlet समर्थन डिब्बाबंदी क्योंकि उनकी थे समाप्त हो गया कर्नेल धागे से धीमा जो बदले में दिखाता है कि किसी को यह समझ में नहीं आया कि स्टैकलेस कोरआउट प्रभावी ढंग से उत्पन्न करने के लिए भाषा कंपाइलर कैसे प्राप्त करें (आश्चर्यजनक नहीं है, इंजीनियरों की संख्या इस दुनिया में कई तरह से वायर्ड नहीं है, लेकिन देखें अधिक जानकारी के लिए )। और उन्होंने async i/o को डिब्बाबंद किया क्योंकि libuv "धीमा" है (जो केवल इसलिए है क्योंकि यह केवल एकल धागा है, साथ ही एक malloc + free per async ऑपरेशन को बाध्य करता है क्योंकि बफर को पूरा होने तक तक चलना चाहिए, साथ ही यह लागू करता है तुल्यकालिक से अधिक जुर्माना आई/ओ http://blog.kazuhooku.com/2014/09/the-reasons-why-i-stopped-using-libuv.html), जो एक वास्तविक शर्म की बात है था देखते हैं - वे करने का अवसर ले लिया है चाहिए कुछ बेहतर (संकेत के साथ libuv बदल देते हैं: ASIO + AFIO, और हाँ मैं जानता हूँ कि वे दोनों सी हैं ++, लेकिन जंग की तुलना में बहुत बेहतर सी ++ इंटरऑप के साथ कर सकती है, वर्तमान में वर्तमान में कोई भी नहीं है) कैनिंग के बजाय हमेशा-एसिंक-सब कुछ जो कि एक अद्भुत कदम हो सकता है सी ++ से अधिकांश टी के साथ वह Erlang के के नुकसान के बिना Erlang के लाभ।

+0

इसके अलावा "* कारणों में से एक जिसे हम लेबग्रीन को हटाने में सहज थे, यह है कि आप विभिन्न प्रकार के आईओ * (एक ही लिंक) करने के लिए अपनी खुद की पुस्तकालय लिख सकते हैं। सी ++ की तरह, (हरा) थ्रेडिंग पहले लाइब्रेरी के रूप में लागू किया जा सकता है। – ArtemGr

+3

मैंने उस पोस्ट पर कुछ टिप्पणियां छोड़ीं, मुझे लगता है कि यह एक अधूरा परिप्रेक्ष्य है। –

+0

स्पष्टीकरण – rofrol

0

नए आने वालों के लिए, अब may है, जो एक क्रेट है जो गोरोटिन के समान हरे धागे को लागू करता है।

संबंधित मुद्दे