Libuv 스레드 풀로 노드 JS 성능 향상



""시리즈의 이번 5회에서는 스레드 풀 관리를 통해 성능Node JS을 높이는 방법을 보여줍니다. 우리는 Libuv의 작동 방식, 스레드 풀의 작동 방식 및 컴퓨터 사양에 따라 스레드 수를 구성하는 방법을 이해함으로써 이를 달성합니다.

Node JS의 내부 작업에 아직 익숙하지 않은 Node 개발자입니까? 그렇다면 Node 설치 이후 존재했던 일부 기본 구성으로 프로덕션 애플리케이션을 배포하고 있을 수 있습니다. 이 기사에서는 일부 응용 프로그램 작업의 성능을 두 배로 높일 수 있는 잘 알려지지 않은 구성을 다룰 것입니다. 이것은 여러 가지 요인에 따라 다르지만 많은 사람들에게 승리가 될 가능성이 높습니다.

YouTube에서 비디오 보기





Node JS 런타임 환경



노드 런타임 환경은 몇 가지 움직이는 부분으로 구성됩니다. 우리 모두는 Google V8 engine 논리를 실행하는 책임이 있는 JavaScript 에 익숙해야 합니다. 그러나 비동기 I/O 작업 관리를 담당하는 Libuv 이라는 잘 알려지지 않은 라이브러리가 있습니다.

이러한 I/O 작업은 운영 체제와 관련된 "과중한 작업"으로도 잘 알려져 있습니다. 파일 및 폴더 관리, TCP/UDP 트랜잭션, 압축, 암호화 등과 같은 작업은 Libuv를 통해 처리됩니다.

이제 이러한 작업의 대부분은 설계상 비동기식이지만 일부는 동기식이며 올바르게 처리되지 않으면 응용 프로그램이 차단될 수 있습니다. 이러한 이유로 Libuv에는 "스레드 풀"이라는 것이 있습니다.

Libuv 스레드 풀



Libuv는 동기 작업을 오프로드하는 데 사용하는 4개 스레드의 스레드 풀을 시작합니다. 이를 통해 Libuv는 애플리케이션이 동기 작업에 의해 불필요하게 차단되지 않도록 합니다.

여기에서 앱을 배포할 머신 또는 가상 머신의 사양에 더 잘 맞는 설정을 활용할 수 있습니다. 기본값인 4개 스레드를 최대 1024개 스레드로 변경할 수 있기 때문입니다. UV_THREADPOOL_SIZE 노드 변수를 설정하여 이를 달성합니다.

물리적 대 논리적 CPU 코어



UV_THREADPOOL_SIZE를 무엇으로 설정해야 하는지 더 잘 이해하려면 먼저 시스템에서 실행 중인 논리 코어 수를 이해해야 합니다. 내 MacBook Pro를 예로 들면 6개의 물리적 CPU 코어(Intel)를 실행하고 있습니다.

그러나 이러한 코어에는 하이퍼스레딩이 있습니다. 즉, 각 코어는 동시에 2개의 작업을 실행할 수 있습니다. 따라서 하이퍼스레딩이 있는 물리적 코어 1개를 논리적 코어 2개로 간주합니다. 내 경우 내 MacBook Pro는 12개의 논리 코어를 실행하고 있습니다.

노드 JS 성능을 높이는 방법



권장 사항은 UV_THREADPOOL_SIZE를 시스템이 실행 중인 논리 코어 수로 설정하는 것입니다. 제 경우에는 스레드 풀 크기를 12로 설정하겠습니다.

하드웨어가 실행 중인 논리 코어 이상으로 크기를 설정하는 것은 의미가 없으며 실제로 성능이 저하될 수 있습니다.

논리 코어를 확인하는 방법



배포와 관련하여 마지막으로 해야 할 일은 UV_THREADPOOL_SIZE를 수동으로 설정하는 것입니다. 앱이 서로 다른 시스템 사양을 가진 여러 환경에서 실행될 수 있기 때문입니다. 이와 같이 해당 환경에서 앱이 실행되는 순간 스레드 풀 크기를 동적으로 설정할 수 있는 방법이 필요합니다.

좋은 소식은 이것이 매우 간단하지만 주의해서 다루어야 한다는 것입니다. 이를 위해 Node 애플리케이션의 루트 JS 파일 맨 위에 아래 코드를 추가합니다.

const OS = require('os')
process.env.UV_THREADPOOL_SIZE = OS.cpus().length


OS 모듈은 Node JS에 고유합니다. 시스템이 실행 중인 총 논리적 코어 수를 반환하는 기능cpus()이 있습니다. 좋은 점은 CPU 코어에 하이퍼스레딩이 없는 경우 이 함수가 대신 물리적 CPU 코어 수를 반환한다는 것입니다. 이는 완벽합니다.

폐쇄



이 기사가 가치가 있다고 믿습니다. 포함된 비디오를 시청하고 여기에 언급된 모든 코드 샘플이 있는 GitHub의 내Source Code repo를 확인하는 것이 좋습니다.

다음 시간까지, 건배 😎

좋은 웹페이지 즐겨찾기