|
1
7
JavaScript 语言 ,对线程的话题几乎保持沉默。它是单线程还是多线程取决于它运行的环境。有单线程JavaScript环境,也有多线程的JavaScript环境。该规范唯一真正的要求是线程具有 job queue 并且一旦一个作业(一个要运行的代码单元,如对事件处理程序的调用)启动,它将在线程上运行到完成,然后再启动该队列中的另一个作业。也就是说,JavaScript具有 运行到完成 语义。 浏览器上的JavaScript 不是 单线程,已经好几年没有了。有一个主线程(处理UI的线程) web worker 螺纹。web工作人员没有直接访问UI的权限,他们向UI线程发送消息,并进行UI更新。线程不直接共享数据,而是通过消息传递显式共享数据。这种分离使得编程多线程代码比多线程可以访问UI和相同的公共数据区域时更简单,更不容易出错。(编写正确的多线程代码,任何线程都可以随时访问任何内容 坚固的 .) 在浏览器之外,NodeJS中的JavaScript在单个线程上运行。Node有一个分叉来添加多线程,但我认为它从未出现过。 JVM(Rhino,Nashorn)上的JavaScript一直是多线程的,由JVM的线程功能支持。 |
|
|
2
2
虽然TJC的答案当然是正确的,但我不认为它解决了人们所说的“JavaScript是单线程的”时的实际含义问题。他们实际上总结的(不准确的)是,运行时必须表现得好像只有一个执行线程,不能抢占,必须运行到完成。实际运行时可以做任何它喜欢的事情,只要最终结果是这样的。 这意味着,虽然JavaScript程序看起来可能与许多相互交互的线程大量并行,但实际上并不是这样的 here . 这与硬件描述语言(VHDL、Verilog、SystemC(虽然实际上不是一种语言)等等)面临的问题完全相同。它们给人一种巨大并行的错觉,因为在“进程”之间有一个运行时内核循环,这些进程不可抢占,并且必须运行到定义的挂起点。这样做的目的是确保以确定的、可重复的方式执行模型。 HDL和JS之间的区别在于,这对于HDL来说是非常好的定义和基本的,而对于JS来说则被掩盖了。这是摘自 SystemC LRM ,简要介绍了它-它在 VHDL LRM 例如
|
|
|
code-geek · Jquery根据单选按钮选择隐藏或显示文本字段 1 年前 |
|
|
Alex · 在轻量级中同时解构和不解构变量 1 年前 |
|
|
Ângelo Rigo · ReactJS映射:如何迭代[关闭] 1 年前 |
|
|
bairog · 从按属性筛选的对象数组字典中创建值数组 1 年前 |
|
|
lokiuucx · JS对象属性返回未定义,尽管对象属性应该有值 1 年前 |