javascript是如何实现异步的呢

发布时间:2021-09-30 15:34:34 作者:柒染
来源:亿速云 阅读:145

javascript是如何实现异步的呢,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

  我们知道javascript是单线程的,但是为什么有很多的事件处理却是异步的呢?javascript的单线程的意思是,只有一个主线程来解释执行javascript代码。那么javascript是如何实现异步的呢?

  异步的过程

  首先,主线程发起一个异步请求,相应的工作线程就接收这个请求并进行处理,期间,主线程发完请求之后就去干别的事情去了。等到工作线程的处理有了结果,浏览器内部就分配一个线程出来,通知主线程,刚刚发起的异步请求有了结果(这个通知过程其实是将回调函数推入消息队列中,也叫事件队列,也叫任务队列),等到主线程处理完了当前调用栈中的任务,就会从这个消息队列中读取消息,也就是调用回调。这样就完成了一次读取消息的循环。

  而javascript执行代码的机制就是不断地从消息队列中读取消息回调并执行的过程。因为每条消息(或者说每个回调)都是由相应的事件(比如鼠标点击,ajax,定时器事件等)触发的,所以这个过程称之为事件循环。

  异步的任务

  上面把消息推送到事件队列的这个过程中,如果工作线程处理的任务既有宏任务,也有微任务,则优先处理宏任务,然后把对应宏任务的消息推送到宏任务消息队列中;然后工作线程再处理微任务,接着把对应微任务的消息推送到微任务的消息队列中。

  注意,宏任务消息队列与微任务消息队列不是同一个队列

  当主线程处理完当前调用栈中的任务后,优先从微任务消息队列中读取消息,也就是先执行微任务的回调,等到微任务的消息队列为空,再去读取宏任务的消息队列。

  注意区分推送顺序和读取顺序。

  由此,js中的任务分为同步任务和异步任务

  同步任务是指:当前主线程将要消化执行的任务,这些任务一起形成执行栈(executioncontextstack)。

  异步任务是指:不进入主线程,而是进入任务队列(taskqueque),即不会马上进行的任务。

关于javascript是如何实现异步的呢问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

推荐阅读:
  1. nginx是如何实现负载均衡的呢
  2. HTTPS是如何加密的呢

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

javascript

上一篇:如何通过CSS样式来修改ExtJS:TreePanel的小图标

下一篇:如何解决页面在360浏览器下显示不正常的兼容性问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》