
* chore: bump Node.js to v22.9.0 * build: drop base64 dep in GN build https://github.com/nodejs/node/pull/52856 * build,tools: make addons tests work with GN https://github.com/nodejs/node/pull/50737 * fs: add fast api for InternalModuleStat https://github.com/nodejs/node/pull/51344 * src: move package_json_reader cache to c++ https://github.com/nodejs/node/pull/50322 * crypto: disable PKCS#1 padding for privateDecrypt https://github.com/nodejs-private/node-private/pull/525 * src: move more crypto code to ncrypto https://github.com/nodejs/node/pull/54320 * crypto: ensure valid point on elliptic curve in SubtleCrypto.importKey https://github.com/nodejs/node/pull/50234 * src: shift more crypto impl details to ncrypto https://github.com/nodejs/node/pull/54028 * src: switch crypto APIs to use Maybe<void> https://github.com/nodejs/node/pull/54775 * crypto: remove DEFAULT_ENCODING https://github.com/nodejs/node/pull/47182 * deps: update libuv to 1.47.0 https://github.com/nodejs/node/pull/50650 * build: fix conflict gyp configs https://github.com/nodejs/node/pull/53605 * lib,src: drop --experimental-network-imports https://github.com/nodejs/node/pull/53822 * esm: align sync and async load implementations https://github.com/nodejs/node/pull/49152 * esm: remove unnecessary toNamespacedPath calls https://github.com/nodejs/node/pull/53656 * module: detect ESM syntax by trying to recompile as SourceTextModule https://github.com/nodejs/node/pull/52413 * test: adapt debugger tests to V8 11.4 https://github.com/nodejs/node/pull/49639 * lib: update usage of always on Atomics API https://github.com/nodejs/node/pull/49639 * test: adapt test-fs-write to V8 internal changes https://github.com/nodejs/node/pull/49639 * test: adapt to new V8 trusted memory spaces https://github.com/nodejs/node/pull/50115 * deps: update libuv to 1.47.0 https://github.com/nodejs/node/pull/50650 * src: use non-deprecated v8::Uint8Array::kMaxLength https://github.com/nodejs/node/pull/50115 * src: update default V8 platform to override functions with location https://github.com/nodejs/node/pull/51362 * src: add missing TryCatch https://github.com/nodejs/node/pull/51362 * lib,test: handle new Iterator global https://github.com/nodejs/node/pull/51362 * src: use non-deprecated version of CreateSyntheticModule https://github.com/nodejs/node/pull/50115 * src: remove calls to recently deprecated V8 APIs https://github.com/nodejs/node/pull/52996 * src: use new V8 API to define stream accessor https://github.com/nodejs/node/pull/53084 * src: do not use deprecated V8 API https://github.com/nodejs/node/pull/53084 * src: do not use soon-to-be-deprecated V8 API https://github.com/nodejs/node/pull/53174 * src: migrate to new V8 interceptors API https://github.com/nodejs/node/pull/52745 * src: use supported API to get stalled TLA messages https://github.com/nodejs/node/pull/51362 * module: print location of unsettled top-level await in entry points https://github.com/nodejs/node/pull/51999 * test: make snapshot comparison more flexible https://github.com/nodejs/node/pull/54375 * test: do not set concurrency on parallelized runs https://github.com/nodejs/node/pull/52177 * src: move FromNamespacedPath to path.cc https://github.com/nodejs/node/pull/53540 * test: adapt to new V8 trusted memory spaces https://github.com/nodejs/node/pull/50115 * build: add option to enable clang-cl on Windows https://github.com/nodejs/node/pull/52870 * chore: fixup patch indices * chore: add/remove changed files * esm: drop support for import assertions https://github.com/nodejs/node/pull/54890 * build: compile with C++20 support https://github.com/nodejs/node/pull/52838 * deps: update nghttp2 to 1.62.1 https://github.com/nodejs/node/pull/52966 * src: parse inspector profiles with simdjson https://github.com/nodejs/node/pull/51783 * build: add GN build files https://github.com/nodejs/node/pull/47637 * deps,lib,src: add experimental web storage https://github.com/nodejs/node/pull/52435 * build: add missing BoringSSL dep * src: rewrite task runner in c++ https://github.com/nodejs/node/pull/52609 * fixup! build: add GN build files * src: stop using deprecated fields of v8::FastApiCallbackOptions https://github.com/nodejs/node/pull/54077 * fix: shadow variable * build: add back incorrectly removed SetAccessor patch * fixup! fixup! build: add GN build files * crypto: fix integer comparison in crypto for BoringSSL * src,lib: reducing C++ calls of esm legacy main resolve https://github.com/nodejs/node/pull/48325 * src: move more crypto_dh.cc code to ncrypto https://github.com/nodejs/node/pull/54459 * chore: fixup GN files for previous commit * src: move more crypto code to ncrypto https://github.com/nodejs/node/pull/54320 * Fixup Perfetto ifdef guards * fix: missing electron_natives dep * fix: node_use_node_platform = false * fix: include src/node_snapshot_stub.cc in libnode * 5507047: [import-attributes] Remove support for import assertions https://chromium-review.googlesource.com/c/v8/v8/+/5507047 * fix: restore v8-sandbox.h in filenames.json * fix: re-add original-fs generation logic * fix: ngtcp2 openssl dep * test: try removing NAPI_VERSION undef * chore(deps): bump @types/node * src: move more crypto_dh.cc code to ncrypto https://github.com/nodejs/node/pull/54459 * esm: remove unnecessary toNamespacedPath calls https://github.com/nodejs/node/pull/53656 * buffer: fix out of range for toString https://github.com/nodejs/node/pull/54553 * lib: rewrite AsyncLocalStorage without async_hooks https://github.com/nodejs/node/pull/48528 * module: print amount of load time of a cjs module https://github.com/nodejs/node/pull/52213 * test: skip reproducible snapshot test on 32-bit https://github.com/nodejs/node/pull/53592 * fixup! src: move more crypto_dh.cc code to ncrypto * test: adjust emittedUntil return type * chore: remove redundant wpt streams patch * fixup! chore(deps): bump @types/node * fix: gn executable name on Windows * fix: build on Windows * fix: rename conflicting win32 symbols in //third_party/sqlite On Windows otherwise we get: lld-link: error: duplicate symbol: sqlite3_win32_write_debug >>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:47987 >>> obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj >>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj lld-link: error: duplicate symbol: sqlite3_win32_sleep >>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48042 >>> obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj >>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj lld-link: error: duplicate symbol: sqlite3_win32_is_nt >>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48113 >>> obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj >>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj lld-link: error: duplicate symbol: sqlite3_win32_utf8_to_unicode >>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48470 >>> obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj >>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj lld-link: error: duplicate symbol: sqlite3_win32_unicode_to_utf8 >>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48486 >>> obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj >>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj lld-link: error: duplicate symbol: sqlite3_win32_mbcs_to_utf8 >>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48502 >>> obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj >>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj lld-link: error: duplicate symbol: sqlite3_win32_mbcs_to_utf8_v2 >>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48518 >>> obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj >>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj lld-link: error: duplicate symbol: sqlite3_win32_utf8_to_mbcs >>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48534 >>> obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj >>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj lld-link: error: duplicate symbol: sqlite3_win32_utf8_to_mbcs_v2 >>> defined at .\..\..\third_party\electron_node\deps\sqlite\sqlite3.c:48550 >>> obj/third_party/electron_node/deps/sqlite/sqlite/sqlite3.obj >>> defined at obj/third_party/sqlite\chromium_sqlite3/sqlite3_shim.obj * docs: remove unnecessary ts-expect-error after types bump * src: move package resolver to c++ https://github.com/nodejs/node/pull/50322 * build: set ASAN detect_container_overflow=0 https://github.com/nodejs/node/issues/55584 * chore: fixup rebase * test: disable failing ASAN test * win: almost fix race detecting ESRCH in uv_kill https://github.com/libuv/libuv/pull/4341
52 lines
1.8 KiB
Markdown
52 lines
1.8 KiB
Markdown
# Multithreading
|
|
|
|
With [Web Workers][web-workers], it is possible to run JavaScript in OS-level
|
|
threads.
|
|
|
|
## Multi-threaded Node.js
|
|
|
|
It is possible to use Node.js features in Electron's Web Workers, to do
|
|
so the `nodeIntegrationInWorker` option should be set to `true` in
|
|
`webPreferences`.
|
|
|
|
```js
|
|
const win = new BrowserWindow({
|
|
webPreferences: {
|
|
nodeIntegrationInWorker: true
|
|
}
|
|
})
|
|
```
|
|
|
|
The `nodeIntegrationInWorker` can be used independent of `nodeIntegration`, but
|
|
`sandbox` must not be set to `true`.
|
|
|
|
**Note:** This option is not available in [`SharedWorker`s](https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker) or [`Service Worker`s](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker) owing to incompatibilities in sandboxing policies.
|
|
|
|
## Available APIs
|
|
|
|
All built-in modules of Node.js are supported in Web Workers, and `asar`
|
|
archives can still be read with Node.js APIs. However none of Electron's
|
|
built-in modules can be used in a multi-threaded environment.
|
|
|
|
## Native Node.js modules
|
|
|
|
Any native Node.js module can be loaded directly in Web Workers, but it is
|
|
strongly recommended not to do so. Most existing native modules have been
|
|
written assuming single-threaded environment, using them in Web Workers will
|
|
lead to crashes and memory corruptions.
|
|
|
|
Note that even if a native Node.js module is thread-safe it's still not safe to
|
|
load it in a Web Worker because the `process.dlopen` function is not thread
|
|
safe.
|
|
|
|
The only way to load a native module safely for now, is to make sure the app
|
|
loads no native modules after the Web Workers get started.
|
|
|
|
```js
|
|
process.dlopen = () => {
|
|
throw new Error('Load native module is not safe')
|
|
}
|
|
const worker = new Worker('script.js')
|
|
```
|
|
|
|
[web-workers]: https://developer.mozilla.org/en/docs/Web/API/Web_Workers_API/Using_web_workers
|