首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

多线程 | Multithreading

借助Web Workers,可以在OS级别的线程中运行JavaScript。

多线程Node.js

可以在Electron的Web Workers中使用Node.js功能,为此nodeIntegrationInWorker应该将该选项设置为truein webPreferences

代码语言:javascript
复制
let win = new BrowserWindow({
  webPreferences: {
    nodeIntegrationInWorker: true
  }
})

nodeIntegrationInWorker可独立运作的nodeIntegration,但sandbox不能设置为true

可用的API

Web Workers支持Node.js的所有内置模块,并且asar仍可以使用Node.js API读取档案。但是,Electron的内置模块在多线程环境下不能使用。

本机Node.js模块

任何本地Node.js模块都可以直接加载到Web Workers中,但强烈建议不要这样做。大多数现有的本地模块都是在假设单线程环境下编写的,在Web Workers中使用它们会导致崩溃和内存损坏。

请注意,即使本机Node.js模块是线程安全的,但将它加载到Web Worker中仍然不安全,因为该process.dlopen函数不是线程安全的。

现在安全加载本地模块的唯一方法是确保应用程序在Web Workers启动后加载本地模块。

代码语言:javascript
复制
process.dlopen = () => {
  throw new Error('Load native module is not safe')
}
let worker = new Worker('script.js')

扫码关注腾讯云开发者

领取腾讯云代金券