zoukankan      html  css  js  c++  java
  • JavaScript单线程

     

        JavaScript的单线程源于其需要与用户进行交互,通过响应用户的操作作出相应的反应。如果非单线程,那么当用户执行两个相互矛盾的操作时,都需要得到响应,那么究竟是哪一个先哪一个后呢?因此,为了避免这种矛盾,JavaScript总是单线程执行。

        JavaScript任务分为两种:同步任务、异步任务。同步任务位于主线程上,形成一个执行栈,后一个任务的执行需要依赖于前一个任务的执行结束;而以不变任务位于任务队列中,暂时不进入主线程,其需要等待主线程上的任务执行完,且自己需要的资源得到,再利用回调函数执行该任务。即主线程上的任务执行结束之后才会调用任务队列中的任务。其中定时器(setTimeout()和setInterval())也放置在任务队列中,指定相应的回调函数在多少时间之后执行。

    eg.

    setTimeout(function(){console.log(1);}, 0);
    console.log(2);

    先执行主线程上的任务,即console.log(2);其执行完毕才会执行任务队列中的任务,即第一句的定时器函数。因此会输出2,1。

    ps:当定时器指定的时间到了之后,若前面任务还没有执行完,则继续执行前面的任务,等待任务执行完毕之后立即调用定时器函数。若前面任务已经执行完毕,但定时器的时间还没到,则等待时间到了再执行定时器函数,这个空闲时间段可以先去执行别的任务。

    学习&感谢:

    http://www.ruanyifeng.com/blog/2014/10/event-loop.html

    <<JavaScript高级程序设计>>

    宝剑锋从磨砺出,梅花香自苦寒来。
  • 相关阅读:
    [Clr via C#读书笔记]Cp4类型基础
    [Clr via C#读书笔记]Cp3共享程序集和强命名程
    [Clr via C#读书笔记]Cp2生成打包部署和管理应用程序和类型
    [Clr via C#读书笔记]Cp1CLR执行模型
    试用Markdown来写东西
    字符编码的总结
    常去的网站
    Click Once使用总结
    【LevelDB源码阅读】Slice
    【程序员面试金典】面试题 01.05. 一次编辑
  • 原文地址:https://www.cnblogs.com/haimengqingyuan/p/7216448.html
Copyright © 2011-2022 走看看