当前位置: 首页 > 面试题库 >

为什么JavaScript不支持多线程?

邵刚洁
2023-03-14
问题内容

是当今的浏览器是否经过深思熟虑的设计决策或存在问题,这些问题将在以后的版本中得到解决?


问题答案:

JavaScript不支持多线程,因为浏览器中的JavaScript解释器是单线程(AFAIK)。甚至谷歌浏览器也不允许单个网页的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

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



 类似资料:
  • 本文向大家介绍为什么Java不支持<<相关面试题,主要包含被问及为什么Java不支持<<时的应答技巧和注意事项,需要的朋友参考一下 Java添加了运算符“ >>>”来执行逻辑右移,但是由于 逻辑和算术左移运算是相同的 ,因此Java中没有“ <<<”运算符。 来自Java的Shifts …

  • 在EpolDatagramChannelConfig类中,有4个方法如下所示: 这些是: SETLOOPBACKMODE已禁用 是否由于Netty中的问题而禁用了支持,或者EPoll根本不支持UDP多播? 谢谢

  • 我注意到一件奇怪的事情,显然Firefox说它支持HTTPS上的Brotli,但不支持HTTP?Brotli与gzip类似,但效率更高,为什么它会将其限制为HTTPS?在HTTPS选项卡上,我看到: 他被派去了。但在另一个网站上,我没有看到。为什么它不能做Brotli压缩HTTP?

  • 输出 pytz 只支持 上海时间,不支持 北京时间 但是上海时间有一个很恶心的地方,会比北京时间多 6 分钟 同样的问题,在我使用一些 linux 发行版(带GUI)的时候,也遇到过这样的问题,只能设置上海时间,没有北京时间可以选 why?是有什么国际法规定吗? 不过 python3.9 内置的 zoneinfo,但是不会出现多 6 分钟的问题 输出如下:

  • 问题内容: Java为什么不包括对无符号整数的支持? 在我看来,这是一个奇怪的遗漏,因为它们允许人们编写不太可能在意外大的输入上产生溢出的代码。 此外,使用无符号整数可以是一种自我证明的形式,因为它们指示无符号int打算保留的值永远不会为负。 最后,在某些情况下,无符号整数对于某些操作(例如除法)可能更有效。 包括这些的不利之处是什么? 问题答案: 在两行之间阅读时,我认为逻辑是这样的: 通常,J

  • 问题内容: 我已经多次看到,负填充的前景可能会帮助某些页面元素的CSS开发变得越来越好。但是,W3C CSS中没有负填充的规定。这背后的原因是什么?该属性是否有阻碍其使用的阻碍?感谢您的回答。 更新 例如,我看到的情况是,如果您使用的字体的垂直间距为20px,并且希望在字体底部应用虚线边框,例如出现超链接时。在这种情况下,您会发现样式太简陋,因为虚线边框会出现在指定单词下方20px。如果您使用负边