Skip to content

ベンチマーク ​

asyncmux の性能特性を、benchmarks/asyncmux.bench.ts による測定結果とともに示します。 ここに載せる数値は特定の環境での参考値であり、実行環境によって変動します。

測定方法 ​

測定には Vitest のベンチマーク機能を用いています。 各ケースは約 0.5 秒間繰り返し実行され、ops/sec は 1 秒あたりの実行回数を表します。

sh
npx vitest bench --config ./.config/vitest.bench.ts

測定環境は次のとおりです。

  • CPU: 12th Gen Intel Core i9-12900K
  • メモリー: 32 GiB
  • Node.js: v24.15.0
  • 測定日: 2026-09-08

測定結果 ​

A. 競合なしのロック取得 ​

待ち行列が存在しない状態での lock / rLock の取得と解放の速度です。

ケースops/sec平均p99
lock / release(キーなし)1,196,7520.0008 ms0.0012 ms
lock / release(キーあり)972,9520.0010 ms0.0020 ms
rLock / release(キーなし)1,181,6290.0008 ms0.0011 ms
rLock / release(キーあり)834,5850.0012 ms0.0015 ms

B. 低い競合 ​

2 つのワーカーが同一キーに対して取得と解放を繰り返す場合の速度です。

ケースops/sec平均p99
2 ワーカー × 4 回操作(同一キー)77,0590.0130 ms0.0144 ms
2 ワーカー × 16 回操作(同一キー)24,1650.0414 ms0.0397 ms

C. 高い競合 ​

多数の要求が同時に同一のロックへ殺到した場合の速度です。

ケースops/sec平均p99
32 件の同時要求(キーなし)22,1030.0452 ms0.0425 ms
128 件の同時要求(同一キー)2,0110.4972 ms0.5530 ms

D. ロック取得と解放の繰り返し ​

1 つのワーカーが取得と解放を連続で繰り返す場合の速度です。

ケースops/sec平均p99
連続 16 回59,2140.0169 ms0.0172 ms
連続 64 回16,5000.0606 ms0.0582 ms

E. キューに溜まった要求の処理 ​

保持中のロックを解放し、キューに溜めた読み書き要求を一括で流す場合の速度です。

ケースops/sec平均p99
50 件の読み書き要求を処理13,8770.0721 ms0.0648 ms
200 件の読み書き要求を処理3,0440.3285 ms7.4403 ms

F. エラー経路 ​

ロックの二重解放や、中断済みシグナルでの取得といった例外系の速度です。

ケースops/sec平均p99
二重解放(LockReleasedError を投げる)222,4880.0045 ms0.0065 ms
中断済みシグナル(拒否される)159,9190.0063 ms0.0068 ms

G. 待機の取り消し ​

キューで待機中の取得を AbortSignal で取り消す場合の速度です。

ケースops/sec平均p99
待機中の取り消し106,5920.0094 ms0.0087 ms

H. 現実的な負荷 ​

読み取り 12 件と書き込み 3 件に全体ロック 1 件を混ぜた、キャッシュアクセスを模した負荷での速度です。

ケースops/sec平均p99
読み書き混在アクセス(12R + 3W +全体 W)43,3780.0231 ms0.0230 ms

結果の読み方 ​

競合なしのロック取得は 100 万 ops/sec を超えており、通常の非同期処理に付随する排他制御の負荷は無視できる水準にあります。 読み取りロックと書き込みロックの間に大きな速度差はなく、キー指定の有無も結果を大きく変えません。 128 件が同時に殺到するような高い競合下でも 1 件あたり 0.5 ms 程度で処理でき、読み書き混在の現実的な負荷では 4 万 ops/sec を超えています。