[Node.js]SingleThread(싱글스레드)

resilient

·

2021. 5. 7. 01:49

728x90
반응형

싱글 스레드란

이벤트 기반, 논 블로킹 모델과 더불어 노드를 설명할 때 싱글 스레드라는 용어가 자주나온다.
싱글 스레드란 말그대로 스레드가 하나라는 말이다. 이 이유로 자바스크립트 코드가 동시에 실행될 수 없다.
스레드를 이해하기 위해서는 프로세스부터 알아야 한다.
프로세스와 스레드의 차이는 아래와 같다.

  • 프로세스는 운영체제에서 할당하는 작업의 단위이다. 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스이다. 프로세스간에는 메모리 등 자원을 공유하지 않는다.
  • 스레드는 프로세스 내에서 실행되는 흐름의 단위이다. 프로세스는 스레드를 여러개 생성해서 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유하고 같은 주소의 메모리에 접근해서 데이터를 공유할 수 있다.

노드가 싱글 스레드라는 말이 있다. 하지만 엄밀히 말하면 싱글 스레드로 동작하지는 않는다.

노드를 실행하면 프로세스가 하나 생성되고, 그 프로세스에서 스레드들을 생성하게 되는데, 이 때 내부적으로 스레드를 여러개 생성한다.

그 중에서 우리가 직접적으로 제어할 수 있는 스레드는 하나뿐이고 그래서 싱글 스레드라고 불리워진다.
블로킹이 심하게 일어나는 작업이 아니라면 스레드 하나로도 충분하다.
블로킹이 발생할 것 같은 경우에 노드에서는 논 블로킹 방법으로 대기 시간을 최대한 줄인다.

노드 12버전부터는 워커스레드 로 노드에서도 멀티 스레드를 사용할 수 있게 되었다.
CPU작업이 많은경우에 워커 스레드를 사용하면 된다.

노드는 네트워크나 데이터베이스, 디스크 작업등 I/O에 특화되어 있기 때문에 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는 데 적합하다.

노드의 장점

  • 멀티 스레드 방식보다 쉽다.
  • 멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용한다.
  • 웹 서버가 내장되어 있다.
  • JSON형식과 쉽게 호환이 된다.
반응형