मान लीजिए मैं इस कोड है:समानांतर flatMap हमेशा अनुक्रमिक
Collections.singletonList(10)
.parallelStream() // .stream() - nothing changes
.flatMap(x -> Stream.iterate(0, i -> i + 1)
.limit(x)
.parallel()
.peek(m -> {
System.out.println(Thread.currentThread().getName());
}))
.collect(Collectors.toSet());
आउटपुट एक ही धागे नाम है, इसलिए वहाँ parallel
यहां से कोई लाभ नहीं है - क्या मैं उस से मतलब किसी एकल थ्रेड कि करता है कि वहाँ है पूरा काम।
flatMap
अंदर इस कोड है:
result.sequential().forEach(downstream);
मैं sequential
संपत्ति के लिए मजबूर कर समझते हैं "बाहरी" धारा समानांतर होगा (वे सकता है शायद ब्लॉक), "बाहरी" "flatMap के लिए इंतजार करना होगा "खत्म करने के लिए और दूसरी तरफ (जैसा कि एक ही आम पूल का उपयोग किया जाता है) लेकिन क्यों हमेशा बल है कि?
क्या उन चीजों में से एक है जो बाद के संस्करण में बदल सकता है?
हाय, महोदय। क्या यह एक स्ट्रीम बग होना चाहिए? –
@ होली-जावा मैं यह नहीं कहूंगा कि यह एक बग है, केवल खराब कार्यान्वयन डिज़ाइन जो भविष्य में सबसे अधिक तय किया जाएगा। –
@ होली-जावा: गायब आलस्य को एक बग के रूप में देखा जा सकता है और इसके लिए पहले से ही एक बग रिपोर्ट है। सीमित समांतरता, हालांकि, संभावित प्रदर्शन सुधार के लिए सिर्फ एक क्षेत्र है। व्यवहार में, यह केवल बाहरी धाराओं और बहुत बड़ी आंतरिक धाराओं में तत्वों की एक छोटी संख्या के साथ धाराओं को प्रभावित करता है। – Holger