作者:杨静怡崇志 | 来源:互联网 | 2023-09-06 17:24
Javascript为什么是单线程的?
Javascript设计之初就是用来解决页面交互,DOM操作的。如果是多线程的话,一个线程批改DOM,一个线程删除该DOM,浏览器就不晓得该以哪个为准了。
所以为了防止复杂性,从一诞生起,Javascript就是单线程的。这也是这门语言的一个个性,未来也不会扭转。
为了利用多核CPU的计算能力,html5
提出webWorker
规范,容许Javascript创立多个线程,但该子线程齐全受主线程管制,且不得操作DOM,所以这个规范并没有扭转Javascript单线程的实质。
事件循环(Event Loop)
受单线程限度,Javascript执行代码程序是至上而下。同步工作排队执行,遇到异步事件的时候会把异步事件挂起到工作队列(task quene)。主线程的工作在执行的时候会产生堆(heap)和栈(stack),栈中代码会调用各种内部API,又会挂起一些异步事件。当执行栈中代码执行结束之后,主线程就会读取工作队列,依照先入先出
的准则,顺次解决。这个过程中又会遇到宏工作
和微工作
的事件。主线程会优先解决微工作
,当微工作
被处理完毕后,再去解决宏工作
(例如setTimeout…),此时其余宏工作
会在工作队列里顺次排队期待执行。主线程如此周而复始的运行机制又被称为Event Loop
。