बाईं ओर की तस्वीर है जो समानांतर में चल रही है।
चित्रण का मुद्दा यह है कि Future.apply
विधि क्या निष्पादन को शुरू करता है, इसलिए यदि ऐसा नहीं होता जब तक पहले भविष्य के परिणाम flatMap
एड है (दाईं ओर चित्र में के रूप में), तो आप डॉन 'है समानांतर निष्पादन प्राप्त नहीं करते हैं।
(ध्यान दें कि द्वारा "की शुरूआत", मेरा मतलब प्रासंगिक ExecutionContext
काम के बारे में बताया जाता है। कैसे यह parallelizes एक अलग प्रश्न है और इसकी थ्रेड पूल के आकार जैसी चीजों पर निर्भर हो सकता है।)
बाईं के लिए
समतुल्य कोड:
Future { ... } // execution kicked off
.flatMap { numsum =>
Future { ... } // execution kicked off (Note that this does not happen until
// the first future's result (`numsum`) is available.)
.map { string =>
(numsum, string)
}
}
स्रोत
2016-03-07 16:45:32
बेशक, आंकड़ा बुलाया जाना चाहिए "Flatma:
और अधिकार के लिए पिंग एक साथ अनुक्रमिक रूप से बनाम ", दिया गया है कि बाएं एक समवर्ती है .... – mdm
लेकिन 'समवर्ती' का मतलब है कि एक ही थ्रेड का उपयोग कर रहा है, नहीं? –
जरूरी नहीं है, जहां तक मैं इसे समझता हूं। http://stackoverflow.com/questions/1897993/difference-between-concurrent-programming-and-parallel-programming या https://blogs.oracle.com/yuanlin/entry/concurrency_vs_parallelism_concurrent_programming; क्रमिक होगा जब निष्पादन के बीच कोई ओवरलैप नहीं होगा। – mdm