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高级程序设计>>

    宝剑锋从磨砺出,梅花香自苦寒来。
  • 相关阅读:
    【原创】ASP.NET Web开发,实现打印Log日志,步骤详解
    [原创] ASP.NET WEBAPI 接入微信公众平台 总结,Token验证失败解决办法
    Mac安装Linux
    mac下终端的一些命令
    《Python程序设计》题库--摘
    Day 28 类的用法延伸
    Day 27 面向对象补充
    Day 24~26 类,面向对象,属性
    Q 91~100
    Q 81~90
  • 原文地址:https://www.cnblogs.com/haimengqingyuan/p/7216448.html
Copyright © 2011-2022 走看看