CS

CPU & I/O Bound Job: 최적의 스레드 개수

컴공오지마라 2024. 11. 21. 17:55

서론

시스템 프로그래밍 과제를 해결하며 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

 

https://curiousjinan.tistory.com/entry/thread-pool-vs-general-thread-io-cpu-performance-comparison#%201.%20%EC%9D%BC%EB%B0%98%20%EC%8A%A4%EB%A0%88%EB%93%9C%20vs%20%EC%8A%A4%EB%A0%88%EB%93%9C%ED%92%80%20%3A%20I%2FO%20%EC%9E%91%EC%97%85-1

 

[Thread] 3. 일반 스레드 vs 스레드풀 (I/O, CPU 성능 비교)

스레드 vs 스레드풀 (성능 비교)📌 서론이전 1,2탄 포스팅에서 '일반 스레드'와 '스레드풀'을 사용했을 때 I/O, CPU 작업을 진행하면 어떤 성능을 보여줄지 테스트를 진행했다. 테스트를 통해 I/O 작

curiousjinan.tistory.com