CPU Bound와 IO Bound에 대해서, 그리고 CPU와 IO Bound로 구현한 프로그램에 몇 개의 스레드를 지정해야 하는지!
CPU란?(Central Processing Unit)
프로세스의 명령어를 해석하고 실행하는 장치
IO(Input/Output)
파일을 읽고 쓰거나, 네트워크 어딘가와 데이터를 주고 받는 것, 입출력 장치와 데이터를 주거나 받는 것!
CPU Burst
프로세스가 CPU에서 한 번에 연속적으로 실행되는 시간이며 메모리에 있는 프로세스가 자신의 차례가 되어 CPU에서 연산이 될 때 연속적으로 실행된 시간을 의미합니다.
IO Burst
프로세스가 IO 작업을 요청하고 결과를 기다리는 시간을 의미합니다.
버스트(Burst)
어떤 현상이 짧은 시간안에 집중적으로 일어나는 것을 의미
프로세스는 CPU와 IO Burst의 연속을 의미하며, CPU와 IO Burst가 왔다 갔다 하는 것을 의미합니다.
CPU Bound Process
- IO Burst는 조금있고 CPU Burst가 대부분을 차지하는 프로세스
ex) 동영상 편집 프로그램, 머신러닝 프로그램이 있으며 연산작업이 워낙 많아서 CPU의 코어로도 부족할 수 있다.
IO Bound Process
- IO Burst가 대부분 많은 프로세스를 차지합니다.
ex) 일반적인 백엔드 API 서버가 있으며, Request를 받으면 DB나 캐시서버에 데이터를 요청하고, 데이터를 받고 나서 데이터를 적당하게 가공해 데이터를 요청하는 작업이 있습니다.
예상 질문
듀얼코어 CPU에서 동작할 CPU bound 프로그램을 구현한다면 몇개의 스레드를 쓰는것이 좋은가?
cpu코어의 갯수 또는 +1 개의 개수가 적당합니다. 스레드의 갯수가 많아지게 되면서, cpu를 옮겨가면서 사용을 하게 되는데 컨텍스트 스위칭이 늘어나면서, 사실상 오버헤드가 발생하게 될수 밖에 없다. 그렇기 때문에 cpu 코어 갯수 또는 +1이 적당하다. cpu bound 프로그램을 구현을 하게 된다면!
IO bound는 어떻게 할까?
여러 상황에 맞춰서 적절한 스레드 수를 찾고, 컴퓨터의 상황에 맞춰 찾습니다. thread per request방식이라면? api 요청이 있을때 마다 전담 스레드를 사용하는 방식을 채택했다면?
요청이 올때마다, 일을 처리하는 형태인데, 이때 몇개의 스레드를 만들어 놓을까?
이럴 경우에 여러 상황을 고려해서 만드는 것이 필요합니다. 예상되는 트레픽의 패턴 등 여러가지 상황을 고려해야합니다.
Reference
[유튜브 쉬운코드] https://www.youtube.com/watch?v=qnVKEwjG_gM
'CS > 운영체제' 카테고리의 다른 글
동기화(Syncronization)를 왜 해야하는데!? (0) | 2022.02.08 |
---|---|
멀티 태스킹과 스레딩과 프로세싱[Multi tasking & Threading & Processing] (0) | 2022.02.08 |
페이징(paging)과 세그멘테이션(Segmentation) (0) | 2022.01.19 |
CPU 스케줄링(CPU Scheduling) (0) | 2022.01.18 |
교착상태(Dead Lock)란???(feat.기아상태) (0) | 2022.01.17 |