最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • child_process让nodejs不再孤单

    正文概述 掘金(少冰)   2021-01-12   615

    nodejs 多进程child_process

    nodejs多进程要引入child_process模块

    const child_process = require('child_process')
    

    多进程方法之一exec

    exec 执行命令,它的返回值是一个对象,类似Event类的实例,可以通过on监听exit事件,回调函数中嵌入一个code返回退出码。

    执行命令时,child_process会令一个子进程去运行字符串的命令,在window和linux下可以运行和系统有关系的独特的命令,比如ls。这样做的好处是不堵塞js现在正想要做的事情,而是分发出一个任务让另一个进程去完成,缺点也是有的,产生和销毁进程和进程通信会浪费计算资源和内存资源。nodejs程序占用内存不大,可以适当的增加进程来提高程序的执行效率,比如我想做一个计算任务的时候可以用exec去让C语言,亦或是其他语言去执行任务拿到返回值而不是在主进程中运算,nodejs的长处并不是计算,所以让nodejs去做自己更加擅长的IO操作是更好的。

    const workerProcess = child_process.exec('node index1.js '+1,function(err,stdout,stderr){
        
    })
    workerProcess.on('exit',(code)=>{
        //默认退出码是0
    })
    

    exec第一个参数是命令字符串String,第二个参数是回调函数Function,函数中传入三个参数,第一个是错误,第二个是命令行输出结果,第三个是命令行输出了错误。

    第一个错误可能是node 打错比如(nnde)搞得命令执行不了,第三个错误可能是程序的错误而不是命令行命令的错误。

    exec函数的返回值是一个子进程对象workerProcess,它可以监听子进程是否退出,我认为它其中的一个用处是在退出的时候才开始分发新的子进程防止进程数量无限制的增加。

    多进程方法之二spwan

    spwanexec可以肉眼直接看出来的差别是spwan的参数是用数组包起来的,例如child_process.exec('node index.js');child_process.spwan('node',['index.js'])

    除此之外,spwan返回的对象上载有流对象,分别是stdoutstderr,这两个对象可以监听数据流,stdout类似exec回调函数的第二个参数stdout,stderr类似于第三个参数,他们可以监听控制台输出的内容,以回调函数的参数的形式返回。workerProcess可以像exec一样监听退出事件,它的监听键是close,回调函数和exec的回调函数的参数一样,返回code且默认是0。

    const workerProcess = child_process.spwan('node',['index.js']);
    workerProcess.stdout.on('data',function(data){
        console.log('spawn cmd data :'+data);
    })
    workerProcess.stderr.on('data',function(data){
        console.log('spawn cmd error data :'+data);
    })
    workerProcess.on('close',function(code){
        console.log('spawn cmd close :'+code);
    })
    

    多进程方法之三fork

    第三个方法和前两个方法在参数传递有明显的差别,那就是前两个方法要写完整的命令行命令字符串,fork 不用并且它只执行nodejs的文件并且不用带上node在前面。传递参数的方式和spawn 有点像,看看代码如下:

    child_process.fork('index.js');
    child_process.fork('index.js',[1,2,3]);//1,2,3 作为命令后面的参数,比如这命令翻译一下就是 node index.js 1 2 3,spwan也可以这样
    

    1,2,3 作为命令后面的参数,比如这命令翻译一下就是 node index.js 1 2 3,spwan也可以这样子把参数带到后面,对于后面的参数可以通过process.argv.slice(2)来获取。

    写这篇文章的目的是为了加深自己对于不熟悉知识点的记忆,如果能帮到人的话是一举多得。我记得好像cluster也可以用多进程?下次看到相关的内容我会总结补充


    起源地下载网 » child_process让nodejs不再孤单

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元