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