JSシングルスレッドの非同期

スレッドとプロセス:

プロセスは、システムリソースの割り当ておよびスケジューリング単位です。実行中のプログラムは、処理に相当します。Windowsでは、実行中の各アプリケーションが開くかなど、実行中のQQ、Googleのブラウザ、網易のクラウド音楽、エクスプローラなどのバックグラウンドアプリケーションは、すべてのプロセスです。メモリとシステムリソースで実行するために使用される手順およびプロセスを含むプロセス。たとえば、開いて二つのプロセスであるブログのブログの庭を、書きながら、音楽を聴きながら。

スレッドは、プロセスは、少なくとも一つのスレッド(メインスレッド)オープンになり、あなたはまた、複数のスレッドを開くことができ、プロセスの下で実行者です。網易雲が再び再び音楽、ディスプレイの歌詞をプレイするなど、網易クラウドはプロセスであり、音楽を再生し、表示する歌詞は、プロセス網易クラウド内の2つのスレッドです。

同期および非同期:

同期非同期は、プログラムの行為を指します。結果が返されるまで、同期プログラムを呼び出す時は、待ちます。それは無駄に前に戻りません。言い換えれば、同期は、呼び出し元のアクティブプロシージャ呼び出しを待っています。

非同期呼び出しを発行した後、すぐに返されますが、すぐに結果を返しません。呼び出し側は、発信者が発信者に通知するためにイニシアチブの結果を得るだろうと、イニシアチブを待つ必要はありません。

上記の概念は、より正式な、理解するのが難しいかもしれません。人気の、つまり、あなたはパンケーキを販売することを行く、と上司はあなたが手渡さ待つその後、あなたはプロセスを取ることができ、同期です。あなたは、その後、エンドポイントの後、KFCの食事に座って携帯電話を再生する場所を移動し、他のよく、後に弟の妹は、あなたの番号通知処理は非同期でピックアップするフロントデスクと呼ばれます。同期は仕事を終えるために、何かの唯一の作品で、もう一つはやります。むしろ、非同期よりも、非同期プロセスでは、一つのことを行うことのために、あなたは他のことを行うことができます待っています。これは、同期および非同期の区別です。

console.log(1 
はconsole.log(' 同期' 
はconsole.log(2 // 1
 // 同期
 // 2
console.log(1 
のsetTimeout(() => {にconsole.log(' 非同期')}、0) 
にconsole.log(2 // 1
 // 2
 // 非同期

 

ブラウザは、シングルスレッドまたはマルチスレッドのですか?---マルチスレッド

ブラウザは、通常、次の恒久的なスレッドがあります。

- レンダリングエンジンのスレッド:名前が示すように、このスレッドがページをレンダリングする責任があります。

- JSエンジン:JSの解析と実行の責任

- クロックされるフリップフロップスレッド:このようなのsetTimeout、のsetIntervalなどのプロセス時限イベント

取り扱いDOMイベント: - イベントがスレッドをトリガー

- 非同期HTTPリクエストのスレッド:HTTPリクエストの処理

JSブラウザのみタスクを実行するためにメインスレッドに割り当てることが、唯一つのタスクを実行することができ、これらのタスクが並んで待っているタスクの実行キューを形成し、ただし、特定のタスクフロントエンドには、それらを許可すれば、非常に時間がかかります他のタスクは、正直な実行のためにキューに入れられていると、効率が非常に低いこと、さらには仮死のページにつながります。だから、これらの時間のかかるブラウザにタスクは、それのような、別のスレッドを開きます:リクエスト、ブラウザ時限トリガは、これらのタスクは、非同期などあるのhttp、

 これは、シングルスレッドおよび非同期それはパラドックスではないですJS?シングルスレッドおよび非同期本当に言語の特性の両方をすることはできません、jsがシングルスレッドの言語になることを選んだので、それ自体で非同期することはできませんが、その他のJSホストブラウザ、ノードは、何らかの方法で環境をホスティングしてマルチスレッド化されましたjsの非同期な性質を持っています。

タスクキュー

同期および非同期タスクのタスク、メインスレッドのタスクを実行するためだけのお金は、タスクの実行前に、終了したタスクをキューに入れられたタスクの同期手段にjsのタスク。非同期タスク:メインスレッドを入力して、タスクのみ「タスクキューは、」メインスレッド、非同期タスクを実行することが可能に通知する「タスク欄」を入力しないでください。タスクは、メインスレッドを入力します。

の実施のための非同期操作機構:

- メインスレッド上のすべての同期タスクは、[エグゼクティブ]スタックを形成します

- メインスレッド外で、「タスクキュー。」があります 非同期タスクがある限り、結果として実行すると、イベントが自宅で「タスクキュー」に置かれています。

- 「実行スタック」同期タスクのすべての種類が終了すると、システムは、実行スタックに、このように待機状態を終了し、それらの対応する非同期タスクが何であるかのイベントを参照するには、「タスクキュー」をお読みになる始めました。

- メインスレッドは、上記の第3工程を繰り返します。

コールバック関数

メインスレッドが実行非同期タスクを開始すると、対応するコールバック関数を実行することです。

非同期タスクは、コールバック関数を指定する必要があります。

非同期タイマー内のjs

setTimeout(関数(){ 
  にconsole.log(0 ); 
}、0 
 
にconsole.log(1)。
// 1
// 0

時間のかかるタスクがある場合、それはメインスレッドが実行する前にアイドル状態であるのを待っているキュー内のジョブを配置します。実際のプロセスは、次に実行されると、ブラウザは方法のこの種は、時間のかかる手順(これは時間がかかることがないかもしれないが)であるのsetTimeoutとAJAXリクエストをデフォルト設定されます。だから、この時間のsetTimeoutでそれオフ時間は0ですが、しかし、印刷0、その後のsetTimeoutコールバック関数を実行し、印刷後のタスクの実行スタックを実行して同期が1のとき、jsはすぐに発生しませんが、それはタスクキューに追加しました。

早い利用可能な空き時間のメインスレッド上でタスクの実行を指定したsetTimeout(FN、0)の意味。計画では、重点を置い::: 可能できるだけ早く。そののsetTimeoutコールバック関数は、現在のタスクキューに追加され、現在のタスクが長時間待たに時間がかかりすぎる、それをオフに確保する方法があります、コールバック関数は、指定された時間内に実行されます。

 

おすすめ

転載: www.cnblogs.com/mn6364/p/10940102.html