본문 바로가기

Node.JS

[Node.js 교과서] 0-2. 노드의 특성 - 이벤트 기반, 논블로킹 I/O

 

 

이벤트 기반

이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식

Ex) 클릭, 네트워크 요청, 타이머 등...

이벤트 리스너 : 이벤트를 등록하는 함수

콜백 함수 : 이벤트가 발생했을 때 실행될 함수

But 이벤트 기반으로 동작하는건 대부분의 프로그래밍 언어들의 특징임

 

논블로킹 I/O

Node js 는 블로킹/동기 ,   비동기/논블로킹 2가지 작업이 주로 사용

많은 사람들이 비동기/논블로킹일 때, 동시에 작업하는 것으로 오해를하는데 이는 틀린 이야기

논 블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행됨

일부 코드 : I/O 작업, 압축, 암호화 등....

나머지 코드는 블로킹 방식으로 실행됨 -> I/O 작업이 많을 때 노드 활용성이 극대

 

 

동기 : 코드가 순서대로 실행

비동기 : 코드가 순서대로 실행되지 않음

 

 

프로세스와 스레드

프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유 X

스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유

 

노드 프로세스는 멅리 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현

노드는 주로 멀티 스레드 대신 멀티 프로세스 활용

노드는 14버전부터 멀티 스레드 사용 가능

 

 

자바나 파이썬은 멀티 스레드

자바스크립트는 싱글 스레드

 

싱글 스레드라 주어진 일을 하나밖에 처리하지 못함

-> 블로킹이 발생하는 경우 나머지 작업은 모두 대기해야함 (비효율 발생)

 

주방에 비유 (점원 : 스레드, 주문:요청, 서빙:응답)

브라우저 내부의 멀티 스레드인 Web APIs 에서 비동기 + 논블로킹 처리

 

 

 

 

멀티 스레드 코딩이 어려워서 초반에 Node js가 많이 쓰였음

Node js 의 핵심은 싱글 스레드를 어떻게 잘 다룰 것인지가 핵심

\