CPU : 중앙처리장치, 프로세스의 명령어를 해석하고 실행하는 장치
I/O(Input/Output) : 파일을 읽고 쓰거나, 네트워크 이단가와 데이터를 주고 받는것, 입출력 장치와 데이터를 주고 받는것
버스트(Burst) : 어떤 현상이 짧은 시간안에 집중적으로 일어나는일
CPU 버스트 : 프로세스가 CPU에서 한번에 연속적으로 실행되는 시간
IO 버스트 : 프로세스가 IO 작업을 요청하고 결과를 기다리는 시간
프로세스는 CPU 버스트와 IO버스트의 반복
CPU에서 연속적으로 실행되다가 IO 작업 시 IO 버스트, IO 작업 종료 시 CPU 버스트
대부분의 프로세스는 0~8 milliseconds사이의 CPU 버스트를 가진다.
IO burst가 적고 CPU busrt가 많은 프로세스
예) 동영상 편집 프로그램, 머신러닝, 딥러닝 프로그램
IO burst가 많은 프로세스
예) (일반적인)백엔드 API 서버(HTTP request - DB or Memory - HTTP response)
내 생각) 1개 why? CPU bound 프로그램은 CPU 사용시간이 길기 때문에 하나의 스레드만을 사용하여 core를 1:1로 사용하게 한 후 나머지 core는 다른 프로세스를 처리하도록 한다.
Goetz씨 가 발표한 논문 CPU bound 프로그램에서 적절한 스레드 수는 CPU의 수(core의 수) +1개 즉, 듀얼코어이면 스레드 3개로 프로그램을 구현한다.
코어 한개당 스레드 2개를 담당하여 처리, 하지만 스레드1과 2는 동시에 처리되는게 아닌 스레드1의 timeslice 후 스레드2가 처리된다. 스레드1과 스레드2 처리 중간에 스레드 컨텍스트 스위칭이 발생한다.
컨텍스트 스위칭이 발생하지 않아서 오버헤드, 불필요한 비용이 발생하지 않는다.
★백엔드 개발자가 개발하는 서버는 IO Bound 프로세스!!!
고려 대상 :
1. 하드웨어 스펙
2. 애플리케이션의 IO burst
3. 예상되는 트래픽 및 패턴