Giả sử tôi có mã này:flatMap song song luôn tuần tự
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());
Output là tên chủ đề tương tự, vì vậy không có lợi ích từ parallel
ở đây - những gì tôi có ý nghĩa bởi đó là có một chủ đề duy nhất mà không Tất cả công việc.
Bên flatMap
có mã này:
result.sequential().forEach(downstream);
Tôi hiểu buộc sequential
tài sản nếu "bên ngoài" dòng sẽ là song song (họ có thể có khối), "bên ngoài" sẽ phải đợi cho "flatMap "để hoàn thành và cách khác xung quanh (kể từ khi cùng một hồ bơi chung được sử dụng) Nhưng tại sao luôn luôn lực lượng đó?
Đó có phải là một trong những điều mà có thể thay đổi trong phiên bản mới hơn không?
Xin chào, thưa ngài. có phải là một lỗi luồng không? –
@ holi-java Tôi sẽ không nói rằng đây là lỗi, chỉ thiết kế triển khai kém mà rất có thể sẽ được khắc phục trong tương lai. –
@ holi-java: sự lười biếng mất tích có thể được xem như là một lỗi và đã có một báo cáo lỗi cho nó. Tuy nhiên, giới hạn song song chỉ là một khu vực để cải thiện hiệu suất tiềm năng. Trong thực tế, điều này chỉ ảnh hưởng đến các luồng với một số lượng nhỏ các phần tử trong luồng ngoài và các luồng bên trong lớn hơn nhiều. – Holger