位置: 编程技术 - 正文

深入理解Node.js中的进程管理(深入理解中国式现代化)

编辑:rootadmin

推荐整理分享深入理解Node.js中的进程管理(深入理解中国式现代化),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深入理解新发展理念,推进供给侧结构性改革 的题目,深入理解新发展理念,深入理解新发展理念,深入理解计算机系统 电子书,深入理解新发展理念,深入理解中国式现代化,深入理解中国式现代化,深入理解新发展理念,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

本文主要对 Node.js 中进程管理相关的东西做一个简单介绍,包括 process 对象、child_process 模块和cluster 模块,详细的 API 可以查看官方文档,下面来看看详细的介绍吧。

Process 对象

process 是 Node.js 的一个全局对象,可以在任何地方直接使用而不需要 require 命令加载。process 对象提供了 当前 node 进程 的命令行参数、标准输入输出、运行环境和运行状态等信息。

常用属性

argv

process.argv 属性返回一个数组,第一个元素是 node,第二个元素是脚本文件名称,其余成员是脚本文件的参数。

env

process.env 返回一个对象,包含了当前 Shell 的所有环境变量,比如:

这个属性通常的使用场景是,新建一个 NODE_ENV 变量,用来确定当前所处的开发阶段,生成阶段设为 production,开发阶段设为 develop ,然后在脚本中读取 process.env.NODE_ENV 再做相应处理即可。

运行脚本时可以这样改变环境变量:

stdin/stdout

process.stdin 指向标准输入(键盘到缓冲区里的东西),返回一个可读的流:

process.stdout 指向标准输出(向用户显示内容),返回一个可写的流:

常用方法

cwd()

process.cwd() 返回运行 Node 的工作目录(绝对路径),比如在目录 /Users/huangtengfei/abc 下执行 node server.js,那么 process.cwd() 返回的就是 /Users/huangtengfei/abc。

另一个常用的获取路径的方法是 __dirname,它返回的是执行文件时该文件在文件系统中所在的目录。注意 process.cwd() 和 __dirname 的不同,前者是进程发起时的位置,后者是脚本的位置,两者可能不一致。

on()

process 对象部署了 EventEmitter 接口,可以使用 process.on() 方法监听各种事件,并指定回调函数。比如监听到系统发出进程终止信号时关闭服务器然后退出进程:

exit()

process.exit() 会让 Node 立即终止当前进程(同步),参数为一个退出状态码,0 表示成功,大于 0 的任意整数表示失败。

kill()

process.kill() 用来对特定 id 的进程(process.pid)发送信号,默认为 SIGINT 信号。比如杀死当前进程:

虽然名字叫 kill ,但其实 process.kill() 只是负责发送信号,具体发送完信号之后这个怎么处理这个指定进程,取决于信号种类和接收到这个信号之后做了什么操作(比如 process.exit() 或者只是 console.log('Ignored this single'))。

Child Process 模块

child_process 模块用于创建和控制子进程,其中最核心的是 .spawn() ,其他 API 算是针对特定场景对它的封装。使用前要先 require 进来:

exec(command[, options][, callback])

深入理解Node.js中的进程管理(深入理解中国式现代化)

exec() 方法用于执行 shell 命令,它的第一个参数是字符串形式的命令,第二个参数(可选)用来指定子进程运行时的定制化操作,第三个参数(可选)用来设置执行完命令的回调函数。比如在一个特定目录 /Users/huangtengfei/abc 下执行 ls -l 命令:

spawn(command[, args][, options])

spawn() 用来创建一个子进程执行特定命令,与 exec() 的区别是它没有回调函数,只能通过监听事件来获取运行结果,它适用于子进程长时间运行的情况,可以实时输出结果。

使用 spawn 可以实现一个简单的守护进程,在工作进程不正常退出时重启工作进程:

fork(modulePath[, args][, options])

fork() 用来创建一个子进程执行 node 脚本,fork('./child.js') 相当于 spawn('node', ['./child.js']) , 区别在于 fork 会在父子进程之间建立一个通信管道(fork() 的返回值),用于进程间通信。对该通信管道对象可以监听 message 事件,用来获取子进程返回的信息,也可以向子进程发送信息。

Cluster 模块

Node.js 默认单进程执行,但这样就无法利用多核计算机的资源,cluster 模块的出现就是为了解决这个问题的。在开发服务器程序时,可以通过 cluster 创建一个主进程和多个 worker 进程,让每个 worker 进程运行在一个核上,统一通过主进程监听端口和分发请求。

常用属性和方法

isMaster/isWorker

cluster.isMaster 用来判断当前进程是否是主进程,cluster.isWorker 用来判断当前进程是否是工作进程,两者返回的都是布尔值。

workers

cluster.workers 是一个包含所有 worker 进程的对象,key 为 worker.id,value 为 worker 进程对象。

fork([env])

cluster.fork() 方法用来新建一个 worker 进程,默认上下文复制主进程,只有主进程可调用。

常用事件

listening

在工作进程调用 listen 方法后,会触发一个 listening 事件,这个事件可以被 cluster.on('listening') 监听。

比如每当一个 worker 进程连进来时,输出一条 log 信息:

exit

在工作进程挂掉时,会触发一个 exit 事件,这个事件可以被 cluster.on('exit') 监听。

比如自动重启 worker:

worker 对象

worker 对象是 cluster.fork() 的返回值,代表一个 worker 进程。

worker.id

worker.id 是当前 worker 的唯一标识,也是保存在 cluster.workers 中的 key 值。

worker.process

所有的 worker 进程都是通过 child_process.fork() 生成的,这个进程对象保存在 worker.process 中。

worker.send()

worker.send() 用在主进程给子进程发送消息,在子进程中,使用 process.on() 监听消息并使用 process.send() 发送消息。

总结

标签: 深入理解中国式现代化

本文链接地址:https://www.jiuchutong.com/biancheng/377874.html 转载请保留说明!

上一篇:nodejs搭建本地http服务器教程(nodejs搭建本地资源服务器)

下一篇:node.js爬虫爬取拉勾网职位信息(nodejs爬虫技术)

  • 所得税汇算清缴时间期限
  • 企业增值税是什么科目
  • 一般纳税人一直零申报会降为小规模吗
  • 税盘没有及时清卡
  • 公司亏损股东退股还要贴钱
  • 制造业主要生产工艺
  • 增值税逾期未申报网上可以吗
  • 公司支付员工工伤赔偿怎么做账
  • 减免的教育费附加和地方教育费附加怎么做分录
  • 非正常原因导致的存货盘亏或毁损非正常原因是哪些
  • 税务编码如何快速查询
  • 外购无形资产的成本包括进口关税吗
  • 生产成本的工料有哪些
  • 将捐赠收入计入资本公积转增增值税
  • 其他应付款如何做账
  • 企业偷税行为
  • 安置残疾人支付的工资
  • 驾校收入与成本的关系
  • linux的grep命令使用
  • 系统自带功能
  • ftp pwd命令
  • 向灾区捐赠货物需要交增值税吗
  • 育空怀特霍斯附近的北极光,加拿大 (© Design Pics/Danita Delimont)
  • 银行同业利息 水利基金
  • 应收票据贴现的性质是什么
  • 中小企业发展专项资金绩效评价报告
  • 固定资产的预计使用寿命和净残值发生变更
  • 印克斯湖国家公园中的德克萨斯矢车菊,德克萨斯州 (© Inge Johnsson/Alamy)
  • php pdo oracle
  • php有面向对象吗
  • 融资租入固定资产是什么意思
  • vue $函数
  • 增值税纳税申报表在哪里查询
  • 融资租入固定资产
  • 增值税专用发票抵扣期限
  • vue 动态tab
  • javascript 箭头
  • mysql执行时间太长
  • 财务费用有发票吗
  • 无退税产品出口征税
  • 个税申报怎样作废
  • 个税申报汇算清缴流程
  • mysql怎么修改
  • 工地上购买的零食叫什么
  • 出租固定资产租金属于什么收入
  • 如何冲销应付账款
  • 销售商品发生的应收账款入账价值包括
  • 本月只有进项税没有销项税需要结转吗
  • 年末转出未交增值税借方余额怎么处理
  • 暂估收不到发票,怎么处理
  • 递延所得税转回税率不一致
  • 现金日记账1月份本年累计吗
  • 银行结算卡年费多少
  • 工会经费计提比例0.8%和2%有何区别
  • 备用金怎么做会计科目
  • 债权人接受债务人土地抵押,还会被其他债权人查封?
  • 安装sql2000sp4提示挂起
  • 通过注册表修改office默认字体
  • window部署服务
  • ubuntu21 安装
  • centos如何添加用户
  • 开源操作系统总结
  • 大白菜一键装机教程
  • win8.1系统更新后启动不了
  • dwm.exe占用内存过高怎么办
  • potplayer win7
  • 简述linux系统有什么优点
  • csinsm32.exe是安全的进程吗 csinsm32进程有哪些用处
  • win10预览版和正式版
  • Android游戏开发读后感
  • ubuntu重新安装网卡驱动
  • 怎么设置网页就用指定浏览器
  • linux中的shell命令
  • 在linux的主要组成部分中最基础的是哪一项?
  • javascript如何学
  • javascript中substr,substring,slice.splice的区别说明
  • 开票系统怎么升级?
  • 重庆市电子税务局电话
  • 城镇土地使用税暂行条例
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设