CPU Bound는 프로세스가 진행될 때, CPU 사용 기간이 I/O Wating 보다 많은 경우다. 주로 행렬 곱이나 고속 연산을 할 때 나타나며 CPU 성능에 의해 작업 속도가 결정된다.
반면 I/O Bound는 프로세스가 진행될 때, I/O Wating 시간이 많은 경우다. 파일 쓰기, 디스크 작업, 네트워크 통신을 할 때 주로 나타나며 작업에 의한 병목(다른 시스템과 통신할 때 나타남)에 의해 작업 속도가 결정된다.
CPU의 성능이 향상되거나 개수가 추가되면 CPU Bound의 작업 처리 성능이 향상된다. 따라서 성능 향상을 위해 scale-up이 주로 사용된다.
반면 I/O Bound의 경우에는 CPU 성능보다 타 시스템과의 병목 부분(I/O Wating)에 큰 영향을 받기 때문에 스레드 개수를 늘리거나 동시성을 활용한다. 따라서 성능 향상을 위해 scale-out을 주로 사용한다.
multiprocessing 방식은 Multiple processes를 사용하며 고가용성(CPU) Utilization와 같은 CPU-bound Application 처리에 적합하다.
-> 10개의 부엌, 10명의 요리사, 10개의 요리
multithreading 방식은 Single(Multi) process, Multiple threads를 사용하며 I/O Bound 중에서 빠르게 처리해야하는 Application에 적합하다.
-> 1개의 부엌, 10명의 요리사, 10개의 요리
Async IO는 Single process, single thread를 활용하며 I/O Bound 중 천천히 처리해도 괜찮은 Application에 적합하다.
-> 1개의 부엌, 1명의 요리사, 10개의 요리