서론
시스템 프로그래밍 과제를 해결하며 CPU bound 와 I/O bound 작업에 대해 스레드의 개수를 변화시켜가며 총 소요시간을 관찰해보았다. CPU bound작업은 스레드의 개수가 하드웨어의 코어 개수와 비슷할때 성능이 가장 좋았고 스레드 개수가 늘어날수록 성능이 안좋아졌다. 한편, I/O 작업은 스레드가 너무 많지 않은 선에서 개수가 늘어날수록 성능이 개선되었다. 이러한 결과의 원인을 분석하고자 CPU&I/O Bound job의 특징을 정리하고 각 경우에 적정 쓰레드 개수를 어떻게 설정할지 조사해보았다.
1. CPU Bound job
1.1 CPU Bound 정의
- 주로 CPU의 성능에 총 소요시간이 결정되는 작업
- 즉, CPU의 코어 수나 클럭 속도 등이 소요 시간에 큰 영향을 미침
- ex) 대규모 수학 계산, 암호화/복호화 등
1.2 CPU Bound Job 의 특징
- I/O 작업 대기시간이 거의 없거나 전혀 없음
- 멀티스레딩의 효과가 제한적임
- 효율적인 알고리즘이 설계가 중요함
1.3 멀티스레드가 효과적이지 않은 이유
- CPU Bound 작업은 CPU 코어의 연산 능력에 의존하기 때문에, 생성된 스레드 수가 CPU 코어 수(하드웨어 스레드)를 초과하면 컨텍스트 스위칭으로 인한 오버헤드가 발생하여 성능이 저하됨
- 따라서 적절한 동시성을 유지할 수 있는 범위 내에서 스레드 개수를 제한하는 것이 중요함
1.4 CPU Bound Job 최적화 방법
- 작업에 적합한 효율적인 알고리즘 사용
- CPU Bound 작업은 일반적으로 하드웨어 코어 수에 맞춘 스레드 수를 사용하는 것이 가장 효율적임
- 스레드 수가 코어 수를 초과하면 컨텍스트 스위칭과 스레드 관리 오버헤드로 인해 성능이 저하될 수 있음
2. I/O Bound job
2.1 I/O Bound 정의
- 주로 디스크, 네트워크 등 입출력 대기시간에 의해 총 소요시간이 결정되는 작업
- 디스크, 네트워크, 데이터베이스와 같은 외부 자원에서 데이터를 읽거나 쓰는 작업
- ex) 파일작업, DB 작업, 스트리밍 등
2.2 I/O Bound Job 의 특징
- CPU 연산은 상대적으로 적으며, 작업의 대부분이 I/O 대기 상태인 작업
- I/O가 완료될 때까지 CPU가 기다리게 됨
- 이러한 유휴 시간을 활용하여 CPU가 다른 작업을 처리하는 것이 효과적임
2.3 멀티스레드가 효과적인 이유
- I/O 작업 중 발생하는 대기 시간 동안 CPU가 다른 작업을 처리하여 성능을 개선할 수 있음
- 하지만 스레드가 지나치게 많아지면 메모리 사용 증가와 컨텍스트 스위칭 비용으로 인해 오버헤드가 발생하므로 적절한 스레드 수 설정이 중요함
2.4 I/O Bound Job 최적화 방법
- 멀티스레드 또는 Non-blocking I/O를 활용
- I/O Bound의 경우 스레드 개수는 정해진 가이드라인이 없으며, 경험적으로 최적의 값을 찾아야 함
3. 결론
- 로직이 CPU Bound 인지, I/O Bound 인지 판단하고 이에 알맞은 최적화 기법을 사용하여 코드를 작성하는 습관을 갖도록 하자!
4. 참고자료https://engineerinsight.tistory.com/285#%F0%9F%92%8B%C2%A0%EC%A0%81%EC%A0%88%ED%95%9C%20%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98%20%EA%B0%9C%EC%88%98%EB%8A%94%3F-1
[OS] CPU Bound VS IO Bound: 스레드는 몇 개가 좋을까?
💋 CPU Burst VS IO Burst ✔️ Burst 어떤 현상이 짧은 시간 안에 집중적으로 일어나는 일 계속되는 작업 ✔️ CPU Burst 프로세스가 CPU에서 한 번에 연속적으로 실행되는 시간 메모리에 올라가 있는 프
engineerinsight.tistory.com
[Thread] 3. 일반 스레드 vs 스레드풀 (I/O, CPU 성능 비교)
스레드 vs 스레드풀 (성능 비교)📌 서론이전 1,2탄 포스팅에서 '일반 스레드'와 '스레드풀'을 사용했을 때 I/O, CPU 작업을 진행하면 어떤 성능을 보여줄지 테스트를 진행했다. 테스트를 통해 I/O 작
curiousjinan.tistory.com
'CS' 카테고리의 다른 글
OS 파일 시스템: 파일 테이블과 I/O 성능 개선 기법 (0) | 2024.12.30 |
---|---|
스레드 기본 개념 (0) | 2024.12.23 |
OS가 관리하는 Clock & Hardware Clock (0) | 2024.12.15 |
표준 I/O 라이브러리의 등장 배경: 시스템 콜 성능 최적화 (1) | 2024.12.08 |
OS의 I/O Device 추상화 & Block I/O & Non-Block I/O: Multiplexing (0) | 2024.12.01 |