質問

ご挨拶、

私はJavaScript、nodejsを勉強しています。そして、JavaScriptで並行性の問題がどのように回避されるかを理解していません。

私がオブジェクトに取り組んでいるとしましょう

var bigObject = new BigObject();

そして、私は持っています setTimer(function(){ workOnBigOjbect...} ) それも取り組みます bigOjbect.

ディスクIOが書かれている場合 bigObject, 、および作業するタイマーオブジェクト bigObject, 、そして定期的に読み取りをコードします bigObject, 、並行性の問題はどのように回避されますか?

通常の言語では、ミューテックスまたはスレッドセーフキュー/コマンドパターンを使用します。また、JavaScriptの人種条件についてはあまり議論していません。

私は何かが足りませんか?

役に立ちましたか?

解決

node.jsの全体的なポイントは、イベント駆動型であるということです。すべてのコードは、1つのスレッドでイベントハンドラーで実行されます。コードが同時に実行されないため、並行性の問題はありません。欠点は、各イベントハンドラーが他のイベントをブロックするため、迅速に終了する必要があることです。

例では、コードはディスクIOを開始し、すぐに終了します。 node.jsインフラストラクチャは、イベントハンドラーを実行することでIO操作が完了したことをプログラムに通知します。タイマーイベントは、IOイベントの前または後に呼び出されますが、同時に呼び出されません。

他のヒント

JavaScriptはシングルスレッドです。関数が実行されることになっているときに(Settimerと呼ばれる方法に基づいて)時間が到来し、親コードがまだ実行されている場合、親コードが完了するまで機能は実行されません。

単一のスレッドのみがあります。見る: マルチコアマシンのnode.js

これは、一般的にJavaScriptがブラウザ内で実行され(Windowsケースでは単一のUIスレッドのみがある)、複数のスレッドをサポートしていないため、基礎となるV8 JavaScriptエンジンで複数のスレッドがサポートされていないためだと推測します。

JavaScriptと呼ばれるこのことがあります 実行と完了 これにより、コードが実行されている場合、他の(非同期)コードが実行される前に完全に実行されることが保証されます。したがって、並行性の問題はありません。

例の場合、タイマーコールバックが呼び出された場合はいつでも完全に実行され、他のコードを実行するために中央で先制されることはありません。

見る JavaScriptに並行性制御ツールがない理由 詳細については。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top