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

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

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

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

\

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

\

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

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

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

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

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


感谢郭蕾对本文的审校。

\

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

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

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

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea激活码永久2021【注册码】[通俗易懂]

    idea激活码永久2021【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
  • SpringBoot集成Redis和配置Redis做缓存[通俗易懂]

    SpringBoot集成Redis和配置Redis做缓存[通俗易懂]Redis介绍Redis是一个开源的、高性能的、基于键值对的缓存与存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与存储需求,直观的存储结构使得通过程序交互十分简单。Redis数据库中所有数据都存储在内存中,由于内存的读写速度远快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有非常明显的优势,而且Redis提供了对持久化的支持,即可以将内存中的数据异步写入到硬盘中,且不影…

    2022年9月22日
  • datax(16):源码解读AbstractReporter

    datax(16):源码解读AbstractReporter之前介绍了通信类communication,容器类container,communication的收集类collector,今天再看一个报告类Reporter;一、概述AbstractReporter主要作用:Reporter的主要功能是将收集到的信息上报给上级主要方法:reportTGCommunication(汇报TG的communication信息给上级),reportJobCommunication(汇报job的communication信息给上级)二、族谱族谱里面目前只有父子.

    2022年5月16日
  • java保留两位小数4种方法「建议收藏」

    java保留两位小数4种方法「建议收藏」方法一:String的format方法(推荐)doublef=111231.5585;System.out.println(String.format(“%.2f”,f));方法二:DecimalFormat的format方法doublef=111231.5585;DecimalFormatdf=newDecimalFormat(“#.00”);System.out.println(df.format(f));以下内容了解即可,可以不用看方法三:BigDe

    2022年9月24日
  • 微信定位精灵服务器或网络异常,微信定位精灵系统界面无法更新怎么办

    微信定位精灵服务器或网络异常,微信定位精灵系统界面无法更新怎么办我们在前几篇微博中讲到了如何开始使用微信定位精灵,点击这里传送门,如果需要序列号,可以参考这篇文章《微信定位精灵免费序列号赠送》而我们看到很多用户在使用的过程中遇到了一些这样或者那样的问题,在这里我们专门来解决一下这些问题。微信定位精灵地图界面不更新这是一个很多用户都会遇到的问题。根据我们这边的经验,但凡是遇到微信定位精灵地图界面不更新,无非是有这么几个原因:1、手机端当前无网络、或者信号不佳;2…

    2022年5月30日
  • 前端学习学习再学习

    译注:本文翻译自谷歌工程师PhilipWalton的一篇博客。看过之后非常有感触,很多观点都是自己长期非常坚持和认同的,所以翻译出来分享给更多的前端同学!最近我收到一封读者来信让我陷入了思考,信

    2021年12月22日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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