[Node.js]SingleThread(싱글스레드)
resilient
·2021. 5. 7. 01:49
싱글 스레드란
이벤트 기반, 논 블로킹 모델과 더불어 노드를 설명할 때 싱글 스레드라는 용어가 자주나온다.
싱글 스레드란 말그대로 스레드가 하나라는 말이다. 이 이유로 자바스크립트 코드가 동시에 실행될 수 없다.
스레드를 이해하기 위해서는 프로세스부터 알아야 한다.
프로세스와 스레드의 차이는 아래와 같다.
- 프로세스는 운영체제에서 할당하는 작업의 단위이다. 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스이다. 프로세스간에는 메모리 등 자원을 공유하지 않는다.
- 스레드는 프로세스 내에서 실행되는 흐름의 단위이다. 프로세스는 스레드를 여러개 생성해서 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유하고 같은 주소의 메모리에 접근해서 데이터를 공유할 수 있다.
노드가 싱글 스레드라는 말이 있다. 하지만 엄밀히 말하면 싱글 스레드로 동작하지는 않는다.
노드를 실행하면 프로세스가 하나 생성되고, 그 프로세스에서 스레드들을 생성하게 되는데, 이 때 내부적으로 스레드를 여러개 생성한다.
그 중에서 우리가 직접적으로 제어할 수 있는 스레드는 하나뿐이고 그래서 싱글 스레드라고 불리워진다.
블로킹이 심하게 일어나는 작업이 아니라면 스레드 하나로도 충분하다.
블로킹이 발생할 것 같은 경우에 노드에서는 논 블로킹 방법으로 대기 시간을 최대한 줄인다.
노드 12버전부터는 워커스레드 로 노드에서도 멀티 스레드를 사용할 수 있게 되었다.
CPU작업이 많은경우에 워커 스레드를 사용하면 된다.
노드는 네트워크나 데이터베이스, 디스크 작업등 I/O에 특화되어 있기 때문에 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는 데 적합하다.
노드의 장점
- 멀티 스레드 방식보다 쉽다.
- 멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용한다.
- 웹 서버가 내장되어 있다.
- JSON형식과 쉽게 호환이 된다.
'Back-end > Node.js' 카테고리의 다른 글
[Node.js] Sequelize란? Sequelize사용법 (0) | 2021.07.13 |
---|---|
[Node.js]jsonwebtoken(JWT)토큰이란? (1) | 2021.06.21 |
[Node.js]RestAPI에서 PUT,DELETE,method-override 사용하기 (0) | 2021.06.19 |
[Node.js]Logging 모듈 winston이란? (0) | 2021.06.17 |
[Node.js]express에서 cors란? (0) | 2021.06.16 |