CPU Bound vs I/O Bound
CPU Bound와 I/O Bound의 차이점과 각각의 특징에 대해 기록한다.
CPU Bound vs I/O Bound
용어
- CPU (Central Processing Unit): 프로세스의 명령어를 해석하고 실행하는 장치
- I/O (Input/Output): 파일을 읽고 쓰거나 네트워크의 어딘가와 데이터를 주고 받는 것. 입출력 장치와 데이터를 주고 받는 것.
- Burst: 어떤 현상이 짧은 시간 안에 집중적으로 일어나는 것
- CPU Burst: 프로세스가 CPU에서 한번에 연속적으로 실행되는 시간
- I/O Burst: 프로세스가 I/O 작업을 요청하고 결과를 기다리는 시간
CPU Bound Process
- CPU Burst가 많은 프로세스
동영상 편집 프로그램, 머신러닝 프로그램
I/O Bound Process
- I/O Burst가 많은 프로세스
(일반적인) 백엑드 서버, 웹서버, 데이터베이스 서버
Question
Q1. 듀얼 코어 CPU에서 동작할 CPU Bound 프로그램을 구현한다면 몇 개의 스레드를 사용하는 것이 좋을까?
- A. 2개의 스레드를 사용하는 것이 좋다. CPU Bound 프로그램은 CPU Burst가 많은 프로그램이므로 CPU를 최대한 활용하기 위해 각 코어에 하나씩 스레드를 할당하는 것이 좋다. 2개이상의 스레드를 사용해도 각 스레드가 동시에 실행될 수 있는 스레드의 개수는 CPU의 코어 개수와 같다.
Goetz (2002, 2006) 에 따르면, CPU Bound 프로그램에서 적절한 스레드 수는 CPU 코어 수 + 1.
Q2. I/O Bound 프로그램을 구현한다면 몇 개의 스레드를 사용하는 것이 좋을까?
- A. 상황에 따라 다르다. I/O Bound 프로그램은 I/O Burst가 많은 프로그램이므로 I/O 작업을 최대한 활용하기 위해 스레드를 최대한 활용하는 것이 좋다. 하지만, 너무 많은 스레드를 사용하면 스레드 간의 경쟁이 발생하여 오히려 성능이 떨어질 수 있다. 따라서, 적절한 스레드 수를 찾는 것이 중요하다.
This post is licensed under CC BY 4.0 by the author.