javascript - Problem mit dem JS-Mechanismus. Sollten wir warten, bis die Ausführung des Hauptthreads abgeschlossen ist, bevor wir ihn asynchron ausführen, oder ist er kontextbezogen?
为情所困
为情所困 2017-07-05 11:07:37
0
1
975

1. Wie bei der Frage möchte ich eine Frage zum js-Mechanismus stellen. Muss man warten, bis die Ausführung des Hauptthreads abgeschlossen ist, bevor asynchrone Vorgänge ausgeführt werden?
2. Detaillierte Erklärung des JavaScript-Ausführungsmechanismus: Lassen Sie uns noch einmal über die Ereignisschleife sprechen. Was Ruan Laoshi gesagt hat, ist: Erst nachdem der Hauptthread die Ausführung abgeschlossen hat, wird die Aufgabenwarteschlange gelesen.
3. Heute habe ich den Begriff Kontext gehört, was wahrscheinlich bedeutet, dass eine asynchrone Operation nur darauf wartet, dass der Hauptthread im selben Kontext ihre Ausführung abschließt. ohne auf andere Kontexte warten zu müssen. Ich habe heute lange gesucht, aber keine ähnlichen Artikel gefunden. Bitte geben Sie mir eine Antwort! !

为情所困
为情所困

Antworte allen(1)
过去多啦不再A梦

你把很多东西感觉弄混了,还有阮一峰的文章。。。批判是阅读。。他那文章。。还有很多概念错误的。。
以下是一篇是朴灵的批注:可以参考看一看

  1. 朴灵批注版本

  2. nodeJS 官方文档 evenloop process.nextTick timers 关系

我的理解是node 主线程跑线程代码,只有文件I/O,网络I/O,timer才会是异步事件,才会进入异步队列,平常你写的代码都是同步的,
比如你有一下一段程序

    setTimeout(function(){
        console.log('test');
    },10);//本来应该是10ms后输出test
    
    for(var i=0;i<10000000;i++){
        //但是这个空的for循环执行了50ms
    }
    //for占住了主线程,倒地timer 事件已经到达触发条件,但是主线程被占用
    //不能去请求完成的事件队列。
    //所以test 会在50ms后输出

至于那个上下文的概念,我理解的并不透彻 不知道应该算在那一块里面,希望大牛给建议。。欢迎拍砖或者踩,请告知错误的地方。。嘿嘿

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage