동기 + Blocking 방식으로 처리된다.
Spring MVC로 구성된 서버에 여러 요청이 들어오면 **사용 가능한 스레드 수만큼만 요청을 처리
**할 수 있다.
Blocking I/O처리를 할 때 해당 스레드는 아무것도 하지 않고 대기 상태가 된다.
Thread의 대기 시간이 길면 많은 요청을 빠르게 처리할 수 없고 병목 현상이 발생할 수 있다.
**Core수 대비 너무 많은 Thread Pool
**을 만들게 되면 **Context Switching에 대한 오버헤드
**가 발생한다.
Thread의 대기 시간을 줄이기 위해 Reactive Programming이 개발됐다.
비동기 + Non-Blocking 방식으로 처리된다.
Node.js처럼 이벤트 루프가 돌기 때문에 Reactive Programming이 가능하다.
**모든 코드가 Non-Blocking 방식
**으로 동작해야 의미가 있다.
하나라도 Blocking 방식으로 동작하면 오히려 효율이 더 떨어짐