js为何是单线程

先看一个比喻

进程就是一个公司,每一个公司都有本身的资源能够调度;公司之间是相互独立的;而线程就是公司中的每一个员工(你,我,他),多个员工一块儿合做,完成任务,公司能够有一名员工或多个,员工之间共享公司的空间浏览器

什么是进程?

进程:是cpu分配资源的最小单位;(是能拥有资源和独立运行的最小单位)多线程

什么是线程?

线程:是cpu调度的最小单位;(线程是创建在进程的基础上的一次程序运行单位,一个进程中能够有多个线程)dom

浏览器是多进程的

放在浏览器中,每打开一个tab页面,其实就是新开了一个进程,在这个进程中,还有ui渲染线程,js引擎线程,http请求线程等。 因此,浏览器是一个多进程的。ui

你们都在说js是单线程的,可是为何要设计成单线程?

这主要和js的用途有关,js是做为浏览器的脚本语言,主要是实现用户与浏览器的交互,以及操做dom;这决定了它只能是单线程,不然会带来很复杂的同步问题。 举个例子:若是js被设计了多线程,若是有一个线程要修改一个dom元素,另外一个线程要删除这个dom元素,此时浏览器就会一脸茫然,不知所措。因此,为了不复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,未来也不会改变线程

为了利用多核CPU的计算能力,HTML5提出Web Worker标准,容许JavaScript脚本建立多个线程,可是子线程彻底受主线程控制,且不得操做DOM。因此,这个新标准并无改变JavaScript单线程的本质。