加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

深入领略Node.js 历程与线程(8000字长文彻底搞懂)

发布时间:2019-08-15 19:32:31 所属栏目:建站 来源:koala
导读:媒介 历程与线程是一个措施员的必知观念,口试常常被问及,可是一些文章内容只是讲讲理论常识,也许一些小搭档并没有真的领略,在现实开拓中应用也较量少。本篇文章除了先容观念,通过Node.js 的角度讲授历程与线程,而且讲授一些在项目中的拭魅战的应用,让

每次启动 Node.js 措施都必要在呼吁窗口输入呼吁 node app.js 才气启动,但假如把呼吁窗口封锁则Node.js 措施处事就会立即断掉。除此之外,当我们这个 Node.js 处事不测瓦解了就不能自动重启历程了。这些征象都不是我们想要看到的,以是必要通过某些方法来保卫这个开启的历程,执行 node app.js 开启一个处事历程之后,我还可以在这个终端上做些此外工作,且不会彼此影响。,当呈现题目可以自动重启。

怎样实现历程保卫

这里我只说一些第三方的历程保卫框架,pm2 和 forever ,它们都可以实现历程保卫,底层也都是通过上面讲的 child_process 模块和 cluster 模块 实现的,这里就不再提它们的道理。

pm2 指定出产情形启动一个名为 test 的 node 处事

  1. pm2 start app.js --env production --name test 

pm2常用api

  • pm2 stop Name/processID 遏制某个处事,通过处事名称可能处事历程ID
  • pm2 delete Name/processID 删除某个处事,通过处事名称可能处事历程ID
  • pm2 logs [Name] 查察日记,假如添加处事名称,则指定查察某个处事的日记,不加则查察全部日记
  • pm2 start app.js -i 4 集群,-i 参数用来汇报PM2以cluster_mode的情势运行你的app(对应的叫fork_mode),后头的数字暗示要启动的事变线程的数目。假如给定的数字为0,PM2则会按照你CPU焦点的数目来天生对应的事变线程。留意一样平常在出产情形行使cluster_mode模式,测试可能当地情形一样平常行使fork模式,利便测试到错误。
  • pm2 reload Name pm2 restart Name 应用措施代码有更新,可以用重载来加载新代码,也可以用重启来完成,reload可以做到0秒宕机加载新的代码,restart则是从头启动,出产情形中多用reload来完成代码更新!
  • pm2 show Name 查察处事详情
  • pm2 list 查察pm2中全部项目
  • pm2 monit用monit可以打开及时监督器去查察资源占用环境

pm2 官网地点:

  1. http://pm2.keymetrics.io/docs... 

forever 就不非凡声名白,官网地点

  1. https://github.com/foreverjs/... 

留意:二者更保举pm2,看一下二者比拟就知道我为什么更保举行使pm2了。https://www.jianshu.com/p/fdc...

linux 封锁一个历程

  • 查找与历程相干的PID号

ps aux | grep server

声名:

  1. root 20158 0.0 5.0 1251592 95396 ? Sl 5月17 1:19 node /srv/mini-program-api/launch_pm2.js 

上面是执行呼吁后在linux中表现的功效,第二个参数就是历程对应的PID

  • 杀死历程
  1. 以优雅的方法竣事历程

kill -l PID

-l选项汇报kill呼吁用仿佛启动历程的用户已注销的方法竣事历程。

当行使该选项时,kill呼吁也试图杀死所留下的子历程。

但这个呼吁也不是总能乐成--或者如故必要先手工杀死子历程,然后再杀死父历程。

  1. kill 呼吁用于终止历程

譬喻: kill -9 [PID]

-9 暗示强制历程当即遏制

这个强盛和伤害的呼吁迫使历程在运行时溘然终止,历程在竣事后不能自我整理。

危害是导致体系资源无法正常开释,一样平常不保举行使,除非其他步伐都无效。

当行使此呼吁时,必然要通过ps -ef确认没有剩下任何僵尸历程。

只能通过终止父历程来消除僵尸历程。假如僵尸历程被init收养,题目就较量严峻了。

杀死init历程意味着封锁体系。

假如体系中有僵尸历程,而且其父历程是init,

并且僵尸历程占用了大量的体系资源,那么就必要在某个时辰重启呆板以破除历程表了。

  1. killall呼吁

杀死统一历程组内的全部历程。其应承指定要终止的历程的名称,而非PID。

killall httpd

Node.js 线程

Node.js关于单线程的误区

  1. const http = require('http'); 
  2.  
  3. const server = http.createServer(); 
  4. server.listen(3000,()=>{ 
  5.     process.title='措施员生长指北测试历程'; 
  6.     console.log('历程id',process.pid) 
  7. }) 

如故看本文第一段代码,建设了http处事,开启了一个历程,都说了Node.js是单线程,以是 Node 启动后线程数应该为 1,可是为什么会开启7个线程呢?莫非Javascript不是单线程不知道小搭档们有没有这个疑问?

表明一下这个缘故起因:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读