Array.prototype.sort
なんらかの方法でそれ自体を非同期に動作させることはできませんが、setTimeout に対する setImmediate (shim) の速度の利点を示すこの並べ替えのデモで示されているように、非同期並べ替えは確実に可能です。
残念ながら、ソースコードにはライセンスが付属していないようです。デモの Github リポジトリ ( https://github.com/jphpsf/setImmediate-shim-demo ) では、著者として Jason Weber が名前を挙げています。コードの (一部) を使用するかどうか、彼に尋ねてみてください。
setImmediate (Node 0.10 以降で使用可能) を使用すると、個々のソート操作が I/O コールバックと効果的にインターリーブされると思います。このような大量の作業については、process.nextTick をお勧めしません (1000 maxTickDepth の制限があるため、それが機能する場合)。背景については、 setImmediate と nextTickを参照してください。
単純な「同期」処理の代わりに setImmediate を使用すると、確かに全体的に遅くなります。そのため、「ティック」ごとに個々の並べ替え操作のバッチを処理して高速化することを選択できますが、その間 Node は応答しません。I/O に関する速度と応答性の適切なバランスは、実験によってのみ見つけることができると思います。
はるかに単純な代替手段は、Web ワーカーのように行うことです。子プロセスを生成し、そこで並べ替えを行います。次に直面する最大の問題は、ソートされたデータをメインプロセスに戻すことです(おそらく、何らかの出力を生成するため)。私の知る限り、Node.jsの転送可能なオブジェクトのようなものはありません。並べ替えられた配列をバッファリングした後、結果を子プロセスの stdout にストリーミングし、メイン プロセスでデータを解析できます。子プロセス メッセージングを使用します。
予備の CPU コアが横たわっていない可能性があるため、子プロセスが他のプロセスの CPU 時間に侵入する可能性があります。並べ替えプロセスが他のプロセスに悪影響を与えないようにするには、低い優先度を割り当てる必要がある場合があります。Node 自体でこれを行うことは一見不可能ですが、 https nice
: //groups.google.com/forum/# !topic/nodejs/9O-2gLJzmcQ で説明されているように、を使用してみることができます。私はこの問題について経験がありません。