노드.js는 주로 싱글 프로세스(single process) 아키텍처를 사용.
하나의 메인 프로세스가 이벤트 루프를 통해 모든 작업을 처리하는 모델.
프로세스와 스레드
프로세스.
- 컴퓨터에서 실행 중인 프로그램
- 각각의 프로세스는 독립된 메모리 공간을 할당 받고, 명령어들과 데이터를 가짐
스레드.
- 프로세스는 독립점인 메모리 공간을 차지하는 특징이 있다. 이러한 특징으로 인해 프로세스간의 데이터 공유가 까다롭다.
- 그래서 차라리 한 프로세스 안에서 여러개의 작업을 동시에 실행하고자 해서 나온게 스레드 입니다. 이때 여러개의 작업 중 하나 하나를 맡아주는게 스레드 입니다.
싱글 스레드?
노드.js는 주로 하나의 메인 스레드를 사용하며, 백그라운드에서는 스레드 풀을 통해 다수의 스레드를 사용하여 I/O 작업을 병렬로 처리.
- 개발자가 직접 제어하는 메인 스레드가 하나뿐 인것
- 보통 메인스레드는 이벤트 루프 모델 자체를 가리킴.
전체적인 동작.
메인 스레드가 이벤트 루프를 실행하고 대부분의 JavaScript 코드를 처리.
메인 스레드는 이벤트 루프를 통해 비동기 작업을 처리하려 하고, 이러한 비동기 작업은 백그라운드에서 별도의 스레드 풀을 통해 수행됨.
메인스레드 + 스레드풀 ??
싱글스레드 라면서 실제로는 따로 스레드풀을 쓰는데 이거 싱글 스레드 맞나? 싶다.
결과적으로는
1. 메인스레드에서 필요에따라 스레드풀로 작업을 보내거나 하는 제어를 전부 하니까 싱글 스레드 기반인데
2. 백그라운드에서 아래와 같은 작업들을 할때는 추가로 스레드를 사용하는 멀티 스레드 프로세스 이기도 함
- 파일 I/O, 네트워크 I/O, 암호화 및 해시 작업, DNS 조회, 압축 및 압축 해제
동시 처리.
다수의 스레드가 각각 요청을 처리하면서 최대한 동시성을 확보 하지만 알아야 할 사항들이 있다.
- 스레드 개수 제한: 백그라운드에서 사용할 수 있는 스레드 개수에 제한이 있음. (CPU 코어 수에 따라 또는 노드.js의 설정에 따라)
- 비동기 작업이 백그라운드 스레드에서 실행되지만, 비동기 작업(백그라운드에서 작업) 이후에 실행되어야 할 코드, 콜백들은 결국에 메인스레드에서 스케줄링 하고 관리한다.
참고.
https://haeunyah.tistory.com/81
-끝-
'Nodejs' 카테고리의 다른 글
[Nodejs] Express JWT 토큰 발급/검증 (0) | 2023.10.19 |
---|---|
[nodejs] Express-session (0) | 2023.10.16 |
[Nodejs] Express에서 redis를 session storage로 사용 (0) | 2023.10.15 |
[Nodejs] 동기/비동기, 블로킹/논블로킹 (0) | 2023.10.02 |
[Nodejs] Event-driven (이벤트기반) (0) | 2023.09.30 |