[운영체제] CPU-Bound vs I/O-Bound

이재민·2024년 4월 28일

운영체제

목록 보기
3/3

자신의 애플리케이션을 설계를 하기 위해서는 작업이 어떠한 범주에 속하는지 알아야한다.
일반적으로 CPU Bound, I/O Bound 두 가지 범주로 나눌 수 있다. 해당 용어들은 작업이 시스템 리소스를 활용하는 방법을 나타내며 이를 이해하는 것은 효율적이고 반응성이 뛰어난 시스템을 설계하는데 필수이다.

CPU-Bound

CPU-Bound 용어는 작업이나 프로그램의 실행이 CPU에 크게 의존하는 것을 말한다.

CPU-Bound 작업은 상당한 양의 계산 리소스가 필요한 작업이다. 이러한 작업에는 CPU를 많이 사용하는 복잡한 계산, 데이터 처리 및 알고리즘 작업을 수행하는 작업이 포함된다.
CPU-Bound 작업에는 CPU 버스트가 적고 긴 경향이 있다. CPU 버스트는 일반적으로 CPU에서 작업을 실행하는 데 걸리는 시간을 나타낸다. 따라서 리소스 낭비를 방지하기 위해 이러한 작업에는 항상 낮은 우선순위를 할당하는 것이 좋다.

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

  • CPU Burst
    프로세스가 CPU에서 한 번에 연속적으로 실행되는 시간을 의미한다.

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

리소스 사용

이러한 작업은 CPU를 많이 사용하지만 I/O 작업이 포함되지 않을 수 있다.

동시성

시스템에 CPU 코어가 여러 개 있는 경우 병렬 처리의 이점을 얻을 수 있는 경우가 많다.
multi-threading 또는 multi-processing을 활용하여 CPU에 바인딩된 작업을 여러 코어에 분산한다.

적절한 스레드 개수

Java Concurrency in Practice 책의 저자 중 한명인 Goetze 가 말하기를 CPU 개수 + 1 또는 Core 개수 + 1 라고 한다.

I/O-Bound

I/O-Bound 작업은 입,출력 작업이 완료될 때까지 기다리는 데 상당한 시간을 소비하는 작업이다.

이러한 작업에는 데이터베이스, 파일 시스템, 네트워크 요청 등과 같이 외부 리소스와의 상호 작용이 포함된다.
I/O-Bound 작업에는 일반적으로 외부 소스에서 데이터를 읽거나 쓰는 작업이 포함된다.

리소스 사용

I/O-Bound 작업은 CPU를 덜 소비하지만 I/O 작업 측면에서 리소스를 많이 사용한다.

동시성

이러한 작업은 I/O가 완료되기를 기다리는 동안 다른 작업에 제어권을 양보할 수 있으므로 비동기 프로그래밍에 적합하다.

적절한 스레드 개수

정해진 가이드라인은 따로 없다. 하드웨어 스펙에 맞춰 적절한 스레드 개수를 찾아야 한다.
Stress test를 통해 최적의 스레드를 구하는 것도 방법이다.

결론

CPU-Bound, I/O-Bound에 대한 작업 유형을 식별하는 것은 자신의 애플리케이션의 전반적인 성능 향상을 이끌 수 있으며 응답성이 높은 효율적인 시스템을 구축할 수 있게 된다.

참고
https://www.youtube.com/watch?v=qnVKEwjG_gM&list=PLcXyemr8ZeoQOtSUjwaer0VMJSMfa-9G-&index=3
https://www.baeldung.com/cs/cpu-io-bound

profile
문제 해결과 개선 과제를 수행하며 성장을 추구하는 것을 좋아합니다.

0개의 댓글