单线程和异步队列
来源:互联网 发布:中日友好靠韩国知乎 编辑:程序博客网 时间:2024/04/30 20:18
setTimeout和setInterval是JS内置的两个定时器,使用很简单,但这两个方法背后的原理却不简单。
我们知道,JS是单线程语言,在浏览器中,当JS代码被加载时,浏览器会为其分配一个主线程来执行任务(函数),主线程会形成一个全局执行环境,执行环境采用栈的方式将待执行任务按顺序依次来执行。
但在浏览器中有一些任务是非常耗时的,比如http请求、定时器、事件回调等,为了保证其他任务的执行效率不被影响,JS在执行环境中维护了一个异步队列(也叫工作线程),并将这些任务放入队列中进行等待,这些任务的执行时机并不确定,只有当主线程的任务执行完成以后,才会去检查异步队列中的任务是否需要开始执行。这就是为什么setTimeout(fn,0)始终要等到最后执行的原因。关于单线程和异步队列问题请参考:setTimeout(0)
阅读全文
0 0
- 单线程和异步队列
- 异步和单线程
- 异步和单线程
- JS单线程、任务队列与异步
- javascript异步和单线程
- js 异步和单线程
- js的异步和单线程
- JavaScript 的异步和单线程
- js的单线程和异步
- js的单线程和异步
- js的单线程和异步
- 单线程、事件循环和异步IO
- js的单线程和异步
- JavaScript单线程和异步机制
- javascript中的异步和单线程
- JavaScript单线程和异步机制
- js的单线程和异步
- js的单线程和异步
- SSH框架搭建和整合(struts2、spring4、hibernate5)
- Hashtable实现原理及源码分析
- Java CyclicBarrier的用法
- 四则运算(递归)
- HDU 3374 String Problem (KMP+最大最小表示)
- 单线程和异步队列
- synchronized关键字
- JavaScript面向对象的程序常用的继承方式有哪些?
- vmvare 连接 gns3并实现互联互通
- 框架基础——全面解析Java注解
- [生而为人-思考] 《人类简史》个人摘抄(时隔两年再读尤瓦尔•赫拉利)
- 高精度--大数减法 luogu 2142
- python学习——类属性与实例属性
- IE6 BUG的解决方法