Quick Comparison
text
concurrency: 여러 작업의 진행을 겹쳐 관리하는 구조
parallelism: 여러 작업이 같은 시간대에 실제로 실행됨
asynchrony: 완료를 기다리는 동안 실행 흐름을 막지 않는 표현Single core에서도 작업을 번갈아 진행하면 concurrency가 가능하지만 같은 순간 명령을 실행하는 core는 하나일 수 있습니다. 여러 core나 GPU 실행 단위가 동시에 계산하면 parallelism이 생깁니다.
작업 성격
I/O-bound 작업은 CPU 계산보다 외부 응답을 기다리는 시간이 큽니다. 비동기 I/O를 사용하면 기다리는 동안 thread를 점유하지 않고 다른 요청을 처리할 수 있습니다. CPU-bound 작업은 계산 자체가 크므로 여러 core에 나눌 수 있는지와 분할 비용을 봅니다.
모든 비동기 API가 새 thread를 만들지 않으며, 여러 thread가 있어도 single core에서는 시간 분할로 진행될 수 있습니다.
선택 기준
text
I/O waiting -> async I/O 먼저 검토
independent CPU -> parallel execution 검토
shared mutable state -> synchronization 비용 먼저 계산
strict ordering -> 단일 owner나 queue가 더 단순할 수 있음동시성 구조는 처리량뿐 아니라 cancellation, timeout, partial failure와 lifetime을 함께 설계해야 합니다.
자주 틀리는 점
asynckeyword만 붙여 CPU 작업이 background에서 실행된다고 생각하지 않습니다.- thread-safe collection 하나로 전체 작업 순서가 안전해지지는 않습니다.
- 병렬화한 작은 작업이 scheduling과 synchronization 비용 때문에 더 느릴 수 있습니다.
- 순서가 중요한 상태를 무조건 여러 worker가 직접 수정하게 만들지 않습니다.
참고 링크
1 sources