मैं अगर मैं इस तकनीक "काम चोरी" कहेंगे लेकिन वास्तव में OmniThreadLibrary जब क्रियान्वित कांटा/जुड़ें अमूर्त अपने सभी कोर व्यस्त रहता है पता नहीं है।
जब आप फोर्क/जॉइन का उपयोग करते हैं, तो आप Compute
पर कॉल करके गणना पूल में एक कार्य भेजते हैं। जब आप subcomputation या Await
का परिणाम प्राप्त करने के लिए Value
पर कॉल करने के लिए उप-संपीड़न पर प्रतीक्षा करने के लिए कॉल करते हैं और सबकंप्यूशन ने अभी तक अपना काम पूरा नहीं किया है, Value
/Await
गणना पूल से एक और कार्य करेगा और इसे निष्पादित करेगा। जब यह नया कार्य समाप्त हो जाता है, तो यह फिर से जांच करेगा कि सबकंप्यूशन ने अपना काम पूरा कर लिया है और यदि नहीं, तो यह अगले उप-कार्य को संसाधित करेगा।
इस तंत्र को आगे OmniThreadLibrary wiki पर वर्णित किया गया है।
संपादित
मुझे नहीं लगता कि कांटा/दृष्टिकोण "काम चोरी" बुलाया जाना चाहिए में शामिल हों। OmniThreadLibrary कार्यान्वयन में, कार्य आइटम को धागे को तब तक असाइन नहीं किया जाता जब तक कि थ्रेड इसे निष्पादित नहीं करता। और एक बार थ्रेड इसे निष्पादित करना शुरू कर देता है, कोई भी इसे चोरी नहीं कर सकता क्योंकि इसमें कोई उद्देश्य नहीं होगा।
ओटलपरेल यूनिट ने इसका उल्लेख किया है और यह ब्लॉग पोस्ट भी देखे हैं: http://www.thedelphigeek.com/2011/01/parallel-for-implementation-1-overview.html – Shambhala
शंबल्ला, यह आलेख ForEach का वर्णन करता है अमूर्त, फोर्क नहीं/शामिल हों। – gabr
मुझे बहुत खेद है, मुझे प्रश्न को धीमा और बेहतर समझना चाहिए था। – Shambhala