Web Workers
Web Workers spec:
http://www.whatwg.org/
As of Nov 2015, the most up-to-date documentation is:
https://docs.google.com/
Contents below are obsolete!
As of Nov 2014, the most up-to-date documentation was:
https://docs.google.com/
As of Oct 2013, Blink/
- Dedicated Worker
- Runs in the same renderer process as its parent document,
but on a different thread (see
Source/
core/ in blink for details). Note that it’s NOT the chromium’s worker process thread implemented in content/workers/ WorkerThread.* worker/ worker_thread.*. - In Chromium the renderer process’s main thread is implemented by
content/
renderer/ render_thread_impl.*, while the Blink’s worker thread does NOT have corresponding message_loop/ thread in chromium (yet). You can use webkit_glue::WorkerTaskRunner (webkit/ child/ worker_task_runner.*) to post tasks to the Blink’s worker threads in chromium. - The embedder’s platform code in Chromium for Dedicated Worker is
/content/
renderer/ (in addition to content/* child/ *), but NOT content/ worker/ *. - Platform APIs are accessible in Worker contexts via
WebKit::Platform::current(), and it’s implemented in
RendererWebKitPlatformSupport
(content/
renderer/ renderer_webkitplatformsupport_impl.cc) in Chromium (as in the case for regular document contexts). - Note that to call Platform APIs from Worker contexts it needs to be implemented in a thread-safe way in the embedder code (e.g. do not lazily create a shared object without lock), or the worker code should explicitly relay the call onto the renderer’s main thread in Blink (e.g. by WTF::callOnMainThread).
- Runs in the same renderer process as its parent document,
but on a different thread (see
Source/
- Shared Worker (the following was valid until April 2014)
- Runs in its own separate process called worker process and is connected to multiple renderer processes via the browser process. Shared Worker also runs in its own worker thread.
- In Chromium the worker process’s main thread is implemented by
content/
worker/ worker_thread.* (note that this is NOT the worker thread you refer in Blink!!). As well as in Dedicated Workers the Blink’s worker thread does not have corresponding message_loop/ thread in chromium. - The embedder’s platform code in Chromium for Shared Worker is
/content/
worker/ (in addition to content/* child/ *). - Platform APIs are accessible in Worker contexts via
WebKit::Platform::current(), and it’s implemented in
WorkerWebKitPlatformSupportImpl
(content/
worker/ worker_webkitplatformsupport_impl.cc) in Chromium. As well as for Dedicated Worker, to use a platform API in Worker contexts the API needs to be implemented in a thread-safe way in the embedder code, or Blink-side code should explicitly relay the platform API access onto the main thread by WTF::callOnMainThread.