イベントループの単一スレッドの場合、jsの各関数の実行が「アトミックオペレーション」と言うことはできますか?つまり、2つの関数(またはそれ以上)を1回で実行することはできません。javascriptイベントループ関数のアトミック性実行
答えて
簡単な答えは、それは真実ではないです。 setTimeout
またはXmlHttpRequest.onreadystatechange
などに渡された関数について考えてください。これらの関数は、の将来のの特定の時刻または未定義の時刻に実行されます。 setTimeoutが起動したとき、またはready状態変更イベントが発生したときに関数がすでに実行されている場合、setTimeoutまたはready状態ハンドラの統計が実行される前に、その関数が終了するまで待機しません。
代わりに、2つ(以上)の関数をインタプリタによって同時に実行することができます。 と同時にが実行されているように見えるかもしれませんが、技術的にはそうではありません。
最初の関数の実行は一時停止しており(命令が終了してから次の命令が開始されるまで)、他の関数の命令はしばらく実行されます。その後、この関数の実行は一時停止され、前に一時停止した関数の実行が再開されます。
JavaScriptは1つのスレッドのみを使用します。したがって、同時に、2 の指示が並行して実行されることは全く不可能です。しかし、コードのある部分から別の部分に「ジャンプ」するイベントのキューがあります。
しかし
機能は、1つの以上の命令を使用していますので、彼らが同期実行されて発生する可能性があります。
javascriptは、イベントベースのシングルスレッド「pseudoasync」スクリプト言語になるように設計されています。
しかし、WebWorkerと呼ばれるもので、指定されたスクリプトファイルでシステムに新しいプロセスを作成するので、アプリケーションに2番目のスレッドが必要です。 intrestedて(?) - What are the use-cases for Web Workers?
Yesにリダイレクトし、機能がアトミック操作
より正確であることであり、各機能は、各メッセージが作業者に進み、実行されるであろうqueueの一部であるメッセージであります最後まで。非ブロック操作の場合は
ランタイムのために必要な時間は、関数の作成とsetTimeout
のようなもののためにはるかに大きいので、倍の小さなブロッキング操作のほとんどは、最初に実行されます。
console.log('foo');
setTimeout(function() {
console.log('bar'); // This will be called last
});
console.log('baz');
を意味していますが、 'console.log( 'baz');を' while(true); 'bar word 'に置き換えた場合は、そのすべてが –
には表示されません。単一のスレッドを永続的にビジー状態に保つと、それは決して次の命令には行きません。それはなぜあなたが決して睡眠や重い操作を使用することはありません非同期操作のJavaScriptで。あなたはGUIをブロックする – Mayday
@ Vladuysha良い点。私は、while(true);もアトミックな操作であり、実行が完了するまでランタイムが待機するためだと思います(https://developer.mozilla.org/en-US/docs/Web/ JavaScript/EventLoop#Run-to-completion)原則。 –
- 1. javascript関数の実行
- 2. jQuery/Javascript関数の実行
- 3. イベントループとnode.jsのコールバック関数
- 4. Netty:複数のイベントループを使用する同時実行性の問題
- 5. ランタイムエラー:イベントループが実行中
- 6. JavaScript:関数実行命令
- 7. Javascriptイベントループ:web apiはどこで実行されますか?
- 8. JavaScriptスタック、キュー、イベントループ?
- 9. オブジェクト内のJavaScript関数の実行
- 10. JavaScriptの関数の実行順序
- 11. JavaScriptの関数の非同期実行
- 12. JavaScript:関数内の実行シーケンス
- 13. JavaScript関数の実行順序
- 14. htmlタグ内のJavaScript関数を実行
- 15. 関数の前にJavaScript実行コード
- 16. javascript関数の実行順序
- 17. 静的関数同時実行性ASP.NET
- 18. javascriptコールバック関数 - 複数の関数が実行されない
- 19. JavaScriptイベントループとWebワーカ
- 20. Javascript window.open関数の属性
- 21. Javascriptのイベントループの明確化
- 22. ページロードでjavascript関数を実行
- 23. RegularExpressionValidatorからJavaScript関数を実行
- 24. Seam EL式でJavascript関数を実行
- 25. cmdからjavascript関数を実行
- 26. JavaScript関数は実行されず、アレイ
- 27. JavaScript、関数の後に関数を実行
- 28. 関数実行の遅延部分JavaScriptとexit関数
- 29. mysqlのデータのアトミック性
- 30. Objectify Javascript - Javascript関数を複数回実行する方法
"they" - U meen instructions? –
私は関数 – Mayday