2010-06-17 13 views
10

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

threads = [] 

threads << Thread.new {Do something} 
threads << Thread.new {Do something} 

threads.each {|thread| thread.join} 

मैं फाइबर के साथ कुछ इस तरह कैसे करना है नहीं देख सकता। मुझे लगता है कि yield और resume है जो फाइबर के बीच शुरू करने और रोकने का एक गुच्छा जैसा लगता है। क्या फाइबर के साथ सही सहमति करने का कोई तरीका है?

+0

मुझे लगता है कि आपका मतलब सच समांतरता है (जैसा कि नीचे twopoint718 द्वारा उल्लेख किया गया है)। फाइबर का उपयोग समवर्ती के लिए किया जा सकता है, इसलिए धागे भी हो सकते हैं। लेकिन वे समानांतर में नहीं चलते हैं। –

उत्तर

16

नहीं, आप Fiber एस के साथ समवर्ती नहीं कर सकते हैं। Fiber एस बस एक समवर्ती निर्माण नहीं हैं, वे Exception एस जैसे नियंत्रण-प्रवाह निर्माण हैं। Fiber एस: कभी भी समानांतर में नहीं चलते हैं, वे सहकारी हैं और वे निर्धारक हैं। Fiber एस कोरआउट हैं। (वास्तव में, मुझे कभी समझ में नहीं आया कि उन्हें Coroutine एस क्यों नहीं कहा जाता है।)

रूबी में एकमात्र समेकन निर्माण Thread है।

+0

वास्तव में? ओह ठीक है, यह बहुत बुरा है। इसका मतलब है कि इस आलेख का शीर्षक तब भ्रामक था: http: //www.infoq।कॉम/न्यूज/2007/08/रूबी -1-9-फाइबर –

+4

मैं इस धारणा के तहत था कि सह-दिनचर्या समरूपता का एक रूप है, और ओपी वास्तव में पूछने का मतलब है कि आप रूबी फाइबर के साथ _parallelism_ कर सकते हैं (जो आप नहीं चाहिए)। –

+4

'फाइबर' समवर्ती संरचनाएं हैं। – user454322

2

यदि आप सच सहमति चाहते हैं तो आप जर्बी के साथ धागे का उपयोग करना चाहेंगे, मुझे विश्वास है।

12

समरूपता और समांतरता के बीच एक शब्दावली समस्या प्रतीत होती है।

मैं नहीं जानता कि वास्तव में अलग-अलग फाइबर को वास्तव में कैसे चलाया जाए।

मुझे लगता है कि आप वास्तव में, समानांतरवाद बारे में बात नहीं संगामिति के बारे में:

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

उद्धरण: Concurrency vs Parallelism - What is the difference?

भी अच्छी तरह से यहाँ सचित्र:

रेशे रूबी में हल्के वजन सहकारी संगामिति लागू करने के लिए पुरातन हैं: http://concur.rspace.googlecode.com/hg/talk/concur.html#title-slide

तो सवाल का जवाब देने।

http://www.ruby-doc.org/core-2.1.1/Fiber.html

कौन सा मतलब यह नहीं है यह समानांतर में चला सकते हैं।

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