Многопоточность
С помощью Web Workers можно запускать JavaScript в потоках операционной системы.
Многопотоковый Node.js
Можно использовать возможности Node.js в Web Workers Electron, для этого параметр nodeIntegrationInWorker должен быть установлен в значение true в webPreferences.
const win = new BrowserWindow({
webPreferences: {
nodeIntegrationInWorker: true
}
})
nodeIntegrationInWorker может использоваться независимо от nodeIntegration, но sandbox не должно быть установлено в значение true.
Доступные API
Все встроенные модули Node.js поддерживаются в Web Workers, и asar архивы по-прежнему можно читать с помощью API Node.js. Однако, ни один из встроенных модулей Electron не может быть использован в многопоточной среде.
Модули Node.js нативных
Любой нативный модуль Node.js может быть загружен непосредственно в Web Workers, но это категорически не рекомендуется. Большинство существующих нативных модулей были написаны, предполагая однопоточную среду; их использование в Web Workers приведёт к авариям и повреждению памяти.
Обратите внимание, что даже если нативный модуль Node.js является потокобезопасным, его загрузка в Web Worker всё равно небезопасна, так как функция process.dlopen не является потокобезопасной.
Единственный способ безопасно загрузить нативный модуль на данный момент — убедиться, что приложение не загружает никакие нативные модули после запуска Web Workers.
process.dlopen = () => {
throw new Error('Load native module is not safe')
}
const worker = new Worker('script.js')
© GitHub Inc.
Licensed under the MIT license.
https://www.electronjs.org/docs/latest/tutorial/multithreading