2

rubygem Sporkと同じように、ノードプロセスをフォークして、基本的に現在の環境の完全なクローンにすることができますか?

「完全なクローン」とは、このクローン/子環境/プロセスが既存のを再利用できることを意味しますrequire.cache。したがって、子プロセスは、同じモジュールを再度要求するという(場合によっては面倒な)パフォーマンスの低下を被る必要がありません。たとえば、require('lib-a')読み込みに2秒かかるとします。子プロセスを呼び出すときに、それが瞬時に行われるようにするにはどうすればよいですかrequire('lib-a')(別名使用require.cacheまたは類似のもの)?

この使用例は、ノードエクスプレス/接続HTTPサーバーの起動時間を短縮することです。より複雑なアプリではrequire、大量のモジュールを前もって作成しrequire、それらすべてに1〜2秒かかる場合があります(モジュールを遅延ロードする方法に関する情報を探していません。私もその最適化を行っていますが、制限があります)。

関連するSporkコードは次のとおりです。

https://github.com/sporkrb/spork/blob/master/lib/spork/forker.rb

Marshal.dump(yield, @child_io)とのようなコードで正確に何をしているのかわかりませんMarshal.load(@child_io)が、どういうわけか環境全体を子プロセスにコピーしているようです。そうすることで、Sporkは1つの「メイン」Railsサーバーを実行し、テストを実行するために「フォーク」できるようにしたので、Railsサーバーが起動するのを待つ必要はありません(場合によっては10秒)。ノードでそれをどのように行うことができますか?出来ますか?

アップデート

これはUNIXソケットペアと見なされますか?これは検索に役立ちます。

4

1 に答える 1

1

ノード プロセスは長寿命であることを意図しているため、起動時間が特に優先されることはないと思います。これは、ノードの哲学の核となるものです。そうは言っても、クラスターモジュールを見てみたいと思うかもしれません。これにより、子ワーカー プロセスを起動できます。主にマルチコア シナリオでの負荷分散用に設計されていますが、役立つ場合があります。

于 2013-01-08T12:06:46.907 に答える