동시(Concurrent) vs 직렬(Serial)
- 동시(Concurrent): 여러 스레드로 작업을 분산시켜 보낸다.
- 직렬(Serial): 하나의 스레드로만 작업들을 보낸다. (작업 순서가 중요할 경우)
동기(Sycn) vs 비동기(Async)
- 동기(Synchronous): 다른 스레드로 보낸 작업이 끝날때까지 기다린다.
- 작업이 순차적으로 진행되며 작업을 대기하는 동안 CPU가 낭비된다는 특징이 있다.
- 비동기(Asynchronous): 작업을 다른 스레드에서 시키고, 바로 내 할 일을 한다.
- 작업 흐름이 복잡해질 수 있지만 다음 작업에 대한 대기 시간이 감소한다는 특징이 있다.
병렬 vs 동시
- 병렬(Parallel): 멀티 코어에서 멀티 스레드를 사용해 실제로(물리적으로) 여러 작업을 한 번에 실행시킨다.
- 동시(Concurrent): 싱글 코어에서 멀티 스레드를 사용하여 논리적으로 여러 작업이 한 번에 실행되는 것처럼 보이게 한다.
블로킹 vs 논블로킹
- 블로킹(Blocking): 작업 요청 후, 요청한 코드(caller)의 실행이 멈추고 대기한다.
- 호출된 함수(callee)가 완료될 때까지 점유되며 동기 작업에서 주로 발생한다.
- 기다리는 동안 스레드는 유휴상태이다.
- 논블로킹(Non-blocking): 작업 요청 후, 요청한 코드(caller)가 멈추기 않고 계속 실행한다.
- 호출된 함수(callee)가 완료되면 별도의 방식(call-back, 알림 등)으로 결과를 처리하며 주로 비동기 작업에서 발생한다.
- 스레드는 유휴상태가 아니다.
블로킹과 동기화의 가능한 조합
실험 🧪
Serial Queue에서 비동기로 작업하면?
→ 순차적으로 실행
Concurrent Queue에서 비동기로 작업하면?
→ 비순차적으로 돌아감
'📱 iOS > Swift Concurrency' 카테고리의 다른 글
[Swift Concurrency 6편] Swift Concurrency 등장 배경 (1) | 2025.02.26 |
---|---|
[Swift Concurrency 5편] 동시성 프로그래밍 with GCD (0) | 2025.02.25 |
[Swift Concurrency 3편] 공유자원과 임계영역 (0) | 2025.02.23 |
[Swift Concurrency 2편] Process & Thread (0) | 2025.02.22 |
[Swift Concurrency 1편] OT (0) | 2025.02.21 |