2011-01-05 10 views
5

2つの質問があります:プロセス内で1つのスレッドがクラッシュするとどうなりますか?

1)node.jsが1つのスレッドで実行されているのはなぜですか?それは単にプロセス自体を使用するのはなぜですか? または、プロセスではなくスレッドで実行する利点は何ですか?

2)プロセス内のスレッドがクラッシュした場合(処理されない例外によってプロセスが終了することに気付いていますが)、正しくキャッチされた場合はどうなりますか?または浮動小数点例外のような例外が発生します。 プロセスもクラッシュしますか?

答えて

3

この場合、「シングルスレッド」とは少し混乱していると思います。 Node.js自体はバックグラウンドで複数のスレッドを使用し、それ以外は非同期で呼び出しをブロックします。

JavaScriptエンジンであるNode.jsコアはシングルスレッドです。マルチスレッドの欠如とイベントループの可用性により、プログラミングがずっと簡単になります。要するに、マルチスレッド化がもたらしているすべての並行性の問題に対処する必要はありません。この方法では、コードはずっと決定的になります。

スレッドがクラッシュする場合は、これが唯一のものかどうかはまったく関係がありません。コードがクラッシュすると、プログラムが終了することが期待できる最高のものです。プログラムするよりも面倒です部分的に壊れた状態で走り続ける。クラッシュしたスレッドがデータをディスクに保存する責任があったとしたら、今度はプログラムを保存せずに実行し続けるとします。

0
  1. node.jsは非常に軽量に設計されており、必要なときにのみ呼び出されます。したがって、各スレッドは1つの要求を処理して終了します。/mypageを呼び出すと、node.jsは要求を処理して終了します。小さなフットプリントを維持しながらパフォーマンスが向上します
  2. 例外があり、正しく処理された場合、定義した方法に従ってエラーが発生します。 Javascriptはすべての言語か何もない言語です。何らかのエラーが発生すると、エラーが発生し、クラッシュする可能性があります。そのため、すべてのエラーを確実に処理する必要があります。
0

プロセスまたはシングルスレッドでプログラムを実行することは同じことです。すべてのプロセスにはメインスレッドがあります。プログラミング言語とプラットフォームによっては、追加のスレッドを使用してプログラムの一部を同時に実行することができます。 Node.jsは追加のスレッドを開始する可能性がありません。

このようにして、新しいプロセスを開始するだけでなく、プログラムを並列に実行することもできません。単一のプロセス内の複数のスレッドは、同じメモリを共有しますが、プロセスは共有しません。プロセス間で情報を共有する必要がある場合は、メッセージパッシングを使用する必要があります。

メッセージが通過することの短所は、メモリを介して情報を共有するよりも遅いということです。利点は、メモリ内のオブジェクトの可変状態について推論する必要がなく、それらのオブジェクトが矛盾しないようにする方法です。

関連する問題