Repolode
piscinajs

piscinajs/piscina

Node.jsのメインイベントループをブロックせずにCPU負荷の高いタスクを実行できる、キュー、キャンセル、実行時間統計に対応したWorkerスレッドプール。

スター
5,226
フォーク
177
未解決の Issue
7
最終コミット
5 日前

これは何?

PiscinaはNode.js向けのWorkerスレッドプールです。アプリケーションから同期関数または非同期関数を複数のWorkerスレッドに振り分けられるため、CPUバウンドな処理をメインイベントループをブロックせずに並列実行できます。各Workerは別ファイルからエクスポートされたハンドラーを読み込み、プールは結果をPromiseとして返します。

スレッド数の最小値・最大値やアイドルタイムアウト、サイズ上限とバックプレッシャーイベントを任意で設定できるタスクキューなど、運用に必要な処理はプールが担います。AbortSignalでタスクをキャンセルでき、プールは実行時間と待機時間の統計を記録します。Workerにはメモリ上限、環境変数、LinuxのCPU nice優先度を設定できます。

PiscinaはCommonJS、ESM、TypeScriptに対応しており、Node.js 24以降が必要です。

主な機能

  • 01同期または非同期のハンドラー関数をWorkerスレッドのプールに振り分けます。
  • 02スレッド数の最小値・最大値とアイドルタイムアウトを設定できます。
  • 03AbortSignal、または「abort」を発行する任意のEventEmitterでタスクをキャンセルできます。
  • 04バックプレッシャーに対応するdrainイベントと、任意設定のキューサイズ上限を備えています。
  • 05実行時間と待機時間の統計に加え、使用率のメトリクスを取得できます。
  • 06Workerごとにメモリ上限と、任意でLinuxのCPU nice優先度を設定できます。

ユースケース

  • Node.jsのWebサーバーから、ハッシュ計算、画像処理、パースなどCPU負荷の高い処理を切り離す。
  • 高コストなジョブの並列実行数を制限し、超過したリクエストをバックプレッシャーを適用しながらキューに入れる。
  • イベントループを止めずに、サーバーサイドレンダリングやその他の同期計算を実行する。

クイックスタート

  1. 1

    READMEのExampleセクションに従って、main.jsとworker.jsを作成します

  2. 2

    Node.jsでmain.jsを実行して結果を表示します

使う前に知っておきたいこと

  • READMEではNode.js 24.x以降が必要です。
  • リポジトリのメタデータでは明確なライセンスが確認できませんが、READMEにはMITと記載されています。

トピック

よくある質問

piscina とは?
Node.jsのメインイベントループをブロックせずにCPU負荷の高いタスクを実行できる、キュー、キャンセル、実行時間統計に対応したWorkerスレッドプール。 PiscinaはNode.js向けのWorkerスレッドプールです。アプリケーションから同期関数または非同期関数を複数のWorkerスレッドに振り分けられるため、CPUバウンドな処理をメインイベントループをブロックせずに並列実行できます。各Workerは別ファイルからエクスポートされたハンドラーを読み込み、プールは結果をPromiseとして返します。
piscina は無料で使えますか?ライセンスは?
piscina は Other ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
piscina は今もメンテナンスされていますか?
活発にメンテナンス中。piscina の最終コミットは 2026年10月19日 です。
piscina は何に使えますか?
Node.jsのWebサーバーから、ハッシュ計算、画像処理、パースなどCPU負荷の高い処理を切り離す。 高コストなジョブの並列実行数を制限し、超過したリクエストをバックプレッシャーを適用しながらキューに入れる。 イベントループを止めずに、サーバーサイドレンダリングやその他の同期計算を実行する。
piscina のインストール方法は?
READMEのExampleセクションに従って、main.jsとworker.jsを作成します Node.jsでmain.jsを実行して結果を表示します
piscina はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/piscinajs/piscina

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト