js运行机制 事件循环(event loop)

       你可能知道,Javascript语言的执行环境是"单线程"(single thread)。所谓"单线程",就是指一次只能完成一件任务。js发明者之所以设置为单线程,是基于js的应用场景,最初的js是用来操作dom的,优化用户体验的,由于用户同一时间只能做一件事,会减少bug,(比如同时添加或者删除dom),所以设置为单线程

单线程同步执行

       如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。虽然这是js执行原理,但是我们在项目中,难免会遇到一些实际问题,这就是现实与理想的差距,我们理想的是按步骤执行,避免出错。

任务队列异步循环执行

       但是如果项目比较大,而且某些函数非常占内存,耗时间,比方有10个函数排队执行,第二个函数里面有一个异步setTimeout函数等待50秒后console.log("时间到"),难道我们让所有函数都去等待这50秒吗?不会的,我们要开始变通了,这时候就出现了任务队列,所有异步操作被放到了任务队列里面排队,数据结构为栈,先存先执行,注:所有的异步操作都是在同步程序执行完毕后才开始从任务队列转移到主线程执行,循环判断是否还有未执行异步任务

process.nextTick:

在同步操作之后,异步操作之前

setImmediate:

当循环结束进行

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值