컨텍스트 스위칭
스레드를 많이 만들어 요청을 많이 처리하려해도 문제는 있다. 바로 컨텍스트 스위칭. 동시 실행되는 스레드 증가하면 컨텍스트 스위칭 소요 시간도 증가한다.
컨텍스트 스위칭은 금방 끝나지만 동시에 실행되는 스레드 많아지면 CPU 효율에 영향준다.
운영체제는 여러 스레드를 번갈아가며 CPU에 할당한다. 한 스레드를 짧게 실행하도 다음꺼 실행하는 식. 스레드 전환하려면 현재 실행 중 스레드 상태를 기록하고 다음에 실행할 스레드 상태 정보 불러와야함. 이걸 컨텍스트 스위칭
마이크로 단위로 실행되지만 스위칭 동안 CPU는 실질적 작업을 안함. 그래서 동시에 실행되는 프로세스, 스레드 많아지면 스우칭에 소요되는 시간도 무시하기 힘들어짐
정리하자면, 트래팩 증가시 2가지 이유로 자원 효율 떨어짐
- IO 대기와 컨텍스트 스위칭에 따른 CPU 낭비
- 요청마다 스레드 할당함으로써 메모리 사용량 높음
여기까지 보면 왜 톰캣처럼 스레드를 할당하는 서버를 사용하는 지궁금할 수 있다. 서버는 DB, API 호출 같은 입출력 처리 많고 이는 톰캣 같은거 쓰면 CPU, 메모리 낭비가 심하다는 뜻이므로.
그런데 다수의 서비스는 서버의 자원낭비 걱정할 필요없다. CPU, Memory에 영향줄만큼 트래픽이 없기 때문. 수백만, 수천만 정도는 되야됨.