동시성과 병렬성
동시성과 병렬성
Concurrency (동시성)
논리적으로 동시에 실행되는 것처럼 보이게 만드는 개념. 이름과 달리 여러 작업을 동시에 수행하지는 않는다. 그렇게 보일 뿐. 단일 코어를 기준으로 시간 분할을 통해 여러 스레드를 번갈아가며 작업을 수행함으로써, 마치 동시에 여러 작업이 처리되는 것처럼 보인다.
사용자의 입력을 기다리거나, 네트워크 요청, 파일 입출력 등의 I/O 작업시에는 CPU가 유휴 상태로 대기하게 된다. 이때 CPU가 아무것도 하지않고 대기하는 대신, 컨텍스트 스위칭을 통해 다른 쓰레드의 작업을 처리할 수 있다. 이러한 특성 덕분에 서버는 여러 클라이언트의 요청을 동시에 처리할 수 있어서 효율적이다.
하지만 동시성 환경을 신중하게 고려하지 않으면 여러 쓰레드를 사용하면서 데드락, Race Condition, Starvation 등의 문제가 발생할 수 있다.
Parallelism (병렬성)
물리적으로 동일한 시간에 여러 작업을 독립적으로 수행하는 것을 의미. 여러개의 코어가 각각 독립된 쓰레드의 작업을 동시에 처리함으로써, 실제로 여러 작업이 동시에 실행된다. 동시성과는 달리, 하나의 코어가 여러 쓰레드를 번갈아 가면서 처리할 필요 없이, 각 코어에서 독립적으로 작업을 실행한다.
독립적인 하위 작업으로 나눌 수 있는 계산과 같은 작업을 여러 코어에 분산함으로써, 작업 완료 시간을 최소화 할 수 있어 고성능 컴퓨팅에 이상적이다. 하지만 병렬처리는 데이터나 리소스를 공유할 때 작업 간 동기화가 필요한 경우가 많아, 이러한 동기화로 인해 상당한 오버헤드가 발생할 수 있다.
References
This post is licensed under
CC BY 4.0
by the author.