We use cookies to provide you with a better experience. If you continue to use this site, we'll assume you're happy with this. Alternatively, click here to find out how to manage these cookies

hide cookie message
80,259 News Articles

Mozilla tackles parallel JavaScript

Mozilla is experimenting with its SpiderMonkey JavaScript engine to maximize hardware power

Mozilla is pursuing parallelism for JavaScript in an attempt to fully leverage available hardware capabilities.

In a blog post last Thursday, Mozilla Research's Dave Herman, principal researcher and director of strategy, noted experiments the organization has been conducting with its SpiderMonkey JavaScript engine, taking a low-level approach to extending Java with primitives for parallelism. "Between the coming release of ES6 and unrelentingcompetitionforJITperformance, these are exciting times for JavaScript," Herman said. "But an area where JavaScript still lags is parallelism -- exploiting hardware acceleration by running multiple computations simultaneously."

The intention of parallelism, Herman stressed, is "unlocking the power lurking inside our devices: GPUs, SIMD instructions, and multiple processor cores." He added, "With the emerging WebGL 2.0 and SIMD standards, the Web is making significant progress on the first two. And Web Workers go some part of the way toward enabling multicore parallelism." Web Workers provide a way for Web content to run scripts in background threads, but they are isolated, Herman said.

To achieve the goal of parallelism, Mozilla is experimenting with a SharedArrayBuffer API in SpiderMonkey. The company is drafting a specification featuring the API, with a prototype implementation featured in Firefox Nightly builds, said Herman, who also noted that Mozilla is looking for users to provide feedback.

A SharedArrayBuffer type with built-ins for locking introduces new forms of blocking to workers, plus the possibility that some objects could be subject to data races, Herman explained. "But unlike the Nashorn project in Java, this is only true for objects that opt in to using shared memory as a backing store -- if you create an object without using a shared buffer, you know for sure that it can never race. And workers do not automatically share memory; they have to coordinate up front to share an array buffer," said Herman.

He emphasized that Mozilla's parallelism efforts did not pertain to concurrency, which is about programs that respond to simultaneous events. "JavaScript's asynchronous concurrency model is popular and successful, and with promises, ES6 generators, and the upcoming async/await syntax, it's getting better all the time."

One option to achieve parallelism would be to leverage the Project Nashorn model and turn JavaScript into a multithreaded data model, said Herman. But he noted a weakness with this approach. "Unless your host Java program is careful to synchronize your scripts, your JavaScript apps lose all the guarantees of run-to-completion. Frankly, I can't imagine considering such a step right now."

Mozilla and Intel Labs, meanwhile, have done work with deterministic parallelism APIs. "The goal of these experiments was to find high-level abstractions that could enable parallel speedups without any of the pitfalls of threads," said Herman. "This is a difficult approach, because it's hard to find high-level models that are general enough to suit a wide variety of parallel programs."

IDG UK Sites

Galaxy S6 UK release date, price, specs: When is the Samsung Galaxy S6 coming out? Samsung Galaxy S6......

IDG UK Sites

5 things we hate about MWC: What it's like to be a journalist at a technology trade show

IDG UK Sites

Interview: Lauren Currie, "There is currently a big gap between what schools teach and what designe"......

IDG UK Sites

12in Retina MacBook Air release date rumours: new MacBook Air to have fingerprint ID, could launch...