为什么JavaScript是单线程的?


一直都知道JavaScript是单线程的,可是不是很清楚为什么是单线程的,为什么不是多线程的,这样可以提高效率啊?做笔试题的时候甚至还问JavaScript是单线程还是单进程,用一个进程来忽悠你。

为什么JavaScript是单线程?

单线程:同一个时间只能做一件事

JavaScript的单线程,与他的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这就决定了他只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?

为了利用多核CPU的计算能力,HTML5提出Web Worker 标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。所以,这个新标准并没有改变JavaScript单线程的本质。

JavaScript为什么需要异步

如果JS中不存在异步,只能自上而下执行,如果上一行解析时间很长,那么下面的代码就会被阻塞。对于用户而言,阻塞就意味着"卡死",这样就导致了很差的用户体验。

单线程如何实现异步

通过事件循环(Event loop)来实现的。
参考我的这篇博客 宏任务、微任务

猜你喜欢

转载自blog.csdn.net/weixin_42420703/article/details/82704710