Node.js child_process

進程Process

場景:

vscode.exe是一個程序,不是一個進程,雙擊vscode.exe,系統(tǒng)會打開一個進程。

定義:

進程是程序的執(zhí)行實例
程序在cpu執(zhí)行的活動叫進程

特點:

一個進程可以創(chuàng)建另一個進程。(父進程與子進程)

CPU

特點:

一個單核CPU在一個時刻只能做一件事,但是可以在不同進程中快速切換

多程序并發(fā)執(zhí)行:

指多個程序在宏觀上并行,微觀上并行
每個進程會出現(xiàn) 【執(zhí)行-暫停-執(zhí)行】的規(guī)律
多個進程之間會搶資源

阻塞

等待執(zhí)行的進程中:
1.都是非運行態(tài)
2.一些(A)在等待CPU資源
3.一些(B)在等待I/O完成
4.如果把CPU分配給(B)進程,(B)還是在等I/O
5.我們把(B)叫做阻塞進程

分配程序只會把CPU分配給非阻塞進程

線程Thread

階段

1.在面向進程設計的系統(tǒng)中,進程是程序的基本執(zhí)行實體
2.在面向線程設計的系統(tǒng)中,進程本身不是基本運行單位,而是線程的容器

引入線程的原因:

進程是執(zhí)行的基本實體,也是資源分配的基本實體。
導致進程的創(chuàng)建,切換,銷毀太消耗cpu時間
引入線程,線程作為執(zhí)行的基本實體,而進程制作為資源分配的基本實體

概念:

CPU調(diào)度和執(zhí)行的最小單元
一個進程至少有一個線程
一個進程中的線程共享該進程的所有資源
進程的第一個線程叫做初始化線程
線程的調(diào)度可以由操作系統(tǒng)負責,也可以用戶負責

舉例:

瀏覽器進程中有渲染引擎,V8引擎,存儲模塊,網(wǎng)絡模塊
每個模塊都可以放一個線程中

child_process

子進程的運行結(jié)果存儲在系統(tǒng)緩存中(大約200kb),等子進程運行結(jié)束,主進程再回調(diào)函數(shù)讀取子進程的運行結(jié)果

exec(cmd,options,fn) (會被注入,盡量不用,用execFile)

const child_process = require('child_process')
const {exec} = child_process
const stream = exec('ls -l ../')
stream.stdout.on('data',(chunk)=>{
    console.log(chunk)
})

options的選項:

cwd: current working directory
env:環(huán)境變量
shell,
maxBuffer-最大緩存,默認1024 * 1024

spawn:

用法與execFile類似,只能通過流事件獲取結(jié)果,沒有最大200kb限制

const child_process = require('child_process')
const {spawn} = child_process
const userInput = "."
const streams = spawn("ls",["-la",userInput],{
    cwd:'./'
})
streams.stdout.on('data',(chunk)=>{
    console.log(chunk)
})

fork:

創(chuàng)建一個子進程,相當于執(zhí)行node腳本,fork('./child.js')相當于spawn('node',['./child.js'])

特點:

會多出一個message事件,用于父子通信
會多一個send方法

parent.js

const n = child_process.fork('./child.js');
n.on('message', function(m) {
console.log('PARENT got message:', m);
});
n.send({ hello: 'world' });

child.js

process.on('message', function(m) { 
console.log('CHILD got message:', m); 
}); 
process.send({ foo: 'bar' });

new Worker

v11.7 之前需要-- experimental-worker開啟,效率不高
工作線程對cpu密集型有用,但I/O操作效率不高

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容