반응형

1. IO Bound (Input/Output Bound)

  • 정의: 프로그램의 처리 속도가 입출력(IO) 작업에 의해 제한되는 경우.
  • 예시:
    • 파일 읽기/쓰기
    • 데이터베이스 접근
    • 네트워크 통신 (REST API, 소켓 통신 등)
  • 특징:
    • CPU는 대부분 대기 상태
    • 비동기 처리(Async), 논블로킹 IO, 캐시 활용 등을 통해 성능 개선 가능

2. CPU Bound

  • 정의: 프로그램의 처리 속도가 CPU 연산 능력에 의해 제한되는 경우.
  • 예시:
    • 복잡한 수학 계산
    • 압축, 암호화
    • 이미지/비디오 처리
  • 특징:
    • CPU 사용률이 매우 높음
    • 멀티스레딩, 병렬 처리(parallelism), SIMD 등으로 성능 개선 가능

IO Bound는 스레드가 많을수록 유리

  • 이유:
    • IO 작업은 대부분의 시간을 대기(Waiting) 상태로 보냄 (예: 파일 읽기, DB 쿼리 응답 기다림)
    • 대기 중인 스레드는 CPU를 거의 사용하지 않음
    • 따라서 여러 스레드가 IO를 동시에 처리해도 CPU 병목이 생기지 않음
  • 결과:
    • 스레드 수를 CPU 코어 수보다 훨씬 많이 늘려도 시스템에 부담이 덜함
    • 예: 웹 서버는 수천 개의 연결을 동시에 처리하기 위해 수천 개의 스레드를 유지할 수 있음 (혹은 비동기 처리 사용)

CPU Bound는 스레드가 너무 많으면 오히려 역효과

  • 이유:
    • CPU Bound 작업은 대부분의 시간을 계산(Compute)에 사용
    • 즉, CPU를 계속 점유하므로, 코어 수를 초과하는 스레드는 결국 경쟁, 문맥 교환(context switch) 발생
    • 이로 인해 오히려 성능 저하가 발생할 수 있음
  • 적절한 전략:
    • 스레드 수를 CPU 코어 수에 맞추거나 약간만 초과 (예: 4 코어 → 4~6개 스레드)
    • 병렬 처리 시 ForkJoinPool, parallelStream, Executors.newFixedThreadPool() 등 사용

코어수는 2개 스레드를 코어수+1 정도로 스레드 수를 줄여서 context switching에 드는 비용을 줄인다

 

압축 후 비동기로 업로드할 때 100개가 동시가 갈 경우 검수API 쪽에 부하가 걸리진 않을지 고려 필요

디비에서 전체 검색을 한다면, 하고나서 서버에 올릴 때 메모리 이슈 없을지 고려필요 -> 파일로? 그렇다면 압축은 어떻게?

불변객체
or record

 

728x90
반응형

+ Recent posts