동시성과 병렬성, 그리고 멀티태스킹
동시성 (Concurrency)
- 논리적인 개념
- 하나의 프로세스 안에서 여러 서브태스크를 매우 빠르게 번갈아 실행해 마치 동시에 실행되는 것처럼 동작하는 것
- CPU가 한 순간에는 하나의 작업만 함.
- 대개 멀티 스레딩 혹은 비동기 프로그래밍(Async/Await)을 사용해 구현됨.
병렬성 (Parallelism)
- 물리적인 개념
- 여러 개의 CPU 혹은 코어에서 서로 다른 작업을 실제로 동시에 실행하는 것
- CPU 바운드 연산에 유리함.
- 주로 대규모 데이터 처리, 대규모 그래픽 렌더링, 물리 시뮬레이션과 같은 곳에 사용됨.
- 멀티코어 CPU의 성능을 활용하는 최적화 기법이 필수.
- 알고리즘이나 자료구조를 병렬처리에 적합한 형태로 재구현해야 성능 이점을 얻을 수 있다.
멀티코어 환경이라면 동시성을 가진 시스템과 함께 병렬성도 함께 구현할 수 있다. 동시성은 한 코어에서의 논리적인 다중 작업 뿐 아니라, 여러 코어에서 동작해도 여전히 “동시에 진행되는 작업들”을 다루는 패러다임이다. 그렇기 때문에 동시성과 병렬성은 서로 배타적인 개념이 아니다.
동시성이 사용된 운영체제의 멀티태스킹
OS의 멀티 태스킹 또한, CPU가 여러 개의 프로세스를 동시에 실행하는 것처럼 보이게 하는 기법이다.
하나의 CPU가 여러 프로세스를 번갈아 수행하며, 프로세스를 전환할 때는 현재 진행중인 프로세스의 진행도를 저장하면서 새롭게 수행할 프로세스의 진행도를 불러오는 Context Switching 이 수행된다. 대부분의 운영체제에서 멀티태스킹 중에서도 선점형 멀티태스킹을 주로 사용한다.
선점형 멀티태스킹 (Preemptive Multitasking)
운영체제가 각 프로세스에게 실행 시간을 강제로 나눠주며, (이렇게 나눠진 시간을 Time Slice라고 하며, 이렇게 시간을 나누는 것을 시분할(Time-Slicing) 기법이라고 한다.) 일정하게 정해진 시간이 지나면 CPU가 처리하는 프로세스가 전환된다. Windows, Linux와 같은 대부분의 현대적인 OS에서는 이러한 방식을 적용한다.
이러한 방식은 한 프로세스가 전체 시스템의 정지를 불러오는 최악의 상황을 방지할 수 있다. 이것이 현대의 많은 시스템에서 이 방식을 사용하는 이유가 된다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.