nodejs多线程,fork和Worker

一、前言

javascript是单线程执行的,如果想要多线程执行,那么相当于再运行一个node,其实不该理解成多线程,更像是多进程。

二、Worker('worker_threads'模块)

worker有点类似exec,直接再cmd执行node命令,不同的是两个node进程之间可以通过发送消息的方式进行通信。

例如(例子为ts):

主进程中:

javascript 复制代码
// 当前为test2.ts 文件
import {Worker, isMainThread} from 'worker_threads'

async function  runWork():Promise<void>{
    // 当前是主线程
    if(isMainThread){
          //const log= execSync("ts-node ./test.ts",{cwd:__dirname}).toString()
        // 运行子线程--相当于输入node-ts  ./test.ts
        const woker =new Worker("./test.ts",{workerData:"hello"}) 
        // 监听事件
        // message 为固定事件 
        // error 事件 子线程的错误信息
        // exit 事件 子线程执行完毕 时候的事件
        woker.on("message",(data:string)=>{
             console.log("主线程接收数据:"+data);
       })
    }
    
    console.log("主线程");
    
}
runWork()

子进程中:

javascript 复制代码
// test.ts文件 注意:子进程不支持ES6语法

const worker_threads=require('worker_threads') 
console.log("线程2,接收数据"+worker_threads.workerData);
// 向主进程发送数据
worker_threads.parentPort.postMessage("hello2")

worker 只能在主进程中创建,不能在子进程中再创建

三、fork(child_process模块)

fork比worker出现得早,于worker相比,它可以在子线程再创建子线程,但是worker更轻量.

例子(ts):

主线程:

javascript 复制代码
// 当前为 test3.ts文件 主进程

// 引入模块
const { fork } = require('child_process');

// 创建子进程
const child = fork('test33.ts');

// 监听子进程发送的消息
child.on('message', (data:string) => {
   
        console.log("接收的消息:"+data);
    

});

// 向子进程发送消息
child.send('Hello from parent process!');

子进程:

javascript 复制代码
// 当前为 test33.ts 文件 子进程

const child_process=require("child_process")
// 向父进程发送消息
if(typeof process.send!='undefined'){
    process.send('你们好主进程');
}

总结:nodejs的多线程不像java那样,它更像是运行了多个node

相关推荐
plmm烟酒僧1 天前
基于 RK3588 的 YOLO 多线程推理多级硬件加速引擎框架设计(代码框架和实现细节)
yolo·rk3588·多线程·rkmpp·硬件加速·视频解码·librga
FreakStudio2 天前
一文速通 Python 并行计算:05 Python 多线程编程-线程的定时运行
单片机·嵌入式·多线程·面向对象·并行计算·电子diy
请叫我鹏鹏君5 天前
ThreadLocal详解与高频场景实战指南
java·多线程
FreakStudio6 天前
一文速通Python并行计算:03 Python多线程编程-多线程同步(上)—基于互斥锁、递归锁和信号量
python·嵌入式·多线程·面向对象·并行计算·线程同步·电子diy
hope_wisdom8 天前
Linux系统编程之守护进程
linux·fork·linux系统·守护进程
努力的CV战士8 天前
面试题分享-多线程顺序打印奇偶数
c语言·算法·多线程·信号量
FreakStudio8 天前
一文速通Python并行计算:02 Python多线程编程-threading模块、线程的创建和查询与守护线程
python·嵌入式·多线程·并行计算·电子diy
长安er9 天前
异步编程与流水线架构:从理论到高并发
数学建模·架构·gui·多线程·异步·流水线·全息
FreakStudio9 天前
一文速通Python并行计算:01 Python多线程编程-基本概念、切换流程、GIL锁机制和生产者与消费者模型
python·嵌入式·多线程·面向对象·并行计算·电子diy
hhw19911216 天前
c#知识点补充
多线程