关于javascript:javascript的运行机制

9次阅读

共计 559 个字符,预计需要花费 2 分钟才能阅读完成。

javascript 为什么是单线程的?

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

所以为了防止复杂性,从一诞生起,javascript 就是单线程的。这也是这门语言的一个个性,未来也不会扭转。

为了利用多核 CPU 的计算能力,html5提出 webWorker 规范,容许 javascript 创立多个线程,但该子线程齐全受主线程管制,且不得操作 DOM,所以这个规范并没有扭转 javascript 单线程的实质。

事件循环(Event Loop)

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


正文完
 0