1. 병렬성(Parallelism)
- 한 개의 코어(CPU)에는 한 개의 Thread가 실행된다.
- 동시성의 하위 개념으로 운영체제에서 여러 CPU에 Thread를 적절히 분배하여 동시적으로 실행한다.
2. 동시성(Concurrent)
- CPU가 한번에 많은 작업을 처리한다. 즉, 하나의 CPU가 여러 Thread를 교체하며 조금씩 작업을 처리한다.
- 동시성은 작업을 빠르게 처리하는 게 목적이 아닌 CPU를 효율적으로 사용하는 것에 중점을 둔다.
- CPU의 코어 개수보다 Thread의 개수 많을 경우만 해당된다.
3. ThreadPoolExecutor
병렬성으로 처리 성능을 극대화하고, 동시성으로 CPU 자원을 효율적으로 운용한다.
@Test
public void test() {
// CPU 코어 개수
int core = Runtime.getRuntime().availableProcessors();
System.out.println("core : " + core);
// CPU 코어 개수 만큼 데이터 생성
List<Integer> data = new ArrayList<>();
for (int i = 0; i < core; i++) {
data.add(i);
}
long stTime = System.currentTimeMillis();
// CPU 개수만큼 병렬 처리
long sum = (long) data.parallelStream()
.mapToDouble(i -> {
try {
// 0.5초 대기
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return i * i;
})
.sum();
long edTime = System.currentTimeMillis();
System.out.println("처리 시간 :" + (edTime - stTime) + "ms");
System.out.println("결과: " + sum);
}
CPU 코어 개수 만큼 Thread를 실행하면 병렬 처리로 모든 코어가 동시에 작업해 완료될 때까지 걸리는 시간은 동일하게 0.5초이다. 하지만 하나로 Thread의 개수가 많아지면 그때부터는 동시성 처리로 작업하는데 걸리는 시간이 달라진다.
반응형
'CS' 카테고리의 다른 글
Thread 구조 및 특징(Process와의 차이) (0) | 2024.09.10 |
---|---|
프로그램과 통신에서의 동기 비동기 차이 및 개념 (0) | 2024.02.10 |
[네트워크] 공인 IP와 사설 IP 개념 (0) | 2023.12.19 |
Monolith vs Microservice와 MSA 개념 및 특징 (0) | 2023.07.20 |
JAR WAR 배포 차이점과 장단점 (0) | 2023.06.24 |