BanditBool2 / ReadingRecord

2 stars 0 forks source link

[Ch 4] 4.3.2 외부 반복과 내부 반복 #42

Closed sohhhyeeun closed 1 year ago

sohhhyeeun commented 1 year ago

p.148 for-each를 이용하는 외부 반복에서는 병렬성을 스스로 관리해야 한다(병렬성을 포기하거나 synchronized로 시작하기에는 어려움이 있다)고 나와있는데 이해가 어려워 병렬성을 스스로 관리한다라는 말에 추가적인 설명을 해주실 수 있을까요? 또한 내부 반복이 아닌 외부 반복을 사용했을 때 더 이득인 상황을 보여주는 예제가 있을까요?

kkambbak commented 1 year ago

병렬성을 스스로 관리해야 한다

외부 반복에서는 병렬성을 스스로 관리해야 한다 -> 각 쓰레드가 동시에 접근하거나 수정하는 상황을 피하게끔 직접 관리해야 한다는 의미 인 것 같습니다.

Stream에서는 대부분의 메서드가 병렬처리를 지원하지만, 일부는 병렬처리를 지원하지 않거나, 지원하더라도 비효율적일 수 있습니다. 만약 스트림으로 효과적인 병렬처리를 한다면, 동시성에 대해 덜 신경써도 내부적으로 처리된다고 생각하면 될거 같습니다.

외부 반복을 사용했을 때 더 이득?

내부 반복과 외부 반복 중 어느 것이 더 이득인지는 상황에 따라 너무나도 달라서 직접 해보아야 합니다. 이론적으로는 메서드호출, 스트림객체 생성 등의 오버헤드가 더 큰 경우에는 외부반복이 더 빠릅니다.

그러나 가독성과 유지보수 측면에서 스트림을 사용하는 것이 더 효율적일 때가 많다고 생각합니다.