기억의 실마리
2022. 11. 26. 23:21

1. Blocking 통신 처리방식

클라이언트가 서버와 연결 됐을때 서버에서 스레드를 생성하고 클라이언트에게

스레드를 할당해준다. 클라이언트에 할당된 스레드는 요청을 체크하는 루프에 들어가게되어

스레드가 죽지않고 블로킹되어있는 상태가 된다. 이 후 클라이언트로부터 요청이 들어오면

블로킹 되어있던 스레드가 요청을 처리하고 처리가 끝나면 다시

요청을 체크하는 루프로 들어가게된다. 이렇게 한 클라이언트에 하나의 스레드를

전담으로 할당시켜주는 방식이다. 그렇기 때문에 동기식처리(직렬 처리)만 가능하다.

 

 

2. Non-Blocking 통신 처리방식

클라이언트가 서버와 연결되면 블로킹 방식이 아닌

요청을 리슨하는 eventLoop서버가 요청을 Event Queue에 넣는다.

Event Queue에 들어온 요청은 스레드풀에 담겨져 있던 스레드들이 할당받아

요청을 처리하고 클라이언트에 응답하게 된다.

요청을 처리하는 스레드는 하나의 클라이언트만을 전담하지 않고

어떤 요청이든 간에 Event Queue에 들어온 요청을 하나씩 하나씩 가져가

처리하기 때문에 비동기식처리(병렬 처리)가 가능하다.

 

 

Why Non-Blocking?

Blocking통신 처리방식은 각각 하나의 스레드를 전담마크식으로

클라이언트에게 할당시켜 주기 때문에 1000만명의 유저가 있다고

가정할 경우 1000만개의 스레드가 계속해서 대기를 하거나 요청을

처리하게 된다.

 

하지만 Non-Blocking의 경우 스레드 1000만개를 미리 만드는 것이 아니라

필요에 의해서 만들어진 만큼의 스레드만 스레드풀에 존재하고

1000만명의 유저가 동시 다발적으로 요청을 보낼 확률은 아주 낮기때문에

Blocking통신 처리방식에 비해 스레드의 총량이 획기적으로 차이가 난다.

그로 인해서 서버의 부담이 줄어들기 때문에 근래에는 Non-Blocking을

더 많이 채택하게 된 것이다.

 

'Computer Science > Network' 카테고리의 다른 글

[ TCP / UDP ] 특징과 차이점  (0) 2022.11.26