Mozilla正在SpiderMonkey中測試JavaScript并行計算
原文 http://www.infoq.com/cn/news/2015/03/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每日構建版本 中已經提供了原型實現,感興趣的讀者可以下載試用并提供反饋。