버스트 (Burst)
- 특정 현상이 짧은 시간 동안 집중적으로 일어나는 것을 의미한다.
CPU 버스트 (CPU Burst)
- 프로세스가 CPU에서 연속적으로 작업을 수행하는 시간의 길이를 의미한다. 이 시간 동안 CPU는 프로세스의 연산 작업을 처리하며, CPU의 연산 집약적인 작업이 많을수록 CPU 버스트가 길어진다.
IO 버스트 (IO Burst)
- IO 버스트는 프로세스가 I/O 작업(예: 디스크 읽기/쓰기, 네트워크 통신 등)을 요청하고 그 결과를 기다리는 시간을 의미한다. 이 동안 CPU는 다른 작업을 수행할 수 있으며, 프로세스는 I/O 작업의 완료를 기다린다.
프로세스의 실행 주기
- 프로세스의 실행 주기는 CPU 버스트와 IO 버스트의 반복으로 이루어진다. 프로세스는 CPU에서 작업을 수행하다가 I/O 작업을 요청하고, I/O 작업이 완료되면 다시 CPU에서 작업을 수행하는 구조이다.
CPU 버스트 길이에 따른 빈도
- 대부분의 프로세스는 CPU에서 연속적으로 작업을 수행하는 시간이 짧다.
- 많은 프로세스는 CPU 버스트가 8ms(밀리초) 이내에 끝나며, 이러한 짧은 CPU 버스트 후에 I/O 작업으로 넘어가는 경우가 많다.
CPU Bound 프로세스
- CPU 자원 사용이 많은 프로세스를 의미한다. 연산 집약적인 작업이 많아 CPU가 자주 사용되며, CPU의 성능이 프로세스의 성능을 결정짓는 주요 요소이다.
- 동영상 편집 프로그램, 머신러닝 모델 학습, 대규모 수치 연산 등이 CPU Bound 프로세스의 예이다. 이러한 프로그램들은 멀티코어 CPU를 활용하는 것이 성능 향상에 도움이 된다.
IO Bound 프로세스
- I/O 작업이 많은 프로세스를 의미한다. CPU보다는 I/O 작업의 대기 시간에 많은 시간이 소요되며, CPU는 상대적으로 유휴 상태일 때가 많다.
- 일반적인 백엔드 API 서버, 파일 서버, 데이터베이스 서버 등이 IO Bound 프로세스의 예이다. 이러한 시스템은 많은 수의 I/O 작업을 처리해야 하므로, I/O 작업을 비동기적으로 처리하거나 적절한 스레드 수를 사용하는 것이 중요하다.
CPU Bound 프로그램에서 적절한 스레드 수
- Goetz는 적절한 스레드 수를
CPU의 개수 + 1
로 추천한다. 이는 CPU 자원을 최대한 활용하고, 스레드 간의 경합을 줄여서 성능을 최적화할 수 있도록 돕기 때문이다.CPU의 개수 + 1
스레드 수는 일반적으로 CPU의 코어 수에 기반하여 병렬 처리를 효율적으로 진행할 수 있는 수치로 여겨진다.
IO Bound 프로그램에서 적절한 스레드 수
- IO Bound 프로그램의 경우, I/O 작업이 자주 발생하므로 스레드 수를 동적으로 조절하거나 많은 수의 스레드를 사용하는 것이 중요하다. 많은 스레드를 사용하여 I/O 대기 동안 CPU가 다른 작업을 처리하도록 하면 시스템 전체의 성능을 개선할 수 있다. 그러나 스레드 수를 지나치게 많이 설정하면 컨텍스트 스위칭 오버헤드가 증가할 수 있으므로 적절한 균형이 필요하다.
728x90
'CS' 카테고리의 다른 글
[CS] 프로세스/스레드 상태 변화 (0) | 2024.08.11 |
---|---|
[CS] Deadlock (0) | 2024.08.11 |
[CS] 동기화 (0) | 2024.08.09 |
[CS] 컨텍스트 스위칭 (0) | 2024.08.09 |
[CS] 프로세스와 스레드 (1) | 2024.08.09 |