当前位置: 首页 > news >正文

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)关注我们,并与我们的编辑和其他读者朋友交流。

相关文章:

  • [剑指offer] 二叉树的镜像
  • PHP下用B/S编程模式去实现C/S软件编程模式下的插件引擎功能!
  • Vue创建五:导出及配置文件解析
  • 监测谁用了SQL Server的Tempdb空间
  • JavaScript面向对象程序设计(7): 闭包
  • Java NIO系列教程(十二) Java NIO与IO
  • Session,cookie,localStorage
  • Android拓展系列(12)--使用Gradle发布aar项目到JCenter仓库
  • VsCode编辑器
  • jQuery中的Ajax----05
  • Apache Zeppelin连接Oracle数据库
  • 测试数据库大小
  • Nginx配置文件详细说明
  • Android OpenGLES绘制天空盒
  • 【目录】微软Infer.NET机器学习组件文章目录
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • iOS编译提示和导航提示
  • Promise面试题2实现异步串行执行
  • TypeScript实现数据结构(一)栈,队列,链表
  • underscore源码剖析之整体架构
  • Vue.js-Day01
  • 关于Java中分层中遇到的一些问题
  • 基于web的全景—— Pannellum小试
  • 蓝海存储开关机注意事项总结
  • 使用 Docker 部署 Spring Boot项目
  • 事件委托的小应用
  • 手写一个CommonJS打包工具(一)
  • 微信小程序开发问题汇总
  • 正则表达式
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ###STL(标准模板库)
  • $.each()与$(selector).each()
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (10)ATF MMU转换表
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (十一)c52学习之旅-动态数码管
  • (转)Scala的“=”符号简介
  • (转载)Google Chrome调试JS
  • .gitignore文件设置了忽略但不生效
  • .net core 依赖注入的基本用发
  • .Net中的设计模式——Factory Method模式
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • /bin/rm: 参数列表过长"的解决办法
  • @EnableConfigurationProperties注解使用
  • @RequestBody与@ModelAttribute
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [BZOJ] 3262: 陌上花开
  • [CISCN2021 Quals]upload(PNG-IDAT块嵌入马)
  • [CSS3备忘] transform animation 等
  • [CTSC2014]企鹅QQ