티스토리 뷰

node

[Node.js] Libuv란? 특징과 구성요소

CHULMING 2023. 2. 20. 23:36

한 문장 요약


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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함