成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Node.js學(xué)習(xí)之路14——Process進程

darry / 1001人閱讀

摘要:在中,只支持單線程。在這種場合下,如果能夠使用多進程,則可以為每個請求分配一個進程,從而可以更好地使用服務(wù)器端的資源。進程進程對象的屬性用于運行應(yīng)用程序的可執(zhí)行文件的絕對路徑的版本號及其各依賴的版本號當(dāng)前運行的平臺用于讀入標(biāo)準(zhǔn)輸入流的對象。

Process
在Node.js中,只支持單線程。但是在應(yīng)用程序中,如果只使用單線程進行操作,從接收請求開始到返回響應(yīng)為止的這段時間內(nèi)可能存在很長的一段等待時間。在這種場合下,如果能夠使用多進程,則可以為每個請求分配一個進程,從而可以更好地使用服務(wù)器端的CPU資源。為了實現(xiàn)多線程處理,Node.js中提供了child_process模塊與cluster模塊,其中的child_process模塊用于實現(xiàn)在Node.js應(yīng)用程序中開啟多個子進程,并在各個子進程中運行各種不同的命令或執(zhí)行Node.js模塊文件,可執(zhí)行文件的處理,cluster模塊用于實現(xiàn)在Node.js應(yīng)用程序中開啟多個子進程,在每個子進程中運行一個Node.js應(yīng)用程序副本的處理。
1. 進程 1.1 進程對象的屬性

process.execPath: 用于運行應(yīng)用程序的可執(zhí)行文件的絕對路徑

version: Node.js的版本號

versions: Node.js及其各依賴的版本號

platform: 當(dāng)前運行Node.js的平臺

stdin: 用于讀入標(biāo)準(zhǔn)輸入流的對象。默認(rèn)情況下,標(biāo)準(zhǔn)輸入流處于暫停狀態(tài),比如恢復(fù)讀取標(biāo)準(zhǔn)輸入流process.stdin.resume()

stdout: 用于寫入標(biāo)準(zhǔn)輸出流的對象

stderr: 用于寫入標(biāo)準(zhǔn)錯誤輸出流的對象

與其他寫入流數(shù)據(jù)的對象不同,process.stdout對象與process.stderr對象的寫數(shù)據(jù)操作是一種阻塞型操作

只有當(dāng)使用其他讀取流數(shù)據(jù)的對象的pipe方法,并且將process.stdout對象或process.stderr對象作為目標(biāo)對象的時候,process.stdout對象與process.stderr對象的寫數(shù)據(jù)操作才是非阻塞型操作。

argv: 屬性值為一個數(shù)組,包含了運行Node.js應(yīng)用程序時所有命令行參數(shù)。

env: 運行Node.js應(yīng)用程序的操作系統(tǒng)的信息

config: 包含了用于編譯當(dāng)前Node.js應(yīng)用程序的可執(zhí)行文件的配置選項的JavaScript描述

pid: 運行當(dāng)前Node.js應(yīng)用程序的進程PID

title: 運行當(dāng)前Node.js應(yīng)用程序命令行窗口的標(biāo)題

arch: 運行當(dāng)前Node.js應(yīng)用程序的處理器架構(gòu),arm,ia32,x64等

1.2 進程對象的方法 1.2.1 內(nèi)存使用量memoryUsage()

該方法不使用任何參數(shù),返回一個對象,對象所擁有的屬性如下

rss: 屬性值為一個整數(shù),表示運行Node.js應(yīng)用程序的進程的內(nèi)存消耗量,單位為字節(jié)

headTotal: 屬性值為一個整數(shù),表示為V8所分配的內(nèi)存量,單位為字節(jié)

headUsed: 屬性值為一個整數(shù),表示V8的內(nèi)存消耗量,單位為字節(jié)

1.2.2 nextTick()方法

process.nextTick(callback)參數(shù)為被推遲的函數(shù)

用于將一個函數(shù)推遲到代碼中所書寫的下一個同步方法執(zhí)行完畢時,或異步方法的事件回調(diào)函數(shù)開始執(zhí)行時調(diào)用。

作用與將setTimeout方法的事件參數(shù)值指定為0的作用相同

但是nextTick()方法中指定的函數(shù)的調(diào)用速度比setTimeout方法中指定的函數(shù)的調(diào)用速度快很多

在讀取完畢文件后調(diào)用nextTick()

const process = require("process");
const fs = require("fs");
var finish = function () {
    console.log("文件讀取完畢");
}
process.nextTick(finish);
console.log(fs.readFileSync("./fs.js").toString());

指定兩個耗時操作同步進行

const process = require("process");
const fs = require("fs");
function foo() {
    process.nextTick(Task);
}
function Task() {
    var file = fs.createReadStream("./fs.js");
    file.on("data", (data) => {
        console.log("Task函數(shù)中,讀取到字節(jié)長度:", data.length);
    })
}
var file = fs.createReadStream("./fs.js");
file.on("data", (data) => {
    console.log("全局中,讀取到字節(jié)長度:", data.length);
});
foo();

在Node.js中,提供了一個process.maxTickDepth屬性,默認(rèn)的屬性值為1000,當(dāng)遞歸深度達(dá)到process.maxTickDepth屬性值之后,允許遞歸函數(shù)之外的代碼繼續(xù)執(zhí)行,但是會發(fā)出警告,提醒開發(fā)者改用setImmediate方法

1.2.3 process.abort()方法

向運行Node.js應(yīng)用程序的進程發(fā)出SIGABRT信號,使進程異常終止,同時產(chǎn)生一個核心文件,該方法中不使用任何參數(shù)

1.2.4 改變文件目錄process.chdir()

修改Node.js應(yīng)用程序中使用的當(dāng)前工作目錄

process.chdir(directory)

參數(shù)可以為一個字符串,用于指定當(dāng)前工作目錄,該目錄可以為一個相對路徑,也可以為一個絕對路徑。如果指定路徑不存在,報錯。

1.2.5 返回當(dāng)前目錄process.cwd()
const process = require("process");
console.log("當(dāng)前目錄:" + process.cwd());
process.chdir("../");
console.log("上層目錄:" + process.cwd());
1.2.6 退出程序process.exit()

退出運行Node.js應(yīng)用程序的進程

使用一個整數(shù)值參數(shù),指定為操作系統(tǒng)提供退出代碼,代碼為0表示正常退出,不使用該參數(shù)時的默認(rèn)參數(shù)值為0

1.2.7 設(shè)置或返回進程的組ID

process.getgid() 返回運行Node.js應(yīng)用程序的進程的組ID,該方法只有在非windows操作系統(tǒng)下有效,不使用任何參數(shù)

process.setgid(id) 用于設(shè)置運行Node.js應(yīng)用程序的進程的組ID,該方法只有在非windows操作系統(tǒng)下有效,不使用任何參數(shù)

setgid方法中使用一個參數(shù),參數(shù)值可以為一個整數(shù)類型的組ID,也可以為一個字符串類型的組名,如果指定組名,該組名將自動解析為組ID

1.2.8 設(shè)置或返回進程的用戶ID

process.getuid() 返回運行Node.js應(yīng)用程序的進程的用戶ID,該方法只有在非windows操作系統(tǒng)下有效,不使用任何參數(shù)

process.setuid(id) 用于設(shè)置運行Node.js應(yīng)用程序的進程的用戶ID,該方法只有在非windows操作系統(tǒng)下有效

1.2.9 向進程發(fā)送信號

process.kill(pid, [signal])用于向進程發(fā)送信號

pid參數(shù)為必須指定參數(shù),signal參數(shù)為可選參數(shù),pid參數(shù)為一個整數(shù),用于指定需要接收信號的進程ID,signal參數(shù)值為一個字符串,用于指定需要發(fā)送的信號,例如SIGINTSIGUSR1,當(dāng)不使用該參數(shù)時,默認(rèn)參數(shù)值為SIGTERM,表示終止該進程

1.2.9 讀取或修改進程的文件權(quán)限掩碼

umask([mask])用于讀取或修改運行Node.js應(yīng)用程序的進程的文件權(quán)限掩碼。

子進程將繼承父進程的文件權(quán)限掩碼

參數(shù)用于設(shè)定修改后的文件權(quán)限掩碼,如果不使用參數(shù),返回進程當(dāng)前使用的文件的權(quán)限掩碼

const process = require("process");
var oldmask, newmask = 0644;
oldmask = process.umask(newmask);
console.log("修改前的掩碼:", oldmask.toString(8));
console.log("修改后的掩碼:", newmask.toString(8));
/****
 * 修改前的掩碼: 0
 * 修改后的掩碼: 644
 */
1.2.10 時間

返回當(dāng)前運行時間(秒)process.uptime()

測試一個代碼運行時間process.hrtime()

const process = require("process");
let time = process.hrtime();
for (let i = 0; i < 1000; i++) { }
var endTime = process.hrtime(time);
console.log(endTime);
1.3 進程對象的事件 1.3.1 退出事件exit
const process = require("process");
process.on("exit", () => {
    console.log("Node.js程序退出");
});
process.exit();
1.3.2 異常事件uncaughtException
const process = require("process");
process.on("uncaughtException", (err) => {
    console.log("捕獲到一個異常錯誤", err);
});
undefinedFunction();
1.3.3 各種信號事件

當(dāng)運行Node.js應(yīng)用程序的進程接收到各種事件是,會觸發(fā)各種信號事件

可以通過對這些事件進行監(jiān)聽并指定事件回調(diào)函數(shù)的方法對該信號進行處理,回調(diào)函數(shù)不需要任何參數(shù)。

1.4 創(chuàng)建多進程應(yīng)用程序 1.4.1 使用spawn方法開啟子進程

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

command參數(shù)值為一個字符串,指定需要運行的命令

args為一個數(shù)組,存放了所有運行該命令時所需要使用的參數(shù),參數(shù)的指定順序與數(shù)組中的元素順序保持一致,默認(rèn)為空

option參數(shù)值為一個對象,用于指定開啟子進程時所使用的選項

cwd: 指定子進程當(dāng)前的工作目錄

stdio: 設(shè)置子進程的標(biāo)準(zhǔn)輸入/輸出

customFds: 數(shù)組,子進程的標(biāo)準(zhǔn)輸入/輸出指定文件描述符

env: 為子進程指定環(huán)境變量,不指定時,沒有可以使用的環(huán)境變量

detached: 布爾值,該子進程為一個進程組中的領(lǐng)頭進程

uid: 設(shè)置子進程的用戶ID

gid: 設(shè)置子進程的組ID

const process = require("process");
const cp = require("child_process");
let sp1 = cp.spawn("node", ["test1.js", "one", "two", "three"], {cwd: "./one"})
let sp2 = cp.spawn("node", ["test2.js"], {stdio: "pipe"});
sp1.stdout.on("data", (data)=>{
    console.log("子進程 sp1 標(biāo)注輸出:", data);
    sp2.stdin.write(data);
});

sp1.on("exit", (code, signal)=>{
    console.log("子進程 sp1 退出,退出代碼為", code);
    process.exit();
});

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92956.html

相關(guān)文章

  • Node.js學(xué)習(xí)之路08——fs文件系統(tǒng)之stream流的基本介紹

    摘要:中各種用于讀取數(shù)據(jù)的對象對象描述用于讀取文件代表客戶端請求或服務(wù)器端響應(yīng)代表一個端口對象用于創(chuàng)建子進程的標(biāo)準(zhǔn)輸出流。如果子進程和父進程共享輸入輸出流,則子進程的標(biāo)準(zhǔn)輸出流被廢棄用于創(chuàng)建子進程的標(biāo)準(zhǔn)錯誤輸出流。 9. stream流 fs模塊中集中文件讀寫方法的區(qū)別 用途 使用異步方式 使用同步方式 將文件完整讀入緩存區(qū) readFile readFileSync 將文件部...

    BoYang 評論0 收藏0
  • Node.js 全局對象 process

    摘要:是一個全局變量,對象的屬性。的源碼啟動進程,評估時返回函數(shù)失敗。調(diào)用監(jiān)聽器回調(diào)函數(shù)時會將的值作為唯一參數(shù)傳入。信號列表詳見標(biāo)準(zhǔn)的信號名,如等。返回一個對象,描述了進程所用的內(nèi)存狀況,單位為字節(jié)。一旦當(dāng)前事件循環(huán)結(jié)束,調(diào)用回調(diào)函數(shù)。 process是一個全局變量,global對象的屬性。它的作用是描述當(dāng)前Node.js進程狀態(tài)的對象,提供了一個與操作系統(tǒng)的簡單接口。通常在你寫本地命令程序...

    JasonZhang 評論0 收藏0
  • Node.js學(xué)習(xí)之路15——Domain捕獲錯誤

    摘要:可以通過監(jiān)聽該對象的事件并指定事件回調(diào)函數(shù)的方法來實現(xiàn)當(dāng)捕捉到錯誤時的處理。 1. 捕獲錯誤 try...catch機制不能捕獲異步方法拋出的錯誤 uncaughtException時間可以捕獲任何未被處理的錯誤,但是可能會引起內(nèi)存泄漏等情況 2. domain模塊獲取錯誤 使用domian模塊中的create方法創(chuàng)建一個domain對象,var domain = domain...

    Cc_2011 評論0 收藏0
  • Node 基礎(chǔ)學(xué)習(xí)

    摘要:既然這樣,怎么理解中的單線程再捋一捋和的關(guān)系。在線程上,不會等待操作完成,繼續(xù)執(zhí)行后續(xù)的代碼。這就是單線程異步。在中除了代碼,一切都是并行的由于中主任務(wù)的執(zhí)行是以單線程的方式進行,如果程序出錯導(dǎo)致崩潰,就會終止整個流程。 node是什么 Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環(huán)境。 Node.js 使用了一個事件驅(qū)動、非阻塞式 I/O 的模...

    alaege 評論0 收藏0
  • Node.js 進程平滑離場剖析

    摘要:在談如何做到進程平滑離場前,我們需要一種機制,這種機制能讓我們主動通知進程何時離場,這就涉及到進程間通信的知識了,我們先簡單了解下。進程間通信對或類系統(tǒng)而言,進程間通信的方式有很多種信號是其中的一種。 本文由云+社區(qū)發(fā)表作者:草小灰 使用 Node.js 搭建 HTTP Server 已是司空見慣的事。在生產(chǎn)環(huán)境中,Node 進程平滑重啟直接關(guān)系到服務(wù)的可靠性,它的重要性不容我們忽視...

    xbynet 評論0 收藏0

發(fā)表評論

0條評論

darry

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<