找回密码
 会员注册
查看: 28|回复: 0

Node.js中的进程与线程

[复制链接]

6

主题

0

回帖

19

积分

新手上路

积分
19
发表于 2024-9-20 17:55:51 | 显示全部楼层 |阅读模式
1.回顾进程和线程的定义进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。线程(Thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。2.Node.js的单线程Node特点主线程是单线程的一个进程只开一个主线程,基于事件驱动的、异步非阻塞I/O,可以应用于高并发场景。Nodejs中没有多线程,为了充分利用多核cpu,可以使用子进程实现内核的负载均衡,那我们就要解决以下问题:Node.js做耗时的计算时候阻塞问题。Node.js如何开启多进程。开发过程中如何实现进程守护。3.场景实例const http = require('http');http.createServer((req,res)=>{    if(req.url === '/sum'){ // 求和        let sum = 0;        for(let i = 0 ; i {    if(req.url === '/sum'){        let childProcess = fork('calc.js',{            cwd:path.resolve(__dirname,'test')        });        childProcess.on('message',function(data){            res.end(data+'');        })    }else{        res.end('ok');    }}).listen(3000);4.3.execFile通过node指令,直接执行某个文件:let childProcess = execFile("node",['./test/sub_process'],function(err,stdout,stdin){    console.log(stdout); });内部调用的是 spawn方法。4.4.execlet childProcess = exec("node './test/sub_process'",function(err,stdout,stdin){    console.log(stdout)});内部调用的是execFile,其实以上三个方法都是基于spawn的。5.clusterNode.js的单个实例在单个线程中运行。为了利用多核系统,用户有时会希望启动Node.js进程集群来处理负载。自己通过进程来实现集群。子进程与父进程共享HTTP服务器fork实现:let http = require('http');let {    fork} = require('child_process');let fs = require('fs');let net = require('net');let path = require('path');let child = fork(path.join(__dirname, '8.child.js'));let server = net.createServer();server.listen(8080, '127.0.0.1', function () {    child.send('server', server);    console.log('父进程中的服务器已经创建');    let httpServer = http.createServer();    httpServer.on('request', function (req, res) {        if (req.url != '/favicon.ico') {            let sum = 0;            for (let i = 0; i  {      res.end(process.pid+'','pid');    })    .listen(3000);  console.log("server start",process.pid);}紧追技术前沿,深挖专业领域扫码关注我们吧!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 01:57 , Processed in 0.367560 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表