JavaScript 是单线程的吗?

Is JavaScript single threaded?

很明显nodeJs是单线程的。但是JavaScript作为一种语言也是单线程?

Javascript 本身并不是一种单线程或多线程语言。有些 Javsacript 环境不提供 Javascript 线程,有些环境提供 Javascript 线程。语言本身不指定单线程或多线程。相反,是否要使 Javascript 的线程可用取决于环境。

所以,对于你的具体问题:

Is JavaScript single threaded?

没有。它不是特定的单线程或多线程。语言规范也不需要。 Javascript的线程要靠运行时的环境来实现。碰巧浏览器和 node.js 开始时都没有 Javascript 线程和事件驱动的架构,这导致了 Javascript 环境中没有线程的概念,但是有.他们现在都提供 Javascript 线程(浏览器中的 WebWorkers 和 node.js 中的 WorkerThreads)。

Javascript 规范提供了一些在多线程环境中有用的功能,例如 SharedArrayBuffer 对象和 Atomics,提供线程的环境提供了额外的库。因此,当前的语言规范承认了多线程的一些需求并为其提供了一些工具,尽管没有具体要求 Javascript 运行time 有或没有线程。他们是否要向 运行 多个 Javascript 并行执行线程提供该功能取决于 运行 时间。