home
자바
home

4. 스레드란?

톰캣에서 프로세스가 실행될 때 생성되는 하나의 단위
그렇다면, 웹서버(톰캣)과 Netty의 스레드 처리 방식에 대해 알아보자

톰캣

톰캣은 100개의 작업을 실행하려면, 100개의 스레드가 필요하다.
블로킹이 포함된 여러 작업을 동시에 처리하기 위해 수백개의 스레드를 운용한다.
요청 수락 ⇒ 요청 읽기 ⇒ 응답 쓰기 ⇒ 사용자에게 응답 전송 (각 단계에서 I/O 발생)
톰캣의 스레드는 IO 작업을 직접 대기하며 작업을 하나하나 실행
하나의 요청을 하나의 스레드가 처리

Netty

스레드 1개가 여러 작업을 처리하기 때문에 소수의 스레드만을 필요로 한다.
오래 걸리는 것은 대기 작업이다.
개발자가 블로킹을 유발하는 코드를 짜지 않는 한 블로킹이 발생하지 않는다. 대기가 발생하면 OS에 대기를 위임한다.
이벤트 루프: 스레드는 이벤트를 처리하고 이벤트 루프로 돌아와 다른 이벤트가 있는지 확인
요청 수락 ⇒ 요청 읽기 ⇒ 응답 쓰기 ⇒ 사용자에게 응답 전송 (각 단계에서 발생한 대기는 OS에 위임하고 다른 이벤트를 처리함)
블로킹을 짜놓은 코드를 실행하게 된다면 ? ⇒ 해당 블로킹 유발 시간 동안 아무것도 처리하지 못하게 된다. (블로킹 코드를 짜지말자)
Netty는 왜 소수의 스레드만 사용할까?
스레드를 너무 많이 생성하면 컨텍스트 스위칭 비용 등이 발생하기 때문에 Netty는 물리적인 스레드와 같은 개수의 스레드만을 사용한다.