タスクグラフを使った並列処理向けのヘッダーオンリーC++ライブラリ。CPUのマルチスレッドとCUDA GPUに対応。
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
READMEのExampleセクションに従って、main.jsとworker.jsを作成します
- 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 の数値は毎日更新されます。
関連プロジェクト
wait group、上限付きプール、順序付きストリーム、panicの伝播により、構造化並行処理をより安全かつシンプルにするGoライブラリ。
future、promise、スレッドプール、agent、atom、スレッドセーフなコレクション、同期クラスなどの並行処理プリミティブを提供するRuby gem。
逐次イテレーターを、ほぼそのまま使えるAPIで並列化できるRust向けデータ並列処理ライブラリ。
Wattは、コンテナ環境でCPU利用効率、スケーリング、可観測性を高めるため、あらゆるNode.jsアプリをworker threadで実行するアプリケーションサーバーです。
NumPy配列の式をチャンク単位で評価し、メモリ使用量を抑えながらマルチコアで高速に計算します。