99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

Electron 多線程

2023-02-16 17:15 更新

通過Web Workers,可以實(shí)現(xiàn)用操作系統(tǒng)級別的線程來跑JavaScript

多線程的Node.js

可以在Electron的Web Workers里使用Node.js的特性。要用的話,需把webPreferences中的nodeIntegrationInWorker選項(xiàng)設(shè)置為true

const win = new BrowserWindow({
  webPreferences: {
    nodeIntegrationInWorker: true
  }
})

nodeIntegrationInWorker 可以獨(dú)立于nodeIntegration使用,但sandbox必須不能設(shè)置為true

注意: 此選項(xiàng)在 SharedWorker 或 Service Worker 中不可用,因?yàn)樯澈胁呗圆患嫒荨?br>

可用的API

Web Workers支持Node.js的所有內(nèi)置模塊,而且asar檔案也仍通過Node.js的API來讀取。 不過所有的Electron內(nèi)置模塊不可以用在多線程環(huán)境中。

原生Node.js模塊?

在Web Workers里可以直接加載任何原生Node.js模塊,但不推薦這樣做。 大多數(shù)現(xiàn)存的原生模塊是在假設(shè)單線程環(huán)境的情況下編寫的,如果把它們用在Web Workers里會導(dǎo)致崩潰和內(nèi)存損壞。

請注意, 即使原生Node.js模塊如果考慮到了線程安全問題, 但在 Web Worker中加載它仍然不安全, 因?yàn)?nbsp;process.dlopen 函數(shù)并沒有考慮線程安全。

現(xiàn)在安全順利地加載原生模塊的唯一辦法,就是確保在Web Workers啟動后app不加載原生模塊。

process.dlopen = () => {
  throw new Error('Load native module is not safe')
}
const worker = new Worker('script.js')


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號