美文网首页
十天上手Node+KOA(2)

十天上手Node+KOA(2)

作者: 贝程学院_前端 | 来源:发表于2019-08-12 08:53 被阅读0次

任务

1、进程与线程的了解
2、process
3、child_process
4、守护子进程

1、进程与线程的了解

进程
进程 是计算机中的程序关于某数据集合上的一次运行的活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础
每个进程都拥有直接独立空间地址、数据栈
一个进程无法访问另一个进程里面定义的变量、数据结构
但是可以通过建立IPC通信,进程之间可以实现数据共享
进程是线程的容器
一个进程可以有好几个线程
nodeJS中启动一个服务进程,就一个进程
多进程:需要通过child_process中的的方法来创建:例如spawn、 fork
线程
线程是操作系统里面进行运算调度的最小单位
同一个进程中的多条线程可以共享进程中的全部系统资源,如虚拟地址空间、文件描述符等
但同一个进程中的多个线程又有各自的调用栈,自己的寄存环境,自己的线程本地存储
单线程:JS
一个进程一个线程(专一)
尽量别去做大量的同步计算与CPU 耗时的操作
多线程:Java
一个进程多个线程(风流)

2、process模块

是一个全局变量,它提供有关当前 Node.js 进程的信息并对其进行控制,作为一个全局变量,它始终可供 Node.js 应用程序使用,无需使用 require()
console.log(process.env); // 环境变量

console.log(process.pid); // 当前进程的ID

console.log(process.ppid); // 当前进程对应的父进程

console.log(process.cwd()); // 获取当前进程工作目录

2.1 process.exit([code])
调用 process.exit() 将强制进程尽快退出,即使还有尚未完全完成的异步操作
code:默认 0 退出码
0 成功代码
1失败代码 未捕获异常
...

2.2 process.on('exit', cb); 进程退出监听
2.3 process.on('uncaughtException', cb); 捕获异常信息

2.3 process.nextTick(callback); 下一次异步执行之前执行
2.4 process.kill(pid); // 杀死进程, 即使这个函数的名称是process.kill(),它其实只是发送信号, 这点与kill系统调用类似,

2.5 process.send(message); 用于进程之间的通信、message的类型可以是对象也可以是字符串
接收到的消息被视为父进程的ChildProcess对象上的一个'message'事件
2.6 process.on('message', callback(msg)); 监听message

3、child_process模块

创建子进程的四种方法

const {spawn, exec, execFile, fork} = require('child_process');

// spawn
let child = spawn('node', ['./child.js']);
child.stdout.pipe(process.stdout); // 123


// execFile
let child = execFile('node', ['./child.js'], (err, stdout, stderr) => {
    console.log(err, stdout, stderr); // null, 123 , ''
});

// exec
exec('node ./child.js', (err, stdout, stderr) => {
    console.log(err, stdout, stderr);// null, 123 , ''
});


// fork

let child = fork('./fork-child.js');

child.on('message', (msg) => {
    console.log(msg); // 发送信号
});

child.js模块

const fs = require('fs');

fs.readFile('./log.txt', function (err, buf) {
    console.log(buf.toString());
});

// log.txt  =>  123

fork-child.js

process.send('发送信号');

4、守护进程

主进程

const { spawn } = require('child_process');

function startServer(mod) {

    let child = spawn('node', [mod]);

    child.on('exit', (code) => {
        console.log('我在重启');
        startServer(mod)
    });
}

startServer('./child-server');

子进程
child-server.js

const http = require('http');

http.createServer((req, res) => {
    if (req.url === '/exit') {
        // 正常访问该接口之后则会将服务关闭
        // 如果启用另一个进程一直重启它则不会关闭
        process.exit(1);
    }
    res.end('ok');

}).listen(3002);

相关文章

  • 十天上手Node+KOA(2)

    任务 1、进程与线程的了解2、process3、child_process4、守护子进程 1、进程与线程的了解 进...

  • 十天上手Node+KOA(3)

    发布任务~一、path模块二、url模块三、formidable包 一、path模块 path 模块提供用于处理文...

  • node+koa实现数据mock

    基于node+koa实现的mock数据接口,Koa需要v7.6.0以上node版本,低于此版本请先升级node 目...

  • 儿子的布贴画《放学》

    2o21 教师节过去十天了,整理旧物,看到儿子小时的布贴画。 小学手工有布贴画、剪纸什么的,材料好找又容易上手。 ...

  • ReactiveCocoa

    ReactiveCocoa学习资料 1.最快让你上手ReactiveCocoa之基础篇 2.最快让你上手React...

  • OmniFocus上手(2):分类

    要点 1. 项目可以按照时间段来拆分;2. 上下文可以通过我们会处在的情境或场景来划分;3. 项目里可以通过创建文...

  • vue快速上手-2

    6. vue路由 route:首先它是个单数,译为路由,即我们可以理解为单个路由或者某一个路由; routes:它...

  • Flink(2) 简单上手

    maven 依赖 Flink 批处理能力 Flink 流处理能力 2.启动设置 启动nc

  • rac+mvvm开发

    1.IGListKit使用2.最快让你上手ReactiveCocoa之基础篇3.最快让你上手ReactiveCoc...

  • React Native第一站:仿美团App(项目)

    了解一些HTML、CSS、JS,RN还是很好上手的。 花了将近十天,很粗糙的把这个Demo写完了。很多不足,希望以...

网友评论

      本文标题:十天上手Node+KOA(2)

      本文链接:https://www.haomeiwen.com/subject/crcyjctx.html