JavaScript运行机制详解:再谈Evemt

1.why 单线程?

  • JavaScript目的是与用户互动+操作DOM,非单线程带来复杂同步问题;EXAMPLE:有两个线程 一个在DOM节点上添加内容,另外一个又在删除这个点。浏览器听谁的?
  • 新标准 HTML5提出web worker标准,允许JavaScript创建多线程,但是子线程完全受主线程控制,且不得操作DOM。没有改变其本质。
  • 弊端 单线程运行那后面的排着等你。

2. 任务队列

很多时候IO(乌龟)限制CPU(兔子)的发挥。
所以把IO里面的任务?

将任务分成同步与异步。

  • 同步:主线程上排队进行的任务。按序执行。
  • 异步:不进入主线程、而进入任务队列的任务。只有去通知主线程某个异步任务可执行了,该任务才会进入主线程执行。
  • 同步执行
image.png
  • 异步执行
    image.png

    上图主线程的绿色部分,还是表示运行时间,而橙色部分表示空闲时间。每当遇到I/O的时候,主线程就让Event Loop线程去通知相应的I/O程序,然后接着往后运行,所以不存在红色的等待时间。等到I/O程序完成操作,Event Loop线程再把结果返回主线程。主线程就调用事先设定的回调函数,完成整个任务。
    可以看到,由于多出了橙色的空闲时间,所以主线程得以运行更多的任务,这就提高了效率。这种运行方式称为”异步模式“(asynchronous I/O)。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容