Worker / Worklet Internals
nhiroki@chromium.org
April 19, 2018
PUBLIC
Workers / Worklets Family
Worker Process Model
Renderer Process
Document
Dedicated
Worker
Renderer Process
Document
Renderer Process
Shared/ServiceWorker
Browser Process
Document
Backend
In-Process Worker
1 Worker - 1 Document
(Dedicated Worker)
Out-of-Process Worker
1 Worker - multiple Documents
(Shared Worker, Service Worker)
Worklet Process Model
Renderer Process
Document
Worklet
Always in-process
Worker / Worklet Thread Class Layering
WorkerThread
WorkerScheduler
WorkerBackingThread
v8::Isolate
WebThreadImplFor
WorkerScheduler
Worker
base::Thread
NonMainThreadScheduler
blink/renderer/
platform/
scheduler
blink/renderer/
core/workers
base/
WorkerGlobalScope
Worker / Worklet Thread Class Layering
WorkerThread
WorkerScheduler
WorkerBackingThread
v8::Isolate
WebThreadImplFor
WorkerScheduler
WorkerBackingThread
v8::Isolate
WebThreadImplForWorkerScheduler
Worker
Worklet
base::Thread
NonMainThreadScheduler
NonMainThreadScheduler
base::Thread
blink/renderer/
platform/
scheduler
blink/renderer/
core/workers
One backing
thread may host multiple WT/GSs
base/
One backing thread hosts one WT/GS
WorkerGlobalScope
WorkerThread
WorkerScheduler
WorkletGlobalScope
WorkerThread
WorkerScheduler
WorkletGlobalScope
Dedicated Worker start sequence
script load
new Worker()
thread
creation
Main
Thread
thread / GS
initialization
script
evaluation
Worker
Thread
Dedicated Worker termination sequence
worker
termination
terminate()
Main
Thread
prepare for
shutdown
worker shutdown
Worker
Thread
close()
prepare for
shutdown
Stop the scheduler
Destroy the global scope
Stop the scheduler
Destroy the global scope
References
Code locations
Terminology
Naming conventions (1)
Naming conventions (2)
Worker
object
Messaging
Proxy
Object
Proxy
Worker
Global
Scope
thread boundary
Main thread
Worker thread