1.Burst (버스트)
2.Input/output (IO)
3.CPU 버스트
4.IO 버스트
프로세스는 CPU 버스트 와 IO 버스트의 연속이다
프로세스가 시작하면 처음으로 CPU 버스트로 시작되고, IO 작업을 만나게 되면 IO 버스트를 진행하고 진행이 완료되면 다시 CPU 버스트를 진행하고, 계속해서 반복하다 프로세스가 종료될 떈 CPU 버서트로 마무리 된다.
CPU 버스트 길이에 따른 빈도수 표를 보고 알 수 있는 것은 프로세스들이 대체로 8MS 내로 CPU 버스트 작업을 완료하는 것을 알 수 있다. (보통 프로세스의 CPU 작업은 한벙 수행될 때 길게 하지 않고 짧게 진행하는 것을 알 수 있다.)
CPU burst 작업이 많은 프로세스를 의미한다.
ex) 머신러닝,동영상 편집 프로그램 ( 연산작업이 주를 이루는 프로그램들)
#cf) 괴츠 2002~2006년에 발표한 자료에 따르면 cpu bound 프로그램에서 적절한 thread 개수는 cpu 개수 혹은 cpu 내의 코어 갯수+1 을 한 만큼의 스레드를 만들 때 제일 좋다고 한다. (number of threads = number of CPUs + 1)
-> 스레드가 많다고 좋은 것이 아니다. 프로세스의 스레드가 많을 경우 cpu 혹은 cpu 코어를 두고 경합이 일어나고, 이 때 프로세스의 스레드를 교체하면서 진행할 때 context swtiching이 일어나고 이는 cpu을 불필요하게 사용하게 되는 overhead(비용)이다.
IO burst 작업이 많은 프로세스
ex) 일반적으로 개발되는 백엔드 API 서버
-> 보통의 API 서버들은 HTTP request 요청을 받으면 DB서버나 캐시에 관련된 데이터를 요청 한 후에 , 이 데이터들을 가공 한후 HTTP response을 하는 것이 일반적이다. 이 때, db서버나 캐시에서 데이터를 요청하는 작업이 io 작업이고, 이런 io 작업은 cpu에서 명령어를 처리하는 것보다 더 많은 시간이 소요 된다. 즉 io bound 프로세스를 볼 수 있다. (일반적인 구현한 api에 따라 다를 수 있다.)
컴퓨터 스팩, 프로그램의 특성 상황에 따라 달라질 수 있다. -> 테스트 & 모니터링을 통해 적절한 스레드 수를 찾는 과정이 필요하다.
Ex) 백엔드 api 서버를 개발할 때, 서버가 api 요청을 처리하는 방식을 thread per request 방식이고, 이 방식에는 api 서버에 미리 스레드 여러개를 만들어 놓고, 요청이 들어올 때마다, 일 없는 스레드가 나가서 요청을 처리하는 형태로 동작한다고 하자.
이 때, api 서버 하드웨어 스펙, api 어플리케이션 io 버스트 비중이 대략적으로 어느 정도인지, 예상되는 트래픽 패턴은 어떤지 상황을 고려하여 스레드를 미리 만들어 놓을지 결정하면 ,안정적인 서버 운영이 가능하다.