blob: cbed93a0058af874d19ed4b0647755353e5bf8e0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
---
breadcrumbs:
- - /blink
- Blink (Rendering Engine)
page_name: web-workers
title: Web Workers
---
Web Workers spec:
<http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html>
As of Nov 2015, the most up-to-date documentation is:
<https://docs.google.com/document/d/1i3IA3TG00rpQ7MKlpNFYUF6EfLcV01_Cv3IYG_DjF7M/edit>
Contents below are obsolete!
As of Nov 2014, the most up-to-date documentation was:
<https://docs.google.com/a/chromium.org/document/d/1NYMYf-_P_K2iPKlSGyv5ou_x0yL_4IRwt-DPOYqRb0s/edit#>
As of Oct 2013, Blink/Chromium's multi-process architecture Web Workers
(Dedicated and Shared Worker) was implemented as follows:
* **Dedicated Worker**
* Runs in the same **renderer process** as its parent document,
but on a different thread (see
[Source/core/workers/WorkerThread.\*](https://code.google.com/p/chromium/codesearch#search/&q=file:WorkerThread.h&sq=package:chromium&type=cs)
in blink for details). Note that it’s NOT the chromium’s worker
process thread implemented in content/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](https://code.google.com/p/chromium/codesearch#chromium/src/webkit/child/worker_task_runner.h&l=19)
(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/\*](http://src.chromium.org/viewvc/chrome/trunk/src/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](https://code.google.com/p/chromium/codesearch#chromium/src/content/renderer/renderer_webkitplatformsupport_impl.h&l=47&q=RendererWebKitPlatformSupport&type=cs&sq=package:chromium)
(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](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/wtf/MainThread.h&l=48&q=callOnMainThread&type=cs&sq=package:chromium)).
* **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/\*](http://src.chromium.org/viewvc/chrome/trunk/src/content/worker/)
(in addition to content/child/\*).
* Platform APIs are accessible in Worker contexts via
WebKit::Platform::current(), and it’s implemented in
[WorkerWebKitPlatformSupportImpl](https://code.google.com/p/chromium/codesearch#chromium/src/content/worker/worker_webkitplatformsupport_impl.h&q=WorkerWebKitPlatformSupport&sq=package:chromium&type=cs&l=30)
(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](https://code.google.com/p/chromium/codesearch#chromium/src/third_party/WebKit/Source/wtf/MainThread.h&l=48&q=callOnMainThread&type=cs&sq=package:chromium).
|