说JavaScript是一种"单线程"语言是否准确?

Der*_*ang 6 javascript

我多次听过这种说法,但我个人认为这没有多大意义.我认为人们在实践中将JavaScript作为语言规范和JavaScript混淆(浏览器,节点等).当然,在大多数情况下,JavaScript是在单线程环境中执行的; 但AFAIK在语言规范中没有任何要求它.我认为这就像说Python被"解释",而实际上它完全是一个实现问题.

那么,说JavaScript是一种"单线程"语言是否准确?

Den*_*ret 7

通过JavaScript你似乎意味着ECMAScript.

浏览器中已经存在多线程,由Web工作者构建,并且基于强大的数据隔离:工作者只通过消息传递进行通信,没有任何共享.

如果你想要更复杂的多线程,数据共享,那么现在看起来不可能.ECMAScript中的任何内容都没有明确禁止多线程,但是没有多线程就无法进行多线程处理

  • 创建"线程"的设施(在一般意义上,可能是协同程序)
  • 用于同步访问的互斥锁和工具
  • 低级别支持以确保例如属性更改不会在同时访问的情况下破坏数据.当前的引擎都没有设计出这种强度(是的,它们中的一些支持多线程但是孤立的).

事实上ECMAScript不包含多线程这一事实足以阻止它支持它(除了已经完成的消息传递隔离多线程,但它是一种非常有限的多线程).

你必须意识到这一点

  • 数据共享多线程非常昂贵(甚至没有谈到DOM上的同时操作)
  • 你很少在JavaScript中使用它

为什么我说你很少使用它?因为大多数IO阻塞任务(文件读取,请求,数据库查询等),大多数低级任务(例如图像解码或页面呈现),大多数UI管理(带事件队列),大多数调度(超时和间隔)在外面完成.


Yus*_*f X 2

多线程行为在 HTML5 和 Node.js 中都可用,但是 Javascript 语言中没有本机线程 API,所以我猜你的人为问题的答案(当然,我的意思是,以最好的方式)是“是的,Javascript 是一种单线程语言。”