-
CPU Bound vs I/O BoundFastAPI 2025. 10. 10. 17:47
프로세스가 하는 작업은 CPU Bound 작업과 I/O Bound 작업으로 나눌 수 있다.
이때 어떠한 작업이 CPU를 요하는 작업이고 어떠한 작업이 I/O 작업인지 판단하고
그에 맞게 성능 개선을 하기 위한 전략들을 수립할 수 있어야한다.
[CPU Bound]
CPU Bound 작업이란 CPU의 계산 능력(연산 속도)이 병목(bottleneck)이 될 수 있는 작업을 말한다.
즉, CPU가 죽어라 일해야 끝나는 일을 말한다.
CPU의 강도 높은 노동을 요하는 작업을 말한다.
- 대규모 수학 계산 (행렬 연산, 딥러닝 연산)
- 암호화 / 복호화 → 소수 계산을 위한 브루트포스해야하니까
- 이미지 영상 인코딩
- 데이터 압축 / 해제
- 시뮬레이션
이런 것들은 모두 CPU가 쉴 틈 없이 계산만 해야하는 작업들이다.
I/O 입출력은 없고, CPU만 계속 쓰이는 작업이라 CPU 자체가 한계점이다.
그래서 이러한 작업들을 CPU-bound (CPU에 묶여있다, CPU 자체가 병목이 될 수 가 있다) 라고 하는 것이다.
이러한 경우에는 병렬성을 통해 처리하는 것이 효율적이다.
각 작업들을 여러 조각으로 분배하여 각 CPU에게 할당하는 것이다.
→ 이렇게 분할 정복 기법을 통해 병렬적으로 대규모 CPU Bound 작업을 처리하면 빠르게 끝낼 수 있다.
[I/O Bound]
I/O Bound 작업은 CPU의 직접적인 계산을 요하는 작업이 아닌, I/O 입출력 대기 시간이 병목인 경우를 말한다.
- API 호출
- DB 쿼리 호출
- 디스크 작업 → 파일 입출력
- 외부 서비스와의 연결 → DB 연결
이러한 작업들은 응답이 올때까지 CPU는 쉬고 있는 상태이다.
즉, 입출력 대기 시간이 병목인 것이다.
이러한 I/O 소요시간을 CPU가 직접적으로 줄일 수 는 없다.
CPU가 어떻게 할 수 있는 문제가 아니다.
→ 왜냐하면 응답이 늦게 오는 이유는 외부 서비스 쪽에서 오래걸리는 것이기 때문이다.
따라서 이러한 경우에는 CPU가 응답을 기다리게 하는 동안 다른 작업을 처리하도록 하는 것이 효율적이다.
그게 최선의 방식이다.
따라서 이럴때 잘먹히는게 바로 비동기, 동시성을 구현하는 것이다.
'FastAPI' 카테고리의 다른 글
aiohttp (0) 2025.10.17 Logging (0) 2025.10.11 single thread event loop vs multi processing (0) 2025.09.28 동시성 vs 병렬성 (0) 2025.09.28 single threading vs multi threading (0) 2025.09.28