国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Node.js中的child_process模塊詳解

2024-05-06 15:33:31
字體:
來源:轉載
供稿:網友

前言

本文主要給大家介紹了關于Node.js中child_process模塊的相關內容,在介紹child_process模塊之前,先來看一個例子。

const http = require('http');const longComputation = () => { let sum = 0; for (let i = 0; i < 1e10; i++) { sum += i; }; return sum;};const server = http.createServer();server.on('request', (req, res) => { if (req.url === '/compute') { const sum = longComputation(); return res.end(`Sum is ${sum}`); } else { res.end('Ok') }});server.listen(3000);

可以試一下使用上面的代碼啟動Node.js服務,然后打開兩個瀏覽器選項卡分別訪問/compute和/,可以發現node服務接收到/compute請求時會進行大量的數值計算,導致無法響應其他的請求(/)。

在Java語言中可以通過多線程的方式來解決上述的問題,但是Node.js在代碼執行的時候是單線程的,那么Node.js應該如何解決上面的問題呢?其實Node.js可以創建一個子進程執行密集的cpu計算任務(例如上面例子中的longComputation)來解決問題,而child_process模塊正是用來創建子進程的。

創建子進程的方式

child_process提供了幾種創建子進程的方式

異步方式:spawn、exec、execFile、fork 同步方式:spawnSync、execSync、execFileSync

首先介紹一下spawn方法

child_process.spawn(command[, args][, options])command: 要執行的指令args: 傳遞參數options: 配置項
const { spawn } = require('child_process');const child = spawn('pwd');

pwd是shell的命令,用于獲取當前的目錄,上面的代碼執行完控制臺并沒有任何的信息輸出,這是為什么呢?

控制臺之所以不能看到輸出信息的原因是由于子進程有自己的stdio流(stdin、stdout、stderr),控制臺的輸出是與當前進程的stdio綁定的,因此如果希望看到輸出信息,可以通過在子進程的stdout 與當前進程的stdout之間建立管道實現

child.stdout.pipe(process.stdout);

也可以監聽事件的方式(子進程的stdio流都是實現了EventEmitter API的,所以可以添加事件監聽)

child.stdout.on('data', function(data) { process.stdout.write(data);});

在Node.js代碼里使用的console.log其實底層依賴的就是process.stdout

除了建立管道之外,還可以通過子進程和當前進程共用stdio的方式來實現

const { spawn } = require('child_process');const child = spawn('pwd', { stdio: 'inherit'});

stdio選項用于配置父進程和子進程之間建立的管道,由于stdio管道有三個(stdin, stdout, stderr)因此stdio的三個可能的值其實是數組的一種簡寫

pipe 相當于['pipe', 'pipe', 'pipe'](默認值) ignore 相當于['ignore', 'ignore', 'ignore'] inherit 相當于[process.stdin, process.stdout, process.stderr]
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 闽侯县| 中江县| 黄平县| 剑河县| 穆棱市| 梁河县| 广安市| 哈巴河县| 沈丘县| 喀什市| 社旗县| 大城县| 株洲市| 克拉玛依市| 游戏| 闽清县| 汉源县| 长沙县| 综艺| 辽阳市| 上饶市| 莱阳市| 抚州市| 洞头县| 竹山县| 蒙城县| 宜兴市| 体育| 双柏县| 南漳县| 虹口区| 兴宁市| 洪泽县| 昭觉县| 灵丘县| 湘西| 宜川县| 宁波市| 莱芜市| 杭锦后旗| 上思县|