libuv: 3개의 글
참조문서 https://github.com/nodejs/node https://nodejs.org/ko/docs/guides/event-loop-timers-and-nexttick/ https://medium.com/the-node-js-collection/what-you-should-know-to-really-understand-the-node-js-event-loop-and-its-metrics-c4907b19da4c 이벤트루프는 nodejs 의 핵심개념인데, 열심히 파헤쳐보자. 먼저 구글에 널려있는 많은 아키텍처들은 전부 틀렸다고 한다. 이 말은 libuv의 핵심 개발자 Bert Belder 등이 했다고 참조문서에서 말한다. 아무튼 그래서 구글링을 열심히해봐도 공식문서에 부합하는 아키텍쳐 그림이 없..
참조문서 http://docs.libuv.org/en/latest/index.html http://nikhilm.github.io/uvbook/index.html nodejs의 핵심이 libuv가 아닐까한다. 여기에 이벤트루프와 쓰레드풀들이 모두 있다. 1. libuv가 무엇인가? libuv는 비동기 입출력, 이벤트 기반에 초점을 맞춘 라이브러리이다. 전통적으로 IO처리는 요청마다 스레드를 사용하는 방식이다. 하지만 libuv는 비동기, 논블로킹 스타일을 사용한다. 이를 이용하기 위해 각 커널의 비동기IO를 이용한다. 리눅스의 경우에는 커널 2.6부터 적용된 AIO가 있고 윈도우에는 IOCP가 있다. 운영체제의 비동기 이벤트는 libuv의 이벤트로 취급된다. 예를들어 파일쓰기가 끝났다고 한다면, libu..
참조문서 : http://docs.libuv.org/en/latest/threadpool.html 기본적으로 뒤에서 열심히 일하는 워커(IO작업 담당)들은 멀티쓰레드인데, 기본 크기가 4이다. 이는 최대 128까지 늘릴 수 있다. 특정 함수가 쓰레드풀을 사용할 때, libuv는 최대 쓰레드 수를 미리 할당해주는데, 이를 늘려주면 스레딩의 성능이 향상된다. 대신 메모리 오버헤드가 늘어난다. 따라서 적당한 크기의 쓰레드 수를 잡아주면 좋다. nodejs에서 워커 쓰레드의 수는 process.env.UV_THREADPOOL_SIZE 에서 제어할 수 있다. 그러나 동적으로 소스.js 레벨에서 제어할 수는 없다. (소스.js에서process.env.UV_THREADPOOL_SIZE=64 이런거 안된다.) 따라서 ..