Home [CS] CPU Bound와 IO Bound
Post
Cancel

[CS] CPU Bound와 IO Bound

CPU Burst와 IO Burst

  • CPU Burst는 특정 시간동안 CPU 명령을 실행하는 것을 말합니다.
  • IO Burst는 특정 시간동안 I/O요청 및 기다리는 것을 말합니다.

OS에서 실행되는 프로세스는 CPU Burst와 IO Burst의 연속으로 동작합니다. 예를 들어 여러분의 브라우저는 대략 아래처럼 동작할겁니다.

-1234
BurstIOCPUIOCPU
비고html요청html 파싱, 렌더링html요청html 파싱, 렌더링

물론 실제로는 여러 process, thread가 더 복잡하게 얽혀있고 다른 방식으로 돌아가겠지만 설명을 위해 단순하게 표현해보았습니다. 브라우저는 html을 서버에 요청하고, 받기 까지 기다렸다가 받았으면 파싱하고 렌더링해서 보여줄겁니다.

이렇게 프로세스는 결국 IO와 CPU Burst를 번갈아가며 동작합니다.

CPU Bound와 IO Bound 프로세스

CPU Bound 프로세스는 CPU Burst가 상대적으로 더 많은 프로세스를 의미합니다. 영상 편집 프로그램이나 과학 데이터 계산 프로그램등이 있습니다. IO 작업보다 CPU로 연산하는 시간이 더 많습니다.

IO Bound 프로세스는 IO Burst가 상대적으로 더 많은 프로세스를 의미합니다. 다운로드를 받는 프로그램같이 IO작업이 많은 프로그램들이 여기에 속합니다.

Scheduling

IO Burst 타임에는 CPU가 그 프로세스를 처리하지 않습니다. IO응답이 올 때 까지 기다려야 하니까요. (물론 프로세스의 비동기 작업을 통해 IO 응답을 기다리는 중에도 같은 프로세스가 실행될 수 있긴합니다.) 기본적으로는 CPU를 효율적으로 사용하기위해 IO작업중에는 다른 프로세스를 처리합니다. 다른 프로세스를 선택하는 기준은 스케쥴링 방식에 따라 다릅니다. 스케쥴링을 잘못하면 자칫 CPU idle time이 길어질 수 있습니다. 그래서 적절한 스케쥴링이 필요합니다.

Context Switching

위에서 스케쥴링을 언급하면서 중간에 다른 프로세스를 처리하는 경우가 생길 수 있다고 했습니다. 다른 프로세스를 처리하기 위해서 CPU에서는 현재 상태를 전환하는 context switching이 발생합니다. 이 작업은 오버헤드가 커서 가능한 적게 일어날 수록 좋습니다.

그런데 만약 CPU Core가 2개인데 4개의 thread가 실행되면 어떨까요?

각 2개의 core는 2개의 thread를 처리할겁니다. 동시에 내부적으로 context switching이 계속 발생하겠죠. 그래서 core와 thread수는 가능한 맞춰주면 좋습니다.

This post is licensed under CC BY 4.0 by the author.

[Spring] Redis 사용하기 (1) - 좋아요 기능 성능 개선

[Spring] 컨트롤러에 사용자 인증 붙이는 방법