티스토리 뷰
한 문장 요약
libuv란 javascript 엔진(싱글 스레드)을 사용하는 nodejs에서 비동기 I/O를 가능하도록 해주는 C언어 기반 라이브러리 이다.
Libuv 란?
nodejs를 구성하는 여러 라이브러리 중 하나입니다. javascript를 사용하는 node 특성 상 어쩔 수 없이 싱글 스레드 기반인데, 비동기 I/O를 처리하기 위해서 libuv를 채택하여 사용하고 있습니다. (libuv of nodejs official repository)
Libuv의 특징
공식 문서에 따르면 다음과 같은 특징이 있습니다.
- epoll, kqueue, IOCP, 이벤트 포트가 지원하는 모든 기능을 갖춘 이벤트 루프.
- 비동기 TCP 및 UDP 소켓
- 비동기 DNS 확인
- 비동기 파일 및 파일 시스템 작업
- 파일 시스템 이벤트
- ANSI 이스케이프 코드 제어 TTY
- 소켓 공유를 통한 IPC, Unix 도메인 소켓 또는 네임드 파이프 사용(Windows)
- 하위 프로세스
- 스레드 풀
- 신호 처리
- 고해상도 클록
- 스레딩 및 동기화 기본 요소
epoll, kqueue, event ports, IOCP 란?
모두 Event Notification을 수행하는 기능으로 운영체제에 따라 구분된다.
- epoll : Linux 운영체제
- kqueue : BSD(UNIX) 계열 운영체제(mac OS 등)
- IOCP : Windows 운영체제
- event ports : Sun OS
Thread Pool 란?
Libuv는 Thread Pool 이라는 worker threads를 관리하는 pool을 사용하는데, task(I/O 등과 같은 작업)을 Thread pool에 있는 유휴 worker thread에게 할당하는 방식을 사용한다.
기본적으로 4개의 Threads를 사용하며 아래와 같이 조절할 수 있다
process.env.UV_THREADPOOL_SIZE = 5
참고로, libuv는 Thread safe 하지 않다.
File I/O, DNS Ops, User codes ...
File I/O(디스크 쓰기/읽기 등), Dns Ops(네트워크 관련 작업), 유저 작성 코드 등을 수행할 때는 내부적으로 존재하는 Queue를 활용하여, Thread pool에 유휴 worker가 존재할 때 할당하고, 운영체제에 맞는 Event Notification 기능을 통해 비동기 작업을 가능하도록 한다.
'node' 카테고리의 다른 글
[Node.js] V8이란? 구조와 Javascript 코드의 실행 순서 (0) | 2023.02.22 |
---|
댓글