parallelStream()
위 코드는 채팅을 구현하다가 구글에서 마주친 코드이다.
각 세션에게 바로 메세지를 보낸다. ?? stream은 알겠는데 parallel은 뭐지?? 하고 찾아봤는데,
병렬로 빠르게 처리하는 stream이다.
우선 Stream을 왜 쓰냐? for문이 있는데..
->외부 반복과 내부 반복의 차이이다.
Collection 데이터를 가공할때 직접적으로 반복문을 쓰며 로직을 작성 -> 외부 반복
Stream : 내부적으로 반복문 -> 로직만 작성하면 알아서 처리.
그래서 stream 장점이 뭔데?
1. 병렬 처리에 유리함.
2. stream은 람다식을 사용해 별도의 스레드에서 병렬처리를 관리함.
Fork/ join 의 work 쓰레드의 수는
서비스가 돌아가는 서버의 CPU 코어 수에 종속적임.
서버의 코어 PC의 수가 4개면 4개의 쓰레드임.
-> 그래서 만약 4개를 동시에 하면 1개 한만큼의 시간이지만 5개를 하면 2개한만큼의 시간이 나타남.
가장 큰 문제 :
ThreadPool을 Global 하게 이용함
그러므로
위와같이 쓰레드를 모두 가져가서 sleep 같은 함수를 실행해버리면 문제가 발생함.
이러한 문제는 ForkJoinPool을 커스텀하면서 해결할 수 있음.
https://sabarada.tistory.com/102
[java8] 병렬 Stream
Java에서는 다양한 방법으로 병렬 처리를 만들 수 있습니다. 기본적인 Thread 클래스를 이용할 수 있으며, ExecutorService 를 이용하여 쓰레드풀도 쉽게 만들 수 있습니다. 그리고 CompleteFuture 를 이용하
sabarada.tistory.com
어우 어렵다.. 정리하자면
Stream은 내부반복을 지원해서 병렬처리가 쉽게 가능하다.
각 stream끼리는 같은 쓰레드풀을 사용한다 -> 관리가 필요하다.
하지만 ParallelStream이 항상 빠르다고 할 수 없다. 상황에 따라 또 다른것같다.
아래는 For / Stream / ParallelStream 비교표다.
]\