为啥JavaScript是单线程?

为啥JavaScript是单线程?_第1张图片

思考:JavaScript语言的一大特点就是单线程。也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。

JavaScript的单线程,与它的用途有关。

作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。

比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?

若以多线程的方式操作这些 DOM,则可能出现操作的冲突。

假设有两个线程同时操作一个 DOM 元素,线程 1 要求浏览器删除 DOM,而线程 2 却要求修改 DOM 样式,这时浏览器就无法决定采用哪个线程的操作。

所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变。

注意:为了利用多核CPU的计算能力,HTML5提出Web Worker标准

允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。所以,这个新标准并没有改变JavaScript单线程的本质。

 JavaScript 是单线程导致的另一后果

所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着;

由于JavaScript是单线程的,在某一时刻内只能执行特定的一个任务,并且会阻塞其它任务执行。

那么对于类似 I/O 等耗时的任务,就没必要等待他们执行完后才继续后面的操作。

在这些任务完成前,JavaScript 完全可以往下执行其他操作,当这些耗时的任务完成后则以回调的方式执行相应处理。这些就是 JavaScript 与生俱来的特性:异步与回调

我们放在下篇分析异步回调特性。

你可能感兴趣的:(浏览器,Javascript,javascript,chrome,前端)