Electron——如何使用nodejs工作线程

简介: Electron——如何使用nodejs工作线程

前言

在electron中如何使用nodejs的工作线程,Demo代码

代码

工作线程

// workerThreads.js
const { Worker, isMainThread, parentPort, workerData } = require('worker_threads')
const { exec } = require('child_process')
const path = require('path')
function FindPidList (exeName, callback) {
    const cmd = `tasklist -V|findstr "${exeName}" `;
    // console.log(`cmd: ${cmd}`)
    let pids = [];
    exec(cmd, (err, stdout, stderr) => {
        if (err) {
            callback(pids);
            return
        }
        stdout.split('\n').filter(item => {
            const p = item.trim().split(/\s+/)
            // p[0] 应用程序名称  p[1] 应用程序PID 断开连接的时候p[2]会话名会少要注意
            if (p[0] && p[1]) {
                let memory = p[4].replace(",","") === 'K' ? p[3].replace(",","") : p[4].replace(",","")
                pids.push({pid: p[1], memory: memory})
            }
        })
        // console.log(`int_pids: ${JSON.stringify(pids)}`);
        callback(pids)
    })
}
if (isMainThread) {
    let workerThreads = path.resolve(__dirname, './workerThreads.js')
    module.exports = function cmdFindPidList(exeName, cbFun) {
        let pids = []
        const threads = new Set()
        threads.add(new Worker(workerThreads, { workerData: { exeName: exeName } }))
        threads.forEach(worker => {
            worker.on('error', (err) => { throw err })
            worker.on('exit', () => {
                threads.delete(worker)
                // console.log(`Thread exiting, ${threads.size} running...`)
                // console.log(`exit Pids:${JSON.stringify(pids)}`)
                cbFun(pids)
            })
            worker.on('message', (msg) => {
                // console.log(`msg: ${JSON.stringify(msg)}`);
                pids = pids.concat(msg)
            })
        })
    }
} else {
    FindPidList(workerData.exeName, res => {
        parentPort.postMessage(res)
    })
}

使用

// test.js
const workerThreads = require("./worker_threads")
workerThreads('WXWork.exe', (pids) => {
     console.log(`1111: ${JSON.stringify(pids)}`);
})

效果

学无止境,谦卑而行.

目录
相关文章
|
7月前
|
数据采集 并行计算 JavaScript
实战指南:在 Node.js 中利用多线程提升性能
在 Node.js 的世界中,多线程技术一直是一个受到广泛关注的领域。最初,Node.js 设计为单线程模式。随着技术发展,Node.js 引入了多线程支持,进而利用多核处理器的强大性能,提升了应用性能。接下来的内容将深入探讨 Node.js 如何实现多线程,以及在何种场合应该采用这种技术。
|
2月前
|
JavaScript 前端开发 Linux
在 Node.js 和 Electron 中获取设备 UUID 的最佳实践
【JS】在 Node.js 和 Electron 中获取设备 UUID 的最佳实践
140 1
|
4月前
|
Web App开发 JavaScript 前端开发
[译] 深入理解 Node.js 中的 Worker 线程
[译] 深入理解 Node.js 中的 Worker 线程
|
5月前
|
存储 Python 容器
Node中的AsyncLocalStorage 使用问题之在Python中,线程内变量的问题如何解决
Node中的AsyncLocalStorage 使用问题之在Python中,线程内变量的问题如何解决
|
7月前
|
Linux Windows
教你在Linux上安装Node并用Electron打包deb和rpm包
教你在Linux上安装Node并用Electron打包deb和rpm包
456 9
|
7月前
|
消息中间件 JavaScript 前端开发
Node.js 中的线程 与 并发
Node.js 中的线程 与 并发
68 0
|
JavaScript 前端开发 Shell
NodeJS 多线程发展史
在开始了解多线程之前先来了解一下程序任务按照性能的分类,从性能方面来看,计算机程序主要分为两个维度,CPU密集型(也叫计算密集型)和UO密集型。
298 0
|
机器学习/深度学习 JavaScript 前端开发
node.js 中单线程—非阻塞 IO 解释|学习笔记
快速学习 node.js 中单线程—非阻塞 IO 解释
node.js 中单线程—非阻塞 IO 解释|学习笔记
|
存储 SQL JavaScript
解秘 Node.js 单线程实现高并发请求原理,以及串联同步执行并发请求的方案
最近在做一个支持多进程请求的 Node 服务,要支持多并发请求,而且请求要按先后顺序串联同步执行返回结果。 对,这需求就是这么奇琶,业务场景也是那么奇琶。 需求是完成了,为了对 Node.js 高并发请求原理有更深一些的理解,特意写一篇文章来巩固一下相关的知识点。
897 0
解秘 Node.js 单线程实现高并发请求原理,以及串联同步执行并发请求的方案
|
存储 JavaScript 前端开发
nodejs中使用worker_threads来创建新的线程
nodejs中使用worker_threads来创建新的线程