Spec-Zone.ru › Electron

Многопоточность

С помощью 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API