यहां दो मुद्दे हैं, समानांतर संग्रह को संग्रहीत करने के लिए आवश्यक स्मृति की मात्रा और समानांतर संग्रह को पार करने के लिए आवश्यक स्मृति की मात्रा।
अंतर इन दो पंक्तियों के बीच देखा जा सकता है:
(1 to 1000000).map(_+3).toList
(1 to 1000000).par.map(_+3).toList
आरईपीएल भंडार का मूल्यांकन भाव, याद है। मेरे आरईपीएल पर, मैं स्मृति से बाहर होने से पहले इन दोनों 7 बार निष्पादित कर सकता हूं। समांतर निष्पादन के माध्यम से गुजरने से अस्थायी रूप से अतिरिक्त मेमोरी का उपयोग होता है, लेकिन एक बार टोलिस्ट निष्पादित हो जाने पर, अतिरिक्त उपयोग कचरा एकत्र होता है।
(1 to 100000).par.map(_+3)
, जो एक सामान्य वेक्टर की तुलना में अधिक स्थान में समा जाता है (इस मामले में एक ParVector में) एक ParSeq [इंट] वापस आती है।इससे पहले कि मैं स्मृति से बाहर चलाने के
(1 to 100000).map(_+3)
11 बार: यह एक मैं, इससे पहले कि मैं स्मृति से बाहर चलाने के लिए 4 बार निष्पादित कर सकते हैं, जबकि मैं इस पर अमल कर सकते हैं। तो समानांतर संग्रह, यदि आप उन्हें चारों ओर रखते हैं तो अधिक जगह ले लेंगे।
एक कामकाज के रूप में, आप उन्हें वापस करने से पहले List
जैसे सरल संग्रह में बदल सकते हैं।
क्यों इतना स्थान समानांतर संग्रह द्वारा लिया जाता है के लिए और के रूप में क्यों यह संदर्भ रखता है बहुत सी बातें, मैं नहीं जानता कि करने के लिए है, लेकिन मुझे लगता है views
[*], और अगर आपको लगता है कि यह एक समस्या है, raise an issue for it है।
[*] बिना किसी वास्तविक सबूत के।
स्रोत
2012-06-01 12:13:18
क्या आप यहां थोड़ा और विवरण जोड़ सकते हैं? आप अपने जेवीएम, किसी अन्य स्विच को कितनी मेमोरी शुरू करते हैं? क्या आप इसे आरपीएल में चलाते हैं या आप इसे संकलित करते हैं? यदि आप इसे आरईपीएल से चलाते हैं तो आपने पहले कितने निर्देश निष्पादित किए हैं? मैंने बस अपने आरईपीएल में कोशिश की और मैंने इसे ओओएम के बिना 10 बार निष्पादित किया। – drexin
मेरे REPEL में बस ठीक काम करता है। – Jan
@ जेन मेरे लिए यह आरईपीएल में भी ठीक काम करता है, लेकिन केवल पहली बार ... – Christian