2017-02-08 12 views
2

http://stackabuse.com/setting-up-a-node-js-cluster/Node.jsクラスタリング - フォーク、実際に使用されているメモリ量は?

「明確にすることは、ノードに分岐することは、それは実際に現在のプロセスのクローンを作成していないことでPOISIXフォークよりも非常に異なっていると言うが、それは新しいV8インスタンスを起動しない。

これはマルチスレッドの最も簡単な方法の1つですが、注意して使用する必要があります.1000人のワーカーを育てることができたからといって、必要なことではありません。各ワーカーはシステムリソースを占有します。それぞれの子プロセスが新しいV8インスタンスであるため、インスタンスごとに30ミリ秒の起動時間と少なくとも10 MBのメモリが必要であるとノードのドキュメントでは述べています。

しかしhttps://nodejs.org/api/cluster.html

は「そこには、ルーティングロジックはNode.jsの中に、またはあなたのプログラムではありません、と労働者の間には共有状態と言います。そのため、依存しないようにプログラムを設計することが重要ですセッションやログインなどのためにメモリ内のデータオブジェクトにあまりにも多すぎます。

ワーカー(フォークされたプロセス)が実際にマスタプロセスのクローンでない場合、どのように共有状態も存在しません。

マスタープロセスに1ギガバイトのJSON文字列がある場合、すべての子プロセスもその1ギガバイトのJSON文字列のクローンを持つという印象を受けました。したがって、2人の子供がいる場合、3GBのメモリが使用されます。実際に何が起こるのですか?

答えて

0

Linuxの場合fork()は、コピーオンライトセマンティクスを使用します。つまり、フォークされたプロセスのすべてのメモリページが共有され(コピーされずに)、プロセスが変更したいページのみが変更が行われる前にコピーされます。したがって、変更されたデータが互いに接近している場合、つまり少数の実際のメモリページを使用する場合、フォークされたプロセスが多い場合でも、ごくわずかなメモリしか使用できません。

参照:

+0

だから、彼らは "労働者の間には共有状態" によって何を意味するのですか? – Arman

関連する問題