[CS] CPU-bound VS I/O-bound

sing sang song·2023년 5월 6일
0

CS

목록 보기
7/8
post-thumbnail

CPU-bound

컴퓨터 프로세스 또는 프로그램이 주로 CPU의 처리 능력에 의해 성능이 제한되는 상황을 의미한다.
여기에서 CPU는 다른 자원보다 더 빨리 작업을 처리해야 하는데, 그런 자원이 부족하면 병목 현상이 발생한다.

CPU-bound 프로세스는 계산이 많은 작업을 하고, 다른 자원(디스크, 메모리, 네트워크)을 별로 사용하지 않는다. 이런 상황을 해결하려면 알고리즘을 개선하거나 병렬 처리를 사용하거나, 더 좋은 CPU로 업그레이드를 해야한다. 그러므로 프로그래머는 코드 작성시에 성능 관련 요소를 고려해야 하는 것이다.

CPU-bound 프로세스 특징

  1. 프로세스가 계산 집약적인 작업을 수행한다. 예를 들어, 복잡한 수학 연산이나 대량의 데이터를 처리하는 알고리즘을 실행하는 경우 CPU-bound 상태가 될 수 있다.
  2. 프로세스가 CPU를 많이 사용하며 다른 자원에 대한 요청이 상대적으로 적다. 이것은 디스크 I/O, 메모리, 네트워크 등의 자원 사용이 최소화된 상태이다.
  3. CPU 사용률이 높은 경우 프로세스의 성능 향상을 위해 CPU 클럭 속도를 높이거나 병렬 처리를 이용하는 것이 도움이 된다.

CPU-bound 해결법

  1. 알고리즘 최적화 : 프로세스가 수행하는 작업을 더 효율적으로 처리할 수 있는 방법을 찾아 알고리즘을 개선한다.
  2. 병렬 처리 : 프로세스를 여러 스레드 또는 프로세스로 나누어 동시에 수행하게 함으로써 전체 작업 시간을 줄인다.
  3. 하드웨어 업그레이드 : 더 높은 성능의 CPU로 업그레이드 하거나 추가적인 CPU 코어를 사용할 수 있는 시스템으로 전환한다.

I/O-bound

프로그램이나 시스템의 성능이 입력과 출력 작업에 의해 제한되는 상태를 더 자세히 이해하기 위해서는, 컴퓨터 시스템의 여러 구성요소와 상호 작용에 대해 알아봐야 한다. 컴퓨터 시스템은 크게 CPU, 메모리, 스토리지 및 입출력 장치로 구성되어 있다.

I/O-bound 특징

I/O-bound 상태에서는 CPU의 처리 능력과 메모리의 속도가 충분히 빠르더라도 입출력 작업이 느리기 때문에 전체 시스템 성능이 제한된다. 이는 다음과 같은 상황에서 발생할 수 있다.
1. 디스크에서 데이터를 읽거나 쓰는 작업이 느릴때
2. 네트워크를 통해 데이터를 전송하는 작업이 느릴 때
3. 사용자 입력(키보드, 마우스)처리가 느릴 때

I/O-bound 해결법

  1. 동시성(concurrency) 이용 : 여러 I/O 작업을 동시에 처리하여 시스템의 전체 성능을 개선할 수 있다. 병렬 처리, 스레드, 비동기 I/O 등의 기술을 사용하여 동시성을 구현할 수 있다.
  2. 입출력 장치 성능 향상 : 빠른 스토리지(SSD)로 업그레이드하거나, 고속 네트워크 장비를 사용하여 I/O 작업의 속도를 높일 수 있다.
  3. I/O 작업 최적화 : 어플리케이션의 입출력 작업을 효율적으로 처리하기 위해 프로그래밍 기법을 최적화 할 수 있다. 예를 들어, 데이터 압축, 효율적인 알고리즘 사용, 버퍼링 등의 기법을 적용하여 I/O 작업의 부하를 줄일 수 있다.
  4. I/O 스케줄링 및 우선순위 관리 : I/O 작업의 우선순위를 조절하여 전체 시스템의 성능을 개선할 수 있다. 이는 운영체제 수준에서 I/O 스케줄링 알고리즘을 사용하거나, 애플리케이션에서 요청에대한 우선순위를 조절하는 방법으로 구현할수 있다.
I/O 스케줄링 및 우선순위 관리는 전체 시스템 성능을 최적화하기 위해 I/O 작업의 순서와 우선순위를 조절하는 방법입니다. 이는 운영 체제 수준에서 I/O 스케줄링 알고리즘을 사용하거나, 애플리케이션에서 요청에 대한 우선순위를 조절하는 방법으로 구현할 수 있습니다.
운영 체제 수준의 I/O 스케줄링 알고리즘 예:

FCFS (First-Come, First-Served): I/O 요청이 도착한 순서대로 처리하는 가장 단순한 방식입니다. 하지만, 이 방식은 특정 요청이 긴 시간 동안 대기할 수 있어 성능이 저하될 수 있습니다.

SSTF (Shortest Seek Time First): 현재 디스크 헤드 위치에서 가장 가까운 요청부터 처리하는 방식으로, 탐색 시간을 최소화합니다. 이 방식은 대체로 성능이 좋지만, 헤드 위치에 따라 일부 요청이 계속 대기할 수 있는 "기아" 현상이 발생할 수 있습니다.

SCAN (Elevator Algorithm): 디스크 헤드가 한 방향으로 움직이면서 차례대로 요청을 처리하고, 끝에 도달하면 다시 반대 방향으로 움직이면서 요청을 처리하는 방식입니다. 이 알고리즘은 균일한 처리 시간을 보장하며, 기아 현상을 예방할 수 있습니다.

C-SCAN (Circular SCAN): SCAN과 유사하지만, 끝에 도달한 후 처음으로 돌아가며 요청을 처리하는 방식입니다. 이 알고리즘은 처리 시간의 분산을 줄이고, 모든 요청에 대해 공평한 처리 기회를 제공합니다.

애플리케이션 수준의 우선순위 관리 예:

QoS (Quality of Service) 기반 우선순위 관리: 네트워크 트래픽에서 특정 서비스나 요청에 대해 보장된 성능을 제공하기 위해 우선순위를 조절합니다. 예를 들어, 실시간 음성 통화나 비디오 스트리밍과 같은 민감한 작업에 높은 우선순위를 부여할 수 있습니다.

사용자 정의 우선순위: 애플리케이션에서 사용자가 직접 설정할 수 있는 우선순위를 제공하는 방식입니다. 사용자는 중요한 작업에 높은 우선순위를 할당하고, 상대적으로 중요도가 낮은 작업에 낮은 우선순위를 할당할 수 있습니다. 예를 들어, 대용량 파일 다운로드보다 웹 브라우징이나 이메일 작업에 우선순위를 높게 설정할 수 있습니다.

동적 우선순위 조절: 시스템의 상태에 따라 자동으로 우선순위를 조절하는 방식입니다. 예를 들어, 시스템이 과부하 상태에 이르면, 비판적인 작업에 높은 우선순위를 할당하고, 비판적이지 않은 작업을 일시 중단하거나 낮은 우선순위로 조절할 수 있습니다.

어플리케이션 기반 우선순위: 애플리케이션 자체에서 중요한 작업에 대한 우선순위를 높게 설정할 수 있습니다. 예를 들어, 데이터베이스 시스템에서 긴급한 트랜잭션 처리를 위해 일반적인 조회 작업보다 높은 우선순위를 부여할 수 있습니다.

I/O 스케줄링 및 우선순위 관리는 시스템의 성능과 안정성을 최적화하는 데 중요한 역할을 합니다. 이를 통해 전체 시스템의 효율성을 높이고 사용자의 경험을 개선할 수 있습니다. 각각의 방법은 상황과 요구에 따라 적절하게 선택되어야 하며, 때로는 여러 기법이 결합되어 사용되기도 합니다.
profile
세상을 선명하게

0개의 댓글