2012-07-06 16 views
5

कार्य चोरी उदाहरण के लिए जावा प्लेटफॉर्म पर फोर्क/जॉइन फ्रेमवर्क में उपलब्ध है। (How is the fork/join framework better than a thread pool? देखें) - OmniThreadLibrary के साथ कुछ ऐसा संभव है?क्या OmnithreadLibrary समर्थन "काम चोरी" करता है?


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

+0

ओटलपरेल यूनिट ने इसका उल्लेख किया है और यह ब्लॉग पोस्ट भी देखे हैं: http://www.thedelphigeek.com/2011/01/parallel-for-implementation-1-overview.html – Shambhala

+0

शंबल्ला, यह आलेख ForEach का वर्णन करता है अमूर्त, फोर्क नहीं/शामिल हों। – gabr

+1

मुझे बहुत खेद है, मुझे प्रश्न को धीमा और बेहतर समझना चाहिए था। – Shambhala

उत्तर

6

मैं अगर मैं इस तकनीक "काम चोरी" कहेंगे लेकिन वास्तव में OmniThreadLibrary जब क्रियान्वित कांटा/जुड़ें अमूर्त अपने सभी कोर व्यस्त रहता है पता नहीं है।

जब आप फोर्क/जॉइन का उपयोग करते हैं, तो आप Compute पर कॉल करके गणना पूल में एक कार्य भेजते हैं। जब आप subcomputation या Await का परिणाम प्राप्त करने के लिए Value पर कॉल करने के लिए उप-संपीड़न पर प्रतीक्षा करने के लिए कॉल करते हैं और सबकंप्यूशन ने अभी तक अपना काम पूरा नहीं किया है, Value/Await गणना पूल से एक और कार्य करेगा और इसे निष्पादित करेगा। जब यह नया कार्य समाप्त हो जाता है, तो यह फिर से जांच करेगा कि सबकंप्यूशन ने अपना काम पूरा कर लिया है और यदि नहीं, तो यह अगले उप-कार्य को संसाधित करेगा।

इस तंत्र को आगे OmniThreadLibrary wiki पर वर्णित किया गया है।


संपादित

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

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