[3주차] 동시성과 병렬성, 동기 비동기
동시성과 병렬성
동시성
- 동시성은 여러 작업이 겹치는 기간에 실행될 수 있음을 의미한다.
- 동시에 실행하는 것이 아니라 CPU가 작업마다 시간을 분할하여 적절하게 context switching을 통해 동시에 실행되는 것처럼 보이게 하는 것이다.
- 동시성의 핵심 목표는 유휴 시간을 최소화하는 것이다. (유휴 시간: 컴퓨터가 작동가능하나 작업이 없는 시간)
- 구현과 디버그가 어렵다는 단점이 있다.
- 현재 프로세스/스레드가 I/O 작업, DB 트랜잭션 등 외부 프로그램 실행을 기다리는 동안에 다른 프로세스/스레드가 CPU 할당을 받는다.
병렬성
- 병렬성은 동일한 시간에 독립적인 작업을 실행할 수 있음을 의미한다.
- 동시성과는 달리 여러 작업을 다른 코어, 다른 프로세스, 별도의 컴퓨터 등에서 동시에 실행할 수 있다.
- 그래서 병렬 처리가 성능 향상에 필수적이라고도 한다.
- 한가지 예로 분산 컴퓨팅 시스템이 있다. 분산 컴퓨팅 시스템은 단일 시스템으로 실행하는 여러 컴퓨터 시스템들로 구성되어 있고, 각 컴퓨터의 시스템들은 네트워크로 연결될 수 있다. 해당 예 외로도 하나의 컴퓨터에 여러 코어를 사용하여 병렬 처리를 활용할 수도 있다.
동시성 vs 병렬성
- 프로그래밍 실습 강의를 들으면서 영상을 멈췄다가 다시 실행하는 행위를 반복 → 동시성