Mozilla正在SpiderMonkey中测试JavaScript并行计算

Mozilla正在SpiderMonkey中测试JavaScript并行计算

Mozilla正致力于实现JavaScript“并行(parallelism)计算”,以便充分利用硬件性能。Dave Herman是Mozilla Research的首席研究员和策略总监。近日,他在一篇博文中提到,他们正在其JavaScript引擎SpiderMonkey中进行相关实验。\

他们试图通过一种底层的、渐进的方法为JavaScript添加更加灵活和强大的并行计算原语。他首先指出:\

\

我正在谈论的不是“并发(concurrency)”……JavaScript的异步并发模型很受欢迎,也取得了成功,而且promisesES6 generators和即将到来的async/await正使它变得越来越好。

\

这里要探讨的是可以释放设备(GPU、SIMD指令及多内核处理器)潜能的并行计算。Web Workers已经在多核并行计算方面做了一些工作,但其工作线程是完全隔离的,只能通过postMessage进行通信。\

还有一种方案比较激进,就是像Nashorn那样将JavaScript变成一种完全多线程的数据模型。不过,那需要宿主Java程序小心地同步脚本,否则,JavaScript应用程序无法得到“运行至完成(run-to-completion)”的保证。而且,这个过程会伴随大量的标准化和实现工作,进而会带来生态系统方面的风险。\

另一方面,Mozilla Research和Intel Labs这些年来也在确定性并行计算API(有人称为River TrailPJS)方面做了一些实验。但他们选择了一种很困难的方法,因为很难找到一种足够通用的高级模型能够适合各式各样的并行程序。\

于是,他们引入了SharedArrayBuffer类型。不同于PJS,它内置的锁定机制为工作线程带来了新的锁定形式,但同样地,部分对象也可能因此遭受数据争用。不过,与Nashorn不同的是,这种情况只会出现在选择使用共享内存作为后台存储的对象中。如果创建了一个不使用共享缓冲区的对象,那么可以确定,它永远不会出现数据争用。Dave表示,这是一种相对保守的方法,但应该能够满足许多应用场景的需求。实际上,几年前就有人探讨过这种方法。在去年的JSConf大会上,谷歌PNaCI团队的Nick Bray还演示了一个在Chrome中共享缓冲区的原型。\

目前,Dave及其团队正在SpiderMonkey中测试SharedArrayBuffer API,并且正在草拟它的规范Firefox每日构建版本中已经提供了原型实现,感兴趣的读者可以下载试用并提供反馈。


感谢郭蕾对本文的审校。

\

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109535.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • layui table样式_layui table 分页

    layui table样式_layui table 分页table的结构:       序号   登录账号   用户名   权限   操作          ${(user.id)!”}   ${(user.userAccount!”)}   ${(user.userName!”)}   ${(user.

  • Java VisualVM远程监控JVM

    Java VisualVM远程监控JVM

  • IdentityServer4总结[通俗易懂]

    IdentityServer4总结[通俗易懂]一.客户端模式客户端模式只对客户端进行授权,不涉及到用户信息。如果API需要提供到第三方应用,第三方应用自己做用户授权,不需要用到用户资源,就可以用客户端模式,只对客户端进行授权访问api资源。1.添加客户端newClient(){ClientId=”apiClientCd”,//客户端IdClientSecrets={newSecret(“apiSecret”.Sha256())},//客户端密码AllowedGrantTypes=GrantTypes.

    2022年10月29日
  • linux版本i686,在Ubuntu中’i686’是什么意思? – Ubuntu问答

    linux版本i686,在Ubuntu中’i686’是什么意思? – Ubuntu问答问题描述检查我是使用32位还是64位Ubuntu。我查看了如何检查我是否拥有32位或64位操作系统?,发现此答案为uname-a。如果它显示为i386,它将是32位和amd64,它将是64位,但我得到了这个结果:Linuxmukund-ThinkPad-Edge-E4313.8.0-35-generic#50-UbuntuSMPTueDec301:25:33UTC2013i…

  • app真机测试平台_最新app都是在哪里发布的

    app真机测试平台_最新app都是在哪里发布的1、真机测试http://my.oschina.net/joanfen/blog/1677302、发布http://my.oschina.net/joanfen/blog/133642

  • 文件和文件流

    文件和文件流文件和文件流1.File类Java.io.File类可以获取文件以及文件夹的一些基本的属性常用的方法文件名称,路径,大小,判断是否存在,删除,创建//创建一个文件对象(可以是文件,可以是文件夹) Filefile=newFile(“e:/java_text.txt”); //基本属性 booleancanWriter=file.canWrite(); …

    2022年10月24日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号