2012-07-08 27 views
6

जैसा कि मैं समझता हूं, रुबी 1.9 ओएस थ्रेड्स का उपयोग करता है लेकिन केवल एक थ्रेड वास्तव में एक साथ चल रहा है (हालांकि एक धागा आईओ अवरुद्ध कर रहा है जबकि एक और धागा प्रसंस्करण कर रहा है)। मैंने जो थ्रेडिंग उदाहरण देखा है, वह एक नया धागा लॉन्च करने के लिए बस Thread.new का उपयोग करें। जावा पृष्ठभूमि से आ रहा है, मैं आमतौर पर थ्रेड पूल का उपयोग करता हूं क्योंकि वे "हेवीवेट" के बाद से कई नए धागे लॉन्च नहीं करते हैं।रूबी 1.9 थ्रेड पूल

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

उत्तर

6

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

यदि आपको धागे का उपयोग करने की आवश्यकता है, तो मैं आपको JRuby प्लेटफ़ॉर्म पर https://github.com/meh/ruby-threadpool का उपयोग करने की सलाह दूंगा, जो कि JVM पर चलने वाला एक रूबी दुभाषिया है। यह आपकी गली को सही होना चाहिए, और क्योंकि यह वर्चुअल मशीन पर चल रहा है, यह सच थ्रेडिंग होगा।

+0

धन्यवाद। मेरे पास वास्तव में उपयोग का मामला नहीं है, लेकिन जैसा कि मैं पिकैक्स बुक पढ़ रहा था, यह कुछ ऐसा था जो मुझे अनिश्चित था, लेकिन आपने स्पष्ट किया है। –

+12

मुझे समझ में नहीं आता है कि लोगों का उल्लेख है कि रूबी रूबी में बेकार हैं क्योंकि वे एक साथ नहीं चल रहे हैं। वे वास्तव में सीपीयू बाध्य कार्यों के लिए बेकार हैं लेकिन वे किसी भी अवरुद्ध आईओ के लिए बहुत उपयोगी हो सकते हैं जो आप समानांतर में करना चाहते हैं। उदाहरण के लिए। समवर्ती HTTP अनुरोध। – Kamchatka

+0

टिप्पणी के लिए धन्यवाद। मुझे और स्पष्टीकरण देने की जरूरत है कि रूबी में धागे बेकार नहीं हैं, सिर्फ लोगों को जीआईएल की सीमा के बारे में पता होना चाहिए क्योंकि थ्रेड ओवरहेड के बिना नहीं हैं। गैर-अवरुद्ध आईओ के लिए, एक घटना सी आधारित एसिंक्रोनस कॉल अधिक उपयुक्त हो सकती है। अधिक जानकारी के लिए http://blog.gregweber.info/posts/2011-06-16-high-performance-rb-part3 देखें। – Wulfram

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