[CS]CPU Bound / IO Bound

한호성·2022년 6월 7일
0

CPU Bound / IO Bound

개념 및 기본 용어

1.Burst (버스트)

  • 어떤 현상이 짧은 시간 안에 집중적으로 일어나는 것을 의미한다.

2.Input/output (IO)

  • 파일을 읽고 쓰거나, 네트워크 어딘가에 있는 다른 존재와 데이터를 주고받거나, 모니터/ 마우스 같은 입출력 장치와 데이터를 주고 받는 것을 IO라고 한다.

3.CPU 버스트

  • 프로세스가 CPU에서 한 번에 연속적으로 실행되는 시간을 의미한다. 즉 메모리에 올라가 있는 프로세스가 자신의 차례가 되어서 CPU에서 실행됐을 때 자신의 명령어들이 CPU에서 연속적으로 실행되는 시간을 의미한다.

4.IO 버스트

  • 프로세스가 IO 작업을 요청하고, 그 결과를 기다리는 시간을 의미한다.

프로세스는 CPU 버스트 와 IO 버스트의 연속이다

프로세스가 시작하면 처음으로 CPU 버스트로 시작되고, IO 작업을 만나게 되면 IO 버스트를 진행하고 진행이 완료되면 다시 CPU 버스트를 진행하고, 계속해서 반복하다 프로세스가 종료될 떈 CPU 버서트로 마무리 된다.

CPU 버스트 길이에 따른 빈도수 표를 보고 알 수 있는 것은 프로세스들이 대체로 8MS 내로 CPU 버스트 작업을 완료하는 것을 알 수 있다. (보통 프로세스의 CPU 작업은 한벙 수행될 때 길게 하지 않고 짧게 진행하는 것을 알 수 있다.)

CPU bound 프로세스 & IO bound 프로세스

CPU bound 프로세스

CPU burst 작업이 많은 프로세스를 의미한다.

ex) 머신러닝,동영상 편집 프로그램 ( 연산작업이 주를 이루는 프로그램들)

cpu bound 프로그램은 원할한 실행을 위해 몇 개의 스레드가 필요로 할까?

#cf) 괴츠 2002~2006년에 발표한 자료에 따르면 cpu bound 프로그램에서 적절한 thread 개수는 cpu 개수 혹은 cpu 내의 코어 갯수+1 을 한 만큼의 스레드를 만들 때 제일 좋다고 한다. (number of threads = number of CPUs + 1)
-> 스레드가 많다고 좋은 것이 아니다. 프로세스의 스레드가 많을 경우 cpu 혹은 cpu 코어를 두고 경합이 일어나고, 이 때 프로세스의 스레드를 교체하면서 진행할 때 context swtiching이 일어나고 이는 cpu을 불필요하게 사용하게 되는 overhead(비용)이다.

IO bound 프로세스

IO burst 작업이 많은 프로세스

ex) 일반적으로 개발되는 백엔드 API 서버
-> 보통의 API 서버들은 HTTP request 요청을 받으면 DB서버나 캐시에 관련된 데이터를 요청 한 후에 , 이 데이터들을 가공 한후 HTTP response을 하는 것이 일반적이다. 이 때, db서버나 캐시에서 데이터를 요청하는 작업이 io 작업이고, 이런 io 작업은 cpu에서 명령어를 처리하는 것보다 더 많은 시간이 소요 된다. 즉 io bound 프로세스를 볼 수 있다. (일반적인 구현한 api에 따라 다를 수 있다.)

IO BOUND 프로그램은 몇 개의 스레드가 적절할까?

컴퓨터 스팩, 프로그램의 특성 상황에 따라 달라질 수 있다. -> 테스트 & 모니터링을 통해 적절한 스레드 수를 찾는 과정이 필요하다.

Ex) 백엔드 api 서버를 개발할 때, 서버가 api 요청을 처리하는 방식을 thread per request 방식이고, 이 방식에는 api 서버에 미리 스레드 여러개를 만들어 놓고, 요청이 들어올 때마다, 일 없는 스레드가 나가서 요청을 처리하는 형태로 동작한다고 하자.
이 때, api 서버 하드웨어 스펙, api 어플리케이션 io 버스트 비중이 대략적으로 어느 정도인지, 예상되는 트래픽 패턴은 어떤지 상황을 고려하여 스레드를 미리 만들어 놓을지 결정하면 ,안정적인 서버 운영이 가능하다.

Reference

  1. https://blog.naver.com/myca11/222623232879
profile
개발자 지망생입니다.

0개의 댓글