멀티스레드 - CPU 코어에 맞는 쓰레드 풀 개수

희운·2025년 7월 18일

멀티스레드 (java)

목록 보기
2/5

CPU 바운드 작업 VS I / O 바운드 작업

각각의 스레드가 하는 작업은 크게 2가지로 구분할 수 있다.

  • CPU-바운드 작업

    • cpu의 연산 능력을 많이 요구하는 작업을 의미한다.
    • 이러한 작업은 주로 계산, 데이터 처리, 알고리즘 실행 등 cpu의 처리속도가 작업 완료 시간을 결정하는 경우다.
    • 예시 : 복잡한 수학 연산, 데이터 분석, 비디오 인코딩, 과학적 시뮬레이션 등
  • I / O 바운드 작업

    • 디스크 , 네트워크, 파일 시스템 등과 같은 입출력 작업을 많이 요구하는 작업을 의미한다.
    • 이러한 작업은 I/O 작업이 완료될 때가지 대기 시간이 많이 발생하며 , CPU 는 상대적으로 대기 상태에 있는 경우가 많다. 쉽게 이야기 해서 스레드가 CPU 를 사용하지 않고 I /O 작업이 완료될 때 까지 대기한다.
    • 예시 : 데이터베이스 쿼리 처리 , 파일 읽기 / 쓰기, 네트워크 통신, 사용자 입력 처리 등.

    현대 웹 어플리케이션 서버는 주로 CPU 바운드 작업 보다는 I / O 바운드 작업이 많다.
    예를들어 백앤드 개발자의 경우 주로 웹 애플리케이션 서버를 개발하는데, 스레드가 1- 10000까지 더하는 CPU 연산이 필요한 작업보다는, 대부분 사용자의 입력을 기다리거나, 데이터베이스를 호출하고 그 결과를 기다리는 등, 기다리는 일이 많다. 쉽게 이야기 해서 스레드가 CPU 를 사용하지 않는 I / O 바운드 작업이 많다는 뜻이다.

    일반적인 자바 웹 애플리케이션 서버의 경우 사용자가 요청 하나를 처리하는데 1개의 스레드가 필요하다.
    사용자 4명이 동시에 요청하면 4개의 스레드가 작동하는 것이다. 그래야 4명의 사용자의 요청을 동시에 처리 할 수 있다.

    사용자의 요청 하나를 처리하는데, 스레드는 CPU 를 1% 정도 사용하고 있고 , 대부분 데이터베이스 서버에 어떤 결과를 조회하면서 기다린다고 가정하자. 이대 스레드는 CPU 코어 즉 CPU 를 거의 사용하지 않고 대기한다. 바로 이것이 I / O 바운드 작업이 많다는 것이다.
    여기서 1% 라는 가정을 한 이유는 스레드는 I / O 작업이 많기 때문이다.


정리하면 스레드의 숫자는 CPU-바운드 작업이 많은가, 아니면 I/O-바운드 작업이 많은가에 따라 다르게 설정해야 한다.

CPU-바운드 작업: CPU 코어 수 + 1개
CPU를 거의 100% 사용하는 작업이므로 스레드를 CPU 숫자에 최적화

I/O-바운드 작업: CPU 코어 수 보다 많은 스레드를 생성, CPU를 최대한 사용할 수 있는 숫자까지 스레드 생성 CPU를 많이 사용하지 않으므로 성능 테스트를 통해 CPU를 최대한 활용하는 숫자까지 스레드 생성
단 너무 많은 스레드를 생성하면 컨텍스트 스위칭 비용도 함께 증가 - 적절한 성능 테스트 필요

profile
기록하는 공간

0개의 댓글