Node JS의 Non Blocking(논 블로킹)

 안녕하세요. 이번 포스트는 저번의 싱글스레드의 연장선이라고 보시면 됩니다. 참고 하실분은 이전 글 링크를 참고 해 주시기 바랍니다.


Node JS의 싱글스레드 - 1

Node JS의 싱글스레드 - 2


이번 글의 주제는 Non Blocking에 대한 것입니다. 그런데 Non Blocking이전에 일단 Blocking에 대해서 알아야 합니다.



위 그림은 블로킹 상태를 말하는 것입니다. 하나의 스레드에 하나의 작업만 가능하기 때문에 다음 작업을 진행하기 위해서는 현재의 작업이 마무리 되야 되는 것입니다.



 하지만 논 블로킹 방식은 요청을 받으면 바로 진행을 하고 끝나는 순서로 Client에 응답을 합니다. 
저번 싱글스레드 주제로 이야기 할때 이상한 점이 있었습니다. 점원은 한명인데 어떻게 동시에 여러잔의 커피를 만드는 것에 대한 이야기 입니다. 직원으로 이야기 하면 어렵지만 Node JS에서 이야기가 달라집니다.

 서버에서 CPU가 맡은 작업과 IO가 맡은 작업이 있습니다. 이때 Client에서 요청이 들어오면 CPU에서 연산을 하고 완료가 되면 이를 IO쪽으로 넘김니다. 이후 IO에서도 작업이 완료되면 다시 CPU로 보내서 마무리 하고 응답을 하게 됩니다. 


 NodeJS은 싱글 스레드이기 때문에 하나의 스레드로 모든 요청 작업을 감당해야 합니다. 즉 위의 그림처럼 3개의 Client의 요청이 왔을때 요청 순서 및 작업이 끝나는 순서대로 응답을 보내게 됩니다. 


즉 이처럼 논 블로킹을 이용하여 Node JS서버는 상당한 효율을 발휘합니다. 하지만 고사양의 연산이 필요한 어플리케이션 인 경우 CPU에서 다른 연산을 막을수 있기 때문에 효율이 좋지 않다. 즉 상황에 맞게 사용해야 하는 것이다. 







댓글

이 블로그의 인기 게시물

Lesson 12_1 프로퍼티 노드(Property Node)

DAQ로 전압 측정하기-2

Nest JS URL에 있는 쿼리(Query) 읽기