동시성 vs 병렬성
동시성
- 싱글코어에서 멀티 쓰레드를 동작시키는 것.
- 동시에 실행되는 것처럼 보이지만, 여러 쓰레드가 번갈아가면서 실행되는 것이다.
병렬성
- 멀티코어에서 멀티 쓰레드를 동작시키는 것.
- 실제로 동시에 실행되는 것이다.
- 병렬성은 데이터 병렬성과 작업 병렬성으로 나뉜다.
데이터 병렬성
- 하나의 작업을 병렬 처리하는 것.
- Ex) Java8의 병렬스트림.
작업 병렬성
- 다른 작업을 병렬 처리하는 것.
- Ex) 웹서버에서 각 요청을 개별 스레드로 할당하여 처리.
At Java
- 동시성은 논리적인 소프트웨어 스레드와 관련이 있다.
- Java에서도 싱글코어에서 메모리가 허용하는 한 얼마든지 스레드를 만들 수 있다.
- 병렬성은 물리적인 하드웨어 스레드와 관련이 있다.
- 즉 CPU의 코어와 관련이 있다.
- 아래는 컴퓨터의 사양이다.
나의 경우, 쿼드 코어 + 한 코어당 2개의 스레드(하이퍼스레딩)를 가지므로 논리 프로세서는 8이다.
- 따라서 Java8의 병렬스트림은 기본적으로 논리 프로세서의 수만큼
병렬로 작업을 실행한다.
Runtime.getRuntime().availableProcessors()