jsアクティビティサイクルは何ですか?

2061 ワード

JavaScriptは本当に単一スレッドですか?


これは正しいJavaScriptエンジンは、v 8とECMAScript specを代表的に実現するエンジンが単一スレッドである
これによりcallスタックが形成され、1つの関数のみが実行されます.
しかし、複数のアニメーションを実行しながら機能を実行するため、同期性をサポートしているWebサイトが見られます.
どうやって?マジックですか?
これは、イベントループの非同期方式で同時性をサポートするためである.

だからこれはどのように動作しますか?


イベントループの非同期同期同期化をサポートします.
しかしjavascriptは単一スレッドで、ECMascript specにもイベントループに関する内容はありませんが、どこでやるのでしょうか.
JavaScriptエンジンは自分では動作しません.
ブラウザと一緒に、またはnodejsエンジンと一緒に.
ここではアクティビティループがあります.ちなみに、テクニカルキューとwebapi
JavaScriptは単一スレッドなので、一度に1つの関数しか実行できません.
settimeoutなどの関数が入ってきたらどうしますか?
待っていますか.
いいえ、settimeoutのような非同期webapiがあれば
この関数をブラウザ側で実行し、スキップしてcallスタックからクリアします.
次に、settimeout関数に指定された時間をブラウザで待機します.
対応するコールバック関数をtaskqueueに挿入します.
そしてここでアクティブサイクル
이벤트 루프가 하는 일은 콜스택이 비어있는지 확인하고 비었다면 태스크큐에 있는 함수를 콜스택에 집어 넣어 실행하는 역활을 한다.
従って、非同期同期同期を実現することができる.
しかし、非同期キューにはtaskqueueだけではありません.
いわゆるマイクロキューやアニメーションフレームワークもあります.
簡単に言えば
microqueueはtaskqueueよりも優先度の高いキューです
代表的なのはpromiseが非同期操作時にコールバック関数をキューに入れることです.
アニメーションフレームアニメーション非同期関数をcallスタックに挿入
すなわち,各キューは異なる優先度のために生成されると推測する.
優先順位:
マイクロキュー>アニメーションフレーム>タスクキュー.
キューが左からコールバック関数を含む場合
アクティブループはcallスタックに優先的に配置されます.
だからこれは重要ですか?!
わかりませんが、私はまだ実際に働いていない陵墓キノコ開発者なので、
もしあなたがこの知識を持っていたら
プロミスと一時停止関数は非同期だからです.
テストキューに従って実行されるはずですよね?このようにコードする時
Premiss callbackでしか実行できないバグを事前に阻止できるのではないでしょうか.
バグが爆発したとき,仮定を検証するためにもう一つの知識が生まれた.

参考資料(ここはホストですが、これを見てください)


https://meetup.toast.com/posts/89
https://vimeo.com/96425312
https://stackoverflow.com/questions/10680601/nodejs-event-loop
https://ryusm.tistory.com/146