javascript为什么是单线程的?

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

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

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

事件循环(Event Loop)

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