Arrays.ParallelSort() vs Arrays.Sort()
이번 포스팅은 자바8에서 추가된 병렬 배열 정렬(Parallel array sorting)에 대해서 아주 쉽게 이해 해보고자 한다.
int [] array = new int[10];
// ... 배열값 지정 생략
Arrays.sort(array);
int [] array = new int[10];
// ... 배열값 지정 생략
Arrays.papallelSort(array);
위 두개의 예제 코드는 동일한 결과를 출력한다. 너무나도 당연한 말이다.
그렇다면, Java8 에서는왜 같은 기능을 하는 메소드를 추가했을까?
parallelSort()
메소드는 Fork-Join 이라는 프레임웍이 내부적으로 적용된 형태의 메소드이다.
🗣 Fork-Join이란?
Java7에서 새로 추가된 기능으로, 쉽게말해서 CPU를 더 쉽고 효율적으로 사용하기 위해서 만들어 진 기능이다. Fork : 작업을 여러개로 나누어서 처리한 후 / Join : 합친다. 의 의미다. 이러한 Fork-Join에는 Work Stealing 이라는 개념이 포함되어 있는데, 예를들어 여러개의 Dequeue에 작업이 나뉘어져 어떤 일을 진행할 때, 하나의 Dequeue는 매우 바쁘고, 다른 Dequeue는 매우 한가할 때가 있다. 이 때, 한가한 Dequeue가 바쁜 Dequeue의 대기하고 있는 일을 대신 가져가서 처리해주는 것이라고 이해하면 된다.
즉, parallelSort()
메소드는 필요에 따라 여러 개의 쓰레드로 나뉘어 작업이 수행되기 때문에 정렬되는 속도가 빠르다.
(sort()
는 항상 단일 쓰레드로 수행된다.)
그렇다고해서 무조건 parallelSort()
를 사용하는것은 옳지 않다. 멀티 쓰레드를 사용한다는 것은 그만큼 CPU를 더 많이 사용한다는 뜻이다.
실제로 parallelSort()
와 sort()
를 비교해보면 약 5000개 정도부터 parallelSort()
의 성능이 더 빨라진다고 한다.
따라서 데이터의 개수가 많지 않은 배열에서는 굳이 parallelSort()
를 사용할 필요가 없다. 상황에 맞게 사용하는 훈련을 하자!
Sort 메소드는 매우 많이 사용해본 메소드인데, 항상 IDE로 자동완성 기능을 사용하다보니 어쩔때는 parallelSort()
를 사용하기도 하고 어쩔때는 sort()
를 사용하기도 했다. 이제 확실하게 이해했으니, 상황에 맞게 사용해야겠다.😊
'Java' 카테고리의 다른 글
싱글턴 패턴의 다양한 구현 방법을 알아보자. (0) | 2020.12.21 |
---|---|
Connection pool을 사용함으로써 얻는 이점은 무엇일까? (0) | 2020.12.14 |
불변 객체(Immutable Object)에 대하여 (0) | 2020.11.22 |
Serializable 인터페이스에 대하여 (0) | 2020.11.14 |
String 클래스에 대하여 (Null / immutable /String pool) (0) | 2020.11.11 |