javascript的运行机制

javascript为什么是单线程的?

javascript设计之初就是用来处理页面交互,DOM操作的。如果是多线程的话,一个线程修改DOM,一个线程删除该DOM,浏览器就不知道该以哪个为准了。

所以为了避免复杂性,从一诞生起,javascript就是单线程的。这也是这门语言的一个特性,将来也不会改变。

为了利用多核CPU的计算能力,html5提出webWorker标准,允许javascript创建多个线程,但该子线程完全受主线程控制,且不得操作DOM,所以这个标准并没有改变javascript单线程的本质。

事件循环(Event Loop)

受单线程限制,javascript执行代码顺序是至上而下。同步任务排队执行,遇到异步事件的时候会把异步事件挂起到任务队列(task quene)。主线程的任务在执行的时候会产生堆(heap)和栈(stack),栈中代码会调用各种外部API,又会挂起一些异步事件。当执行栈中代码执行完毕之后,主线程就会读取任务队列,按照先入先出的原则,依次处理。这个过程中又会遇到宏任务微任务的事件。主线程会优先处理微任务,当微任务被处理完毕后,再去处理宏任务(例如setTimeout...),此时其他宏任务会在任务队列里依次排队等待执行。主线程如此循环往复的运行机制又被称为Event Loop

主线程&&事件队列.jpg
Event Loop.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容