シングルスレッドはNode.jsの非同期コードをどのように処理しますか?

コダンダラマドゥルガラオポルリ

コールバックが行われたとしても、それを知りたいです。ノードがシングルスレッドモデルの場合、メインスレッドのコールバックとその他のプロセスをどのように並列に実行できますか。

jfriend00

まず、コールバックは並行して実行されません。一度にJavascript実行のスレッドは1つしかないため、Javascriptコードの実際の並列実行はありません。複数の非同期ネイティブコード操作を同時に実行することができますが、ある種のJavascript完了コールバックを実行するときは、それらは並行してではなく、一度に1つずつ実行されます。

Javascriptはイベント駆動型言語です。つまり、タイマー、非同期ディスクI / Oからのコールバック、ネットワーク操作からのコールバックなどがイベントキューを使用します。JSエンジンがJavascriptの実行を終了し、制御がシステムに戻されると、JSエンジンは次のイベントをイベントキューからプルして実行します。ネイティブコード操作は、イベントキューにイベントを挿入することにより、それらが完了し、コールバックを実行することを通知できます。

のようなHTTPリクエストのような非同期操作の場合、http.get()基本的には次のようになります。

  1. あなたのJavaScript呼び出し http.get()
  2. その呼び出しはhttpリクエストを送信し、すぐに戻ります。渡したコールバックhttp.get()はすべてhttpモジュールによって内部的に保存され、その特定のネットワーク要求に関連付けられます。
  3. 後のJavaScriptコードhttp.get()は、実行が完了するまで実行を継続し制御をシステムに戻します。
  4. その後、しばらくして、前のHTTP要求からの応答がTCPエンジンに返されます。これにより、httpモジュールはJavascriptイベントキューにイベントを挿入して、以前に送信した完了コールバックを呼び出しますhttp.get()
  5. Javascriptエンジンが現時点で他に何もしていない場合は、コールバックが実行され、結果の応答データが渡されます。
  6. Javascriptエンジンが現在何かを実行している場合、実行中の現在のJavascriptが終了し、制御がシステムに戻るまで、イベントはイベントキューに残ります。その時点で、JSエンジンはイベントキューをチェックし、キューから次のイベントをプルして実行します。それがコールバックである場合、その時点でコールバックが呼び出されます。

そのため、非同期ディスクI / O、ネットワーク操作などのさまざまな操作は、(Javascriptエンジンではなく)ネイティブコードによって制御されているため、バックグラウンドで実行できます。そのネイティブコードには、必要に応じてスレッドを使用する機能があります。fsモジュールは、スレッドを使用するnetモジュールは、ネイティブOSはすでに非同期ネットワーク操作をサポートしていないため。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Node.jsはどのように非同期であり、同時にシングルスレッドですか?

分類Dev

シングルスレッドのNode.jsはどのようにリクエストを同時に処理しますか?

分類Dev

node.jsシングルスレッドモデルはどのように同時リクエストを処理しますか?

分類Dev

非同期はJavascriptの変数をどのように処理しますか?

分類Dev

angleJSの$ http.postからの非同期リターンをどのように処理しますか?

分類Dev

promiseはどのようにしてコードを非同期にしますか?

分類Dev

Roslynアナライザーアクションは非同期コードをどのように処理する必要がありますか?

分類Dev

Linuxカーネルは非同期I / O(AIO)リクエストをどのように処理しますか?

分類Dev

ReactPHPは非同期の非ブロッキングI / Oをどのように処理しますか?

分類Dev

AppDomainがC#で非同期コールバックを処理し、結果を返すのをどのように待つことができますか?

分類Dev

どのようにJavaでの同期方法で非同期のコールバックを処理するには?

分類Dev

Node.jsのスレッドプールを介してI / Oのブロックはどのように処理されますか?

分類Dev

Scala Futuresはスレッドでどのように動作しますか?そして、それらをどのように使用して、非同期および非ブロッキングコードを実行できますか?

分類Dev

Node.JS非同期/コールバックの処理を待ちますか?

分類Dev

Cコンパイラはビットフィールドをどのように処理しますか?

分類Dev

ForEach()メソッドの非同期ラムダはどのように処理されますか?

分類Dev

1つのスレッドのみを使用するようにTomcatを構成しているときに、非同期処理にcompletablefutureを使用すると、別のスレッドをどのように使用しますか?

分類Dev

stream.Readable.prototype.onはnode.jsソースコードのイベントをどのように処理しますか?

分類Dev

Node.js:ループ内のコールバックをどのように処理しますか?

分類Dev

Javaはマルチスレッドのエラーをどのように処理しますか?

分類Dev

ソケットはローカルアドレスの変更をどのように処理しますか?

分類Dev

node.jsは、コールバック内にアクセスするために、非同期操作の外部で変数をどのように保存しますか?

分類Dev

非同期I / Oメソッドはどのように処理されますか

分類Dev

プログラムは、いくつかのスレッドとシグナルによる中断をどのように処理しますか?

分類Dev

Linuxはmoveコマンドをどのように処理しますか

分類Dev

Linuxはmoveコマンドをどのように処理しますか

分類Dev

実際の場合の非同期リクエスト処理はどのように機能しますか?

分類Dev

別のajaxのbeforeSendイベントでajaxコールバックを非同期的に処理するにはどうすればよいですか?

分類Dev

JavaScriptのマルチスレッドまたは非同期コードはどのように機能しますか?

Related 関連記事

  1. 1

    Node.jsはどのように非同期であり、同時にシングルスレッドですか?

  2. 2

    シングルスレッドのNode.jsはどのようにリクエストを同時に処理しますか?

  3. 3

    node.jsシングルスレッドモデルはどのように同時リクエストを処理しますか?

  4. 4

    非同期はJavascriptの変数をどのように処理しますか?

  5. 5

    angleJSの$ http.postからの非同期リターンをどのように処理しますか?

  6. 6

    promiseはどのようにしてコードを非同期にしますか?

  7. 7

    Roslynアナライザーアクションは非同期コードをどのように処理する必要がありますか?

  8. 8

    Linuxカーネルは非同期I / O(AIO)リクエストをどのように処理しますか?

  9. 9

    ReactPHPは非同期の非ブロッキングI / Oをどのように処理しますか?

  10. 10

    AppDomainがC#で非同期コールバックを処理し、結果を返すのをどのように待つことができますか?

  11. 11

    どのようにJavaでの同期方法で非同期のコールバックを処理するには?

  12. 12

    Node.jsのスレッドプールを介してI / Oのブロックはどのように処理されますか?

  13. 13

    Scala Futuresはスレッドでどのように動作しますか?そして、それらをどのように使用して、非同期および非ブロッキングコードを実行できますか?

  14. 14

    Node.JS非同期/コールバックの処理を待ちますか?

  15. 15

    Cコンパイラはビットフィールドをどのように処理しますか?

  16. 16

    ForEach()メソッドの非同期ラムダはどのように処理されますか?

  17. 17

    1つのスレッドのみを使用するようにTomcatを構成しているときに、非同期処理にcompletablefutureを使用すると、別のスレッドをどのように使用しますか?

  18. 18

    stream.Readable.prototype.onはnode.jsソースコードのイベントをどのように処理しますか?

  19. 19

    Node.js:ループ内のコールバックをどのように処理しますか?

  20. 20

    Javaはマルチスレッドのエラーをどのように処理しますか?

  21. 21

    ソケットはローカルアドレスの変更をどのように処理しますか?

  22. 22

    node.jsは、コールバック内にアクセスするために、非同期操作の外部で変数をどのように保存しますか?

  23. 23

    非同期I / Oメソッドはどのように処理されますか

  24. 24

    プログラムは、いくつかのスレッドとシグナルによる中断をどのように処理しますか?

  25. 25

    Linuxはmoveコマンドをどのように処理しますか

  26. 26

    Linuxはmoveコマンドをどのように処理しますか

  27. 27

    実際の場合の非同期リクエスト処理はどのように機能しますか?

  28. 28

    別のajaxのbeforeSendイベントでajaxコールバックを非同期的に処理するにはどうすればよいですか?

  29. 29

    JavaScriptのマルチスレッドまたは非同期コードはどのように機能しますか?

ホットタグ

アーカイブ