为什么JavaScript不支持多线程?

这是一个深思熟虑的设计决定,还是我们现在的浏览器存在的问题,这些问题将在未来的版本中得到纠正

JavaScript不支持多线程,因为浏览器中的JavaScript解释器是单线程(AFAIK)。即使Google Chrome也不会让单个网页的JavaScript同时运行,因为这会在现有网页中造成大量并发问题。Chrome所做的只是将多个组件(不同的选项卡、插件等)分离到不同的进程中,但我无法想象一个页面有多个JavaScript线程

但是,正如建议的那样,您可以使用setTimeout来允许某种调度和“假”并发。这会使浏览器重新控制渲染线程,并在给定的毫秒数后启动提供给setTimeout的JavaScript代码。如果希望在对视口执行操作时刷新视口(所看到的内容),这将非常有用。只需循环遍历(例如坐标)并相应地更新一个元素,就可以看到开始和结束位置,两者之间没有任何内容

我们在JavaScript中使用一个抽象库,它允许我们创建由同一个JavaScript解释器管理的进程和线程。这允许我们以以下方式运行操作:

  • 进程A,线程1
  • 进程A,线程2
  • 进程B,线程1
  • 进程A,线程3
  • 进程A,线程4
  • 进程B,线程2
  • 暂停进程A
  • 进程B,线程3
  • 进程B,线程4
  • 进程B,线程5
  • 启动进程A
  • 进程A,线程5

这允许某种形式的调度和伪并行、线程的启动和停止等等,但它不是真正的多线程。我认为它永远不会在语言本身中实现,因为真正的多线程只有在浏览器可以运行单页多线程(甚至多个核心)时才有用,而且困难远远大于额外的可能性

关于JavaScript的未来,请查看以下内容:
https://developer.mozilla.org/presentations/xtech2006/javascript/

发表评论