A blog post from 2007 on this topic, which you might enjoy:
http://brendaneich.com/2007/02/threads-suck/
/be
Jussi Kalliokoski wrote:
As I suspected. Glad to hear my assumptions were correct. :) I think
this is a good thing actually, we'll have a good "excuse" not to have
shared state in the language (fp yay).
For the record, I've updated my initial JS fragment shading experiment
using Workers (on which my previous example was based) to take use of
the Transferrables [1] [2]. If you compare the results on Chrome and
Firefox, the benefit of Transferrables is quite impressive.
There seems to be a small downside to Transferrables though, as I
couldn't figure out a way to send parts of an ArrayBuffer using them.
Cheers,
Jussi
[1] http://labs.avd.io/parallel-shading/test.html
[2] https://gist.github.com/2689799
On Mon, Sep 24, 2012 at 5:59 PM, Alex Russell <[email protected]
<mailto:[email protected]>> wrote:
Let me put bounds on this, then:
Approaches that enable shared mutable state are non-starters. A
"send" based-approach might work (e.g., Worker Tranferrables) as
might automatic parallelization (e.g., RiverTrail) -- but threads
and thread-like semantics aren't gonna happen. Turn-based
execution with an event loop is how JS works and anything that
changes that apparent semantic won't fly.
Regards
On Mon, Sep 24, 2012 at 3:09 PM, Jussi Kalliokoski
<[email protected] <mailto:[email protected]>>
wrote:
Hi Rick!
Thanks for the links, very interesting! I was already aware of
River Trail and other concurrency proposals for JavaScript, my
purpose for this thread was anyway to get good clarification
on what approaches are impossible and why and what approaches
are possible and what are their virtues / downsides. So thanks
again, those two papers are more than I hoped for! But I hope
that there will be more discussion about this.
Cheers,
Jussi
On Mon, Sep 24, 2012 at 4:55 PM, Hudson, Rick
<[email protected] <mailto:[email protected]>> wrote:
Besides web workers there are two straw man proposals that
address adding parallelism and concurrency to JavaScript.
http://wiki.ecmascript.org/doku.php?id=strawman:data_parallelism
and
http://wiki.ecmascript.org/doku.php?id=strawman:concurrency.
The Parallel JavaScript (River Trail) proposal has a
prototype implementation available at
https://github.com/rivertrail/rivertrail/wiki. You should
be able to implement your example’s functionality using
this API.
The latest HotPar
https://www.usenix.org/conference/hotpar12/tech-schedule/workshop-program
had two interesting papers
Parallel Programming for the Web
<https://www.usenix.org/conference/hotpar12/parallel-programming-web>
https://www.usenix.org/conference/hotpar12/parallel-programming-web
and
*Parallel Closures: A New Twist on an Old Idea
*https://www.usenix.org/conference/hotpar12/parallel-closures-new-twist-old-idea
These projects each address some important part of the
general problem of adding parallelism and concurrency to
JavaScript.
Feedback is always appreciated.
-Rick
*From:*[email protected]
<mailto:[email protected]>
[mailto:[email protected]
<mailto:[email protected]>] *On Behalf Of
*Jussi Kalliokoski
*Sent:* Monday, September 24, 2012 8:44 AM
*To:* es-discuss
*Subject:* Function#fork
Hello everyone,
I've been thinking a lot about parallel processing in the
context of JavaScript, and this is really a hard problem.
I'm very curious to hear what everyone's opinions are
about it's problems and so forth, but I don't think an
open question like that will give very interesting
results, so I have an example problem for discussion
(while it seems like a bad idea to me, and unlikely to
ever get to the language, what I want to know is
everyone's reasoning behind their opinions whether it's
for or against).
What if we introduce Function#fork(), which would call the
function in another thread that shares state with the
current one (how much state it shares is an open question
I'd like to hear ideas about, but one possibility is that
only the function arguments are shared) using a similar
signature to Function#call except that the first argument
would be a callback, which would have error as its first
argument (if the forked function throws with the given
arguments, it can be controlled) and the return value of
the forked function as the second argument.
* What are the technical limitations of this?
* What are the bad/good implications of this on the
language users?
* Better ideas?
* etc.
I have a detailed example of showing Function#fork in
action [1] (I was supposed to make a simplified test, but
got a bit carried away and made it do "parallel" fragment
shading), it uses a simple fill-in for the Function#fork
using setTimeout instead of an actual thread.
Cheers,
Jussi
[1] https://gist.github.com/3775697
_______________________________________________
es-discuss mailing list
[email protected] <mailto:[email protected]>
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss