반응형
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 쪽에 부하가 걸리진 않을지 고려 필요
디비에서 전체 검색을 한다면, 하고나서 서버에 올릴 때 메모리 이슈 없을지 고려필요 -> 파일로? 그렇다면 압축은 어떻게?
728x90
반응형
'architecture > knowledge' 카테고리의 다른 글
[개발문화] 유지보수하기 좋은 코드를 구현하는 개발 문화 어떻게 만들 것인가? (0) | 2023.04.24 |
---|---|
[http] http 기본 지식 (0) | 2022.05.19 |
웹브라우저 요청 흐름 (0) | 2022.05.19 |
[webwork] struts? webwork? xwork? (0) | 2022.01.17 |