[whatwg] WebWorkers vs. Threads
Shannon
shannon at arc.net.au
Sat Aug 9 22:42:42 PDT 2008
I've been following the WebWorkers discussion for some time trying to
make sense of the problems it is trying to solve. I am starting to come
to the conclusion that it provides little not already provided by:
setTimeout(mainThreadFunc,1)
setTimeout(workThreadFunc,2)
setTimeout(workThreadFunc,2)
....
This is especially true if our main function sets up a "thread-safe"
communication channel of some sort.
Obviously WebWorkers would make all this clearer and possibly easier but
surely any number of free JS libraries could do that too. The only
feature of WebWorkers that Javascript can't emulate is the ability for
the worker to hang around after a page is closed; but I think this
clearly falls into the category of a "web annoyance". When I close a
page I want it gone - immediately. Passing workers around between pages
sounds like something that would be good for advertising banner network
trackers to avoid privacy settings.
I believe that babysitting developers (through feature elimination) is a
bad idea. While WebWorkers aims to protect developers from common
mistakes it will probalt force them into adopting worse hacks and
workarounds. There is still a common conception of Javascript as a toy
language, and in many ways that is true. However HTML5 calls itself a
"WebApplications" language and we are indeed entering a time where many
sophisticated desktop applications are being ported to Javascript. This
raises a new issue, which is how do you port a threaded application to a
language with no real threads or mutexes? With great difficulty I imagine.
One of the Mozilla JS developers has come out gunning against
traditional threading in JS so it may be we never see an official thread
object anytime soon ("over his dead body", in his own words). I realise
WebWorkers tries to solve his concerns (mainly race conditions) by
preventing direct shared access to global variables but again this is
something a threading library or good programming style should be able
to solve. The workaround for webworker limitations is settimeout hacks
so I wonder whether this is going to create horrible hybrid
webworker+setimeout code that is generally unreadable.
Another issue with eliminating threads is that they are very desirable
to developers. Because they are desirable it's likely that one of more
browser vendors may go ahead and implement them anyway, essentially
"embracing and extending" HTML5 and ECMAScript. If this happens then its
likely a large number of popular multithreaded desktop applications will
only be ported to those browsers. History has already shown us the
problems this causes.
I am aware that the use cases and feature set of Web Workers has not
been agreed on yet and there may be things I've overlooked. However I
would much rather see an API that gives the developer more options and
allows them to use or abuse them as required than a crippled API that
pushes them into proprietary extensions, plugins and hacks to achieve
something that every other major language already provides.
Shannon
More information about the whatwg
mailing list