This is not only easier, this is faster. We have a single memory allocation and all the threads share it. Considering your case:
let a = {}; async alpha() { a.text += 'hello' } async beta() { a.text + ' world' } parallel.all( a, b ) // or thread.parallel( a, b ) .then(x -> console.log(x)) Will output ' worldhello' or 'hello world' like any multithread platform will. *Leo Dutra, **on **Facebook <http://www.facebook.com/leodutra.br> **and LinkedIn <https://www.linkedin.com/in/leobr>* 2016-11-02 12:39 GMT-02:00 Leo Dutra <leodutra...@gmail.com>: > If it is accepted, yes... Atomics should take care of racing. > > We have a lighter context than most functional languages with this > proposal: we reassure JavaScript memory is totally mutable (against > Erlang/Rust/Haskell). > > This keeps the job easier. I was thinking in the worst possibility and we > have the easier. > > Lock, immutability and not shared mutation are the special cases. > For these cases, Atomic and Mutex constructs will fit. > > > *Leo Dutra, **on **Facebook <http://www.facebook.com/leodutra.br> **and > LinkedIn > <https://www.linkedin.com/in/leobr>* > > 2016-11-02 12:27 GMT-02:00 Bradley Meck <bradley.m...@gmail.com>: > >> Consider: >> >> ``` >> let a = {}; >> >> alpha: parallel { >> a.text = 'hello'; >> } >> beta: parallel { >> a.text += ' world'; >> } >> console.log(a); >> ``` >> >> This has racing: >> * around `a.text` between `alpha:` and `beta:`. >> * around `console.log` since `a` could be 1 of 3 values depending on how >> threads are scheduled. >> >> I am stating that such racing/shared mutation should be prevented. >> Workers do this by message passing and ownership of transferable data. >> There could be other mechanics for synchronization, but I don't see a >> simplistic solution. Things like having a read-only view of data partially >> helps, but atomics are most likely the proper way to do this if you don't >> want message passing and ownership semantics. >> >> On Wed, Nov 2, 2016 at 9:09 AM, Leo Dutra <leodutra...@gmail.com> wrote: >> >>> There's nothing about threading that is not problem with Event loop. >>> I'd say there's even less problems. >>> >>> The proposal is a seamless behaviour, equals to what we have now. >>> >>> Message passing is not a problem of JS developer in the case, but a >>> V8/WhateverMonkey problem. >>> >>> Changing a value inside a multithread async MUST behave in the same way >>> of a change inside a single threaded async. The same way, non-referenced >>> variables SHALL NOT be scoped in the thread. This is not Java with >>> volatiles. This is the plain old JS with clojures, openess and loose bare >>> metal control. >>> >>> Thread interruption is a bad practice anyway. And we could have a Mutex >>> class for the specific case or another idea. >>> >>> Workers are evented and started, not pooled and easy to use. >>> >>> >>> >>> *Leo Dutra, **on **Facebook <http://www.facebook.com/leodutra.br> **and >>> LinkedIn >>> <https://www.linkedin.com/in/leobr>* >>> >>> 2016-11-02 11:57 GMT-02:00 Bradley Meck <bradley.m...@gmail.com>: >>> >>>> We need to be careful about this, I would never condone adding >>>> threading that could share variables that were not intended to be >>>> multi-threaded, as such variable access outside of your `parallelize` >>>> construct/syntax would need to be message passing when talking to something >>>> that is not already written as a parallel structure. A notable thing here >>>> is that Shared Memory and Atomics that are in ECMA Stage 2 : >>>> https://github.com/tc39/ecmascript_sharedmem which would probably need >>>> to land prior to me condoning any shared mutable state. >>>> >>>> Historically, all JS implementations are based upon a job queueing >>>> system described by the Event Loop. This is very different from parallelism >>>> which could have shared mutable state. All code is guaranteed to have >>>> exclusive access to variables in scope until it finishes running, and that >>>> the content of those variables will not change from preemption (there are >>>> cases where this is not true in the browser with a live DOM). There are >>>> alternative discussion recently on Workers : >>>> https://esdiscuss.org/topic/standardize-es-worker . I might look there >>>> first. >>>> >>>> In particular, I would suggest taking a look at problems of >>>> synchronization, locking, and preemption breaking existing code a bit >>>> rather than just stating that green threads are the way to go. >>>> >>>> On Wed, Nov 2, 2016 at 8:45 AM, Leo Dutra <leodutra...@gmail.com> >>>> wrote: >>>> >>>>> ECMA introduced Promises and async-await in JS. This improves coding >>>>> in an amazing way, reducing the control developers need to wrap an AJAX >>>>> call or async I/O. >>>>> >>>>> JavaScript used to be script and not a language. Classes, workers, >>>>> sound control, GL rendering, Node.js modules (with OS conversation), >>>>> incredible GC strategies and compilation on V8 and Mozilla "monkeys"... >>>>> the >>>>> list goes on and on. >>>>> >>>>> Almost all the features provided by old mature platforms, like Java, >>>>> .NET and etc. For browsers, the newest JS features provide consistent >>>>> tools >>>>> for productivity and quality code. >>>>> >>>>> But there's a huge step to accomplish. >>>>> >>>>> ECMA introduced workers. Node.js came up with streams, native process >>>>> spawn and libuv thread pool. This is a lot, but not enough. >>>>> >>>>> All I hear about Node.js is how it is great for quick message I/O and >>>>> bad for aggregations and impossible for parallel tasking. Again, we have >>>>> workers and processes, but not green threads. >>>>> >>>>> I invite you to take a quick look at Akka and OTP (Erlang). More than >>>>> it, I will argument: workers and process spawn are the latent desire for >>>>> parallel and starting one of these are not "cheap" or waiting in a pool. >>>>> >>>>> We use streams extensively in Node.js and most frameworks hides it >>>>> from us. Call it magic, I call it pragmatism. >>>>> >>>>> Now, async, await, Promises ("Futures")... we can make it all work in >>>>> parallel. >>>>> >>>>> This would explore more libuv in Node.js and browsers could handle it >>>>> too, seamlessly. >>>>> >>>>> Each function could be run in a green thread, pulled from a >>>>> browser/libuv pool, allowing Node.js and browsers to process aggregations >>>>> and heavy rendering without heavy start costs and complicated message >>>>> control through events. >>>>> >>>>> More, I ask why not, and "single thread nature of JS" looks more like >>>>> a bad legacy from old browsers. We can do it in pieces, like the proposed >>>>> async-await and, on better days, provide a Parallel API (something like >>>>> *parallelize(() >>>>> -> { // parallel stuff here })*). >>>>> >>>>> I wanna leave you with the possibilities in mind and bully this single >>>>> thread dogma. >>>>> >>>>> You have been told. >>>>> >>>>> *Leo Dutra, **on **Facebook <http://www.facebook.com/leodutra.br> **and >>>>> LinkedIn >>>>> <https://www.linkedin.com/in/leobr>* >>>>> >>>>> _______________________________________________ >>>>> es-discuss mailing list >>>>> es-discuss@mozilla.org >>>>> https://mail.mozilla.org/listinfo/es-discuss >>>>> >>>>> >>>> >>> >> >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss