/
githubmirror
/
edex-ui
Обзор
Документация
Войти
/
githubmirror
/
edex-ui
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v2.2.5
src/_multithread.js
89 строк
2 KB
wrac4242
fix logic error in last commit (#905)
20 ноя 2020, 12:40
Не верифицирован
20 ноя 2020, 12:40
c608bd6
Код
Авторство
О чём код?
const cluster = require("cluster"); if (cluster.isMaster) { const electron = require("electron"); const ipc = electron.ipcMain; const signale = require("signale"); // Also, leave a core available for the renderer process const osCPUs = require("os").cpus().length - 1 // See #904 const numCPUs = (osCPUs > 7) ? 7 : osCPUs; const si = require("systeminformation"); cluster.setupMaster({ exec: require("path").join(__dirname, "_multithread.js") }); let workers = []; cluster.on("fork", worker => { workers.push(worker.id); }); for (let i = 0; i < numCPUs; i++) { cluster.fork(); } signale.success("Multithreaded controller ready"); var lastID = 0; function dispatch(type, id, arg) { let selectedID = lastID+1; if (selectedID > numCPUs-1) selectedID = 0; cluster.workers[workers[selectedID]].send(JSON.stringify({ id, type, arg })); lastID = selectedID; } var queue = {}; ipc.on("systeminformation-call", (e, type, id, ...args) => { if (!si[type]) { signale.warn("Illegal request for systeminformation"); return; } if (args.length > 1 || workers.length <= 0) { si[type](...args).then(res => { if (e.sender) { e.sender.send("systeminformation-reply-"+id, res); } }); } else { queue[id] = e.sender; dispatch(type, id, args[0]); } }); cluster.on("message", (worker, msg) => { msg = JSON.parse(msg); try { if (!queue[msg.id].isDestroyed()) { queue[msg.id].send("systeminformation-reply-"+msg.id, msg.res); delete queue[msg.id]; } } catch(e) { // Window has been closed, ignore. } }); } else if (cluster.isWorker) { const signale = require("signale"); const si = require("systeminformation"); signale.info("Multithread worker started at "+process.pid); process.on("message", msg => { msg = JSON.parse(msg); si[msg.type](msg.arg).then(res => { process.send(JSON.stringify({ id: msg.id, res })); }); }); }