톰캣에서 프로세스가 실행될 때 생성되는 하나의 단위
그렇다면, 웹서버(톰캣)과 Netty의 스레드 처리 방식에 대해 알아보자
톰캣
•
톰캣은 100개의 작업을 실행하려면, 100개의 스레드가 필요하다.
•
블로킹이 포함된 여러 작업을 동시에 처리하기 위해 수백개의 스레드를 운용한다.
•
요청 수락 ⇒ 요청 읽기 ⇒ 응답 쓰기 ⇒ 사용자에게 응답 전송 (각 단계에서 I/O 발생)
◦
톰캣의 스레드는 IO 작업을 직접 대기하며 작업을 하나하나 실행
◦
하나의 요청을 하나의 스레드가 처리
Netty
•
스레드 1개가 여러 작업을 처리하기 때문에 소수의 스레드만을 필요로 한다.
•
오래 걸리는 것은 대기 작업이다.
•
개발자가 블로킹을 유발하는 코드를 짜지 않는 한 블로킹이 발생하지 않는다. 대기가 발생하면 OS에 대기를 위임한다.
•
이벤트 루프: 스레드는 이벤트를 처리하고 이벤트 루프로 돌아와 다른 이벤트가 있는지 확인
•
요청 수락 ⇒ 요청 읽기 ⇒ 응답 쓰기 ⇒ 사용자에게 응답 전송
(각 단계에서 발생한 대기는 OS에 위임하고 다른 이벤트를 처리함)
•
블로킹을 짜놓은 코드를 실행하게 된다면 ? ⇒ 해당 블로킹 유발 시간 동안 아무것도 처리하지 못하게 된다. (블로킹 코드를 짜지말자)
Netty는 왜 소수의 스레드만 사용할까?
•
스레드를 너무 많이 생성하면 컨텍스트 스위칭 비용 등이 발생하기 때문에 Netty는 물리적인 스레드와 같은 개수의 스레드만을 사용한다.


