コールバックが行われたとしても、それを知りたいです。ノードがシングルスレッドモデルの場合、メインスレッドのコールバックとその他のプロセスをどのように並列に実行できますか。
まず、コールバックは並行して実行されません。一度にJavascript実行のスレッドは1つしかないため、Javascriptコードの実際の並列実行はありません。複数の非同期ネイティブコード操作を同時に実行することができますが、ある種のJavascript完了コールバックを実行するときは、それらは並行してではなく、一度に1つずつ実行されます。
Javascriptはイベント駆動型言語です。つまり、タイマー、非同期ディスクI / Oからのコールバック、ネットワーク操作からのコールバックなどがイベントキューを使用します。JSエンジンがJavascriptの実行を終了し、制御がシステムに戻されると、JSエンジンは次のイベントをイベントキューからプルして実行します。ネイティブコード操作は、イベントキューにイベントを挿入することにより、それらが完了し、コールバックを実行することを通知できます。
のようなHTTPリクエストのような非同期操作の場合、http.get()
基本的には次のようになります。
http.get()
http.get()
はすべてhttpモジュールによって内部的に保存され、その特定のネットワーク要求に関連付けられます。http.get()
は、実行が完了するまで実行を継続し、制御をシステムに戻します。http.get()
。そのため、非同期ディスクI / O、ネットワーク操作などのさまざまな操作は、(Javascriptエンジンではなく)ネイティブコードによって制御されているため、バックグラウンドで実行できます。そのネイティブコードには、必要に応じてスレッドを使用する機能があります。fs
モジュールは、スレッドを使用するnet
モジュールは、ネイティブOSはすでに非同期ネットワーク操作をサポートしていないため。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加