我們正在Electron中構建一個應用程序,並且我們有兩個窗口,一個是主UI,另一個用作後臺進程以執行大量計算。 我們通過IPC消息兩個進程之間進行通信這樣的:IPC消息阻止了Electron的進程
UI處理:
ipcRenderer.send('start-test');
電子主要過程:
ipcMain.on('start-test', function (event, arg) {
bgWindow.webContents.send('start-test', arg);
});
後臺進程(BP):
ipcRenderer.on('start-test', function(event, arg) {
testFunction()
});
function testFunction(){
for(let i=0; i<5000000000 ;i++){ }
}
我們需要來自BP的一些其他信息,而它正在做沉重的事情計算,但我們不能這樣做。 我們遇到的問題是,在進行大量計算時,BP無法收到任何其他IPC消息。 所以,我們有這樣的流程:
- UI過程:發送啓動消息
- BP:接收開始測試消息
- BG過程:開始重計算
- UI過程:發送 - 不同測試消息
- BP:光潔度重計算
- BP:接收-不同測試消息
我們在後臺已經測試,像:
setTimeout(testFunction, 0);
process.nextTick(testFunction); // node js process
我們也TESTE節點JS async模塊。但IPC消息仍然被阻止。
所以,我們的問題是:我們該怎麼做,所以testFunction不會阻止其他IPC消息?
注:我們知道,我們可以使用的東西,如Web工人或節點子進程,但我們最後的選擇,因爲這將是太難管理數據併發性,因爲我們的後臺進程有很多數據的將被這個testFunction修改,也可以用BP將要接收的其他IPC消息修改