본문 바로가기

운영체제

3. CPU bound, IO bound

단어 정리

※ CPU: 프로세스의 명령어를 해석하고 실행하는 장치

※ burst : 어떤 현상이 짧은 시간안에 집중적으로 일어나는 일

※ CPU burst : 프로세스가 CPU에서 한번에 연속적으로 실행되는 시간

※ IO burst : 프로세스가 IO 작업을 요청하고 결과를 기다리는 시간

프로세스의 인생은 CPU 버스트와 IO 버스트의 연속!

CPU 버스트 길이에 따른 빈도

프로세스들이 짧은 CPU 버스트 길이를 가지는 것을 보았을 때,

대부분의 프로세스들은 CPU 작업을 한번 수행할 때 길게하지 않고 짧게 끝냄

 

 

CPU bound

CPU burst가 많은 프로세스

Ex) 동영상 편집 프로그램, 머신러닝 프로그램

 

IO bound

IO burst가 많은 프로세스

Ex) 일반적인 백엔드 API 서버 (DB 서버나 캐시 서버에 데이터를 요청하는 작업이 IO 작업처리 작업이고 이는 http 통신을 통해 이루어지는 네트워크 작업이기 때문에 cpu에서 프로그램 명령어 몇줄을 처리하는 작업보다 훨씬 더 오래걸리는 작업!)

 

 

듀얼 코어 CPU에서 동작할 CPU bound 프로그램을 구현한다면 몇개의 스레드를 쓰는게 좋을까요?

Goetz (2002, 2006) 추천

CPU bound 프로그램에서 적절한 스레드 수는 number of CPUs 혹은 CPU 개수 + 1

→ 컨텍스트 스위칭은 유저 입장에서는 불필요한 오버헤드인 cpu 작업이므로

오른쪽 그림은 왼쪽에서 T1, T2에 대한 컨텍스트 스위칭을 세분화 해서 표현한 그림

아래와 같이 코어 개수만큼의 스레드 개수 혹은 1개 더 많은 스레드 개수가 이상적임

(아래는 컨텍스트 스위칭이 일어나지 않아서 CPU 사용 효율성이 높아짐)

 

IO Bound 프로그램을 구현한다면 몇개의 스레드를 쓰는게 좋을까요?

여러 상황에 맞춰서 적절한 스레드 수를 찾아야함....

만약 API 서버가 스레드 per request 방식이라면?

몇개의 스레드들을 미리 만들어 놓을지 여러 상황을 고려해서 결정하는 것이 필요함

- 고려 사항

(1) api 서버의 하드웨어 스팩

(2) api 어플리케이션의 IO burst 비중이 대략적으로 어느정도인지

(3) 예상되는 트래픽 패턴

등....

위 두가지가 프로그램의 스레드 개수를 결정하는데 어떤 영향을 주나?