0

私のバックグラウンドは主にサーバー開発者およびマネージャーですが、フロントエンドおよび iOS 開発者に参加して仕事をしなければなりません。私はこの質問を論争にならないようにしていますが、ネットワーク要求に関してJavascriptのシングルスレッドの性質が何を意味するのか本当にわかりません。

ユーザー空間レベルでイベントが Javascript および iOS に登録される方法を理解しています。私の質問は、ネットワーク リクエストがバックグラウンド スレッドに置かれていない場合、iOS の UI がブロックされるということです。ただし、ブラウザー/javascript ランタイムでは、そうはなりません。Javascript (少なくとも現在の実装/Web ワーカー以前) は、常にシングルスレッドとして記述されています。setInterval を使用して完了を確認する方法は理解していますが (特に iOS が持っていないことを考慮して)、シングルスレッドの Javascript ランタイムが UI をブロックしない非同期関数をどのように持つことができますか?それ)?たとえば、この回答では、5 つのスレッドを作成する必要があるように思われます: jQuery を使用した並列非同期 Ajax リクエスト

実際、一度に 6 つのアウトバウンド ネットワーク要求を持つことができます。JavaScript ランタイムがシングルスレッドとして記述されている場合、これは iOS のマルチスレッドの概念 (より正確には、ソケット記述子を処理するための pthread_create を使用した while ループの POSIX 概念) とは根本的に異なることを意味しますか?

私はおそらく何かを得ていませんが、提供されている例のほとんどは、これがシングルスレッド環境で実際にどのように行われるかを理解していないと思います (ネットワーク要求が Javascript ランタイムレベルではなく OS レベルで考慮されない限り)

これについての助けがあればthx

4

2 に答える 2

1

このSOを読むことを検討してください: How does non-blocking IO work in javascript

それが言及しているのは、javascriptがイベントループベースであることです。つまり、非同期http-requestを構築するときです。ajax 呼び出しを実行し、(コールバック メソッドを実行するために) eventlistener を登録してから、キューに入れられた残りの作業を続行します。応答が戻ってくると、リスナーは登録したコールバック メソッドを起動します。

于 2013-08-20T18:47:28.630 に答える