2012-07-03 8 views
7

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

मैं अक्का में थ्रेड पूल के साथ किए गए कुछ जैसा सवाल पूछ रहा हूं और मैं सोच रहा हूं कि मैं क्लोजर के साथ एक ही चीज़ को पूरा कर सकता हूं।

+0

मैं आईओ ऑपरेशंस – Ankur

उत्तर

12

1,4 अप करने के लिए Clojure संस्करणों के लिए:

आप को बदल नहीं सकते में निर्मित एजेंट भेजने के लिए और बाहर भेज धागा पूल। वे Agent.java में हार्ड-कोड किए गए हैं।

प्रेषण पूल (गणना के लिए उपयोग किया गया) निश्चित आकार = 2 + रनटाइम .getRuntime() उपलब्ध प्रोसेसर() है।

प्रेषण पूल (वायदा के लिए भी उपयोग किया जाता है) एक कैश्ड थ्रेड पूल है और बिना बाध्य हो जाएगा। यह पृष्ठभूमि कार्यों के मनमाने ढंग से संख्या I/O के लिए प्रतीक्षा करने की अनुमति देता है। कैश किए गए थ्रेड का पुन: उपयोग और त्याग दिया जाएगा यदि वे एक मिनट के लिए निष्क्रिय हैं।

यदि आप अपने थ्रेड पूल पर काम प्रबंधित करना चाहते हैं, तो आपको java.util.concurrent में डुबकी डालना होगा या क्लोजर रैपर lib का उपयोग करना होगा।

Clojure 1.5 (आगामी) के लिए:

आप अपनी खुद की ExecutorService का उपयोग कर (भेज-के माध्यम से निष्पादक एक च) की आपूर्ति कर सकते हैं, तो डिफ़ॉल्ट threadpools अब और कड़ी मेहनत से तार नहीं कर रहे हैं। विवरण के लिए Agent.java in Clojure 1.5+ देखें।

+0

1.5+ में फ्यूचर्स के लिए कस्टम थ्रेडपूल की वही परिभाषा करने का कोई तरीका? –

+0

फ्यूचर्स के लिए कस्टम कस्टम थ्रेडपूल - नहीं। –

1

अमित राठौर (रूना इंक) ने थ्रेड पूल के प्रबंधन के लिए एक पुस्तकालय (मेडुसा कहा जाता है) प्रकाशित किया है। यह आप जो खोज रहे हैं उसके लिए एक काफी करीबी मैच की तरह दिखता है।

http://s-expressions.com/2010/06/08/medusa-0-1-a-supervised-thread-pool-for-clojure-futures-2/

+0

के लिए थ्रेड पूल के प्रबंधन के बजाए ऐसी समस्या को हल करने के लिए एसिंक आईओ का उपयोग करने का सुझाव दूंगा जो एजेंटों के साथ एकीकृत है, या यह अलग है? दूसरे शब्दों में - क्या आप अंतर्निहित थ्रेड पूल को प्रतिस्थापित करने के लिए इसका उपयोग कर सकते हैं? या एक अलग थ्रेड पूल के साथ एजेंट बनाने के लिए कोई रास्ता है? मैं कुछ भी नहीं देख सकता जो इसे समझाता है ... जब मैं इस बारे में चिंतित था तो मैंने यह क्यू पूछा - http://stackoverflow.com/questions/10969708/parallel-doseq-for-clojure - और मुझे कोई नहीं लगता जवाब ने सिस्टम कार्यक्षमता को प्रतिस्थापित करने के लिए एक निर्बाध तरीका दिया। –

+0

medusa एसिंक्रोनस कार्यों को चलाने के लिए एक वैकल्पिक पुस्तकालय है, यह निर्मित एजेंटों का एक विकल्प है। –

2

क्लोजर लाइब्रेरी Claypoole बिल्कुल इस के लिए डिज़ाइन किया गया है। यह आपको थ्रेडपूल को परिभाषित करने और वायदा, pmaps, आदि के लिए उपयोग (और पुन: उपयोग) करने देता है।

+1

अगर मैं गलत हूं तो मुझे सही करें, लेकिन मुझे नहीं लगता कि क्लेपूल आपको एजेंट थ्रेड पूल पर नियंत्रण देता है, केवल थ्रेड पूल _it's_ कस्टम 'भविष्य', 'pmap' और कार्यान्वयन पर उपयोग किए जाने वाले थ्रेड पूल का उपयोग करता है। – metasoarous

+0

ओह, हाँ, आप सही हैं। –