मैं धागे की एक नहीं बल्कि विशाल संख्या एक clojure कार्यक्रम के अंदर बनाया जा रहा है के अंदर एक धागा सो रही है:एक ExecutorService (जावा/Clojure)
(import '(java.util.concurrent Executors))
(def *pool*
(Executors/newCachedThreadPool))
(defn do-something []
; work
Thread/sleep 200
; repeat)
(dotimes [i 10000]
(.submit *pool* do-something))
यह मेरे लिए JVMs के बीच एक समय हो गया है और मैं मूल रूप से यहाँ सोच रहा हूँ अगर निष्पादक द्वारा निष्पादित किए जा रहे फ़ंक्शन के अंदर नींद या उपज का उपयोग करने के खिलाफ कोई तर्क है? अगर मैं सही ढंग से समझता हूं, इस मामले में, मेरे श्रमिकों में से प्रत्येक का अपना धागा होता है और इसलिए कोई साइड इफेक्ट नहीं होना चाहिए।
निर्वाहक एक FixedThreadPool उपयोग कर रहा है:
(Executors/newFixedThreadPool 1000)
हालात और अधिक जटिल हो जाते हैं क्योंकि धागे पूल को वापस नहीं किया जाएगा उनके काम पूरा हो गया है जब तक, अन्य पंक्तिबद्ध कार्यकर्ताओं जिसका अर्थ है यदि पूरा करने के लिए अधिक समय लगेगा धागे सो रहे हैं।
क्या इस उदाहरण में थ्रेडिंग की मेरी समझ सही है?
(नोट: मुझे लगता है मेरी डिजाइन वास्तव में गलत है, लेकिन सिर्फ यकीन है कि मैं सही पेज पर हूँ बनाना चाहते)