麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

Nodejs極簡(jiǎn)入門教程(三):進(jìn)程

2019-11-20 13:59:29
字體:
供稿:網(wǎng)友

Node 雖然自身存在多個(gè)線程,但是運(yùn)行在 v8 上的 JavaScript 是單線程的。Node 的 child_process 模塊用于創(chuàng)建子進(jìn)程,我們可以通過子進(jìn)程充分利用 CPU。范例:

復(fù)制代碼 代碼如下:

var fork = require('child_process').fork;
// 獲取當(dāng)前機(jī)器的 CPU 數(shù)量
var cpus = require('os').cpus();
for (var i = 0; i < cpus.length; i++) {
    // 生成新進(jìn)程
    fork('./worker.js');
}

這里了解一下包括 fork 在內(nèi)的幾個(gè)進(jìn)程創(chuàng)建方法:

1.spawn(command, [args], [options]),啟動(dòng)一個(gè)新進(jìn)程來執(zhí)行命令 command,args 為命令行參數(shù)
2.exec(command, [options], callback),啟動(dòng)一個(gè)新進(jìn)程來執(zhí)行命令 command,callback 用于在進(jìn)程結(jié)束時(shí)獲取標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出,以及錯(cuò)誤信息
3.execFile(file, [args], [options], [callback]),啟動(dòng)一個(gè)新進(jìn)程來執(zhí)行可執(zhí)行文件 file,callback 用于在進(jìn)程結(jié)束時(shí)獲取標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出,以及錯(cuò)誤信息
4.fork(modulePath, [args], [options]),啟動(dòng)一個(gè)新進(jìn)程來執(zhí)行一個(gè) JavaScript 文件模塊,這時(shí)候創(chuàng)建的是 Node 子進(jìn)程

Node 進(jìn)程間通信

父進(jìn)程

復(fù)制代碼 代碼如下:

// parent.js
var fork = require('child_process').fork;
// fork 返回子進(jìn)程對(duì)象 n
var n = fork('./child.js');
// 處理事件 message
n.on('message', function(m) {
    // 收到子進(jìn)程發(fā)送的消息
    console.log('got message: ' + m);
});
 
// 向子進(jìn)程發(fā)送消息
n.send({hello: 'world'});

子進(jìn)程

復(fù)制代碼 代碼如下:

// child.js
// 處理事件 message
process.on('message', function(m) {
    console.log('got message: ' + m);
});
 
// process 存在 send 方法,用于向父進(jìn)程發(fā)送消息
process.send({foo: 'bar'});

需要注意的是,這里的 send 方法是同步的,因此不建議用于發(fā)送大量的數(shù)據(jù)(可以使用 pipe 來代替,詳細(xì)見:http://nodejs.org/api/all.html#child_process_child_process_spawn_command_args_options)。
特殊的情況,消息中 cmd 屬性值包含 NODE_ 前綴(例如:{cmd: ‘NODE_foo'} 消息),那么此消息不會(huì)被提交到 message 事件(而是 internalMessage 事件),它們被 Node 內(nèi)部使用。

send 方法的原型為:

復(fù)制代碼 代碼如下:

send(message, [sendHandle])

這里,sendHandle(handle)可以被用于發(fā)送:

1.net.Native,原生的 C++ TCP socket 或者管道
2.net.Server,TCP 服務(wù)器
3.net.Socket,TCP socket
4.dgram.Native,原生的 C++ UDP socket
5.dgram.Socket,UDP socket

send 發(fā)送 sendHandle 時(shí)實(shí)際上不是(也不能)直接發(fā)送 JavaScript 對(duì)象,而是發(fā)送文件描述符(最終以 JSON 字符串發(fā)送),其他進(jìn)程能夠通過這個(gè)文件描述符還原出對(duì)應(yīng)對(duì)象。

現(xiàn)在看一個(gè)例子:

父進(jìn)程

復(fù)制代碼 代碼如下:

// parent.js
var fork = require('child_process').fork;
 
var n = fork('./child.js');
 
var server = require('net').createServer();
server.listen(7000, function() {
    // 發(fā)送 TCP server 到子進(jìn)程
    n.send('server', server);
}).on('connection', function() {
    console.log('connection - parent');
});

子進(jìn)程

復(fù)制代碼 代碼如下:

process.on('message', function(m, h) {
    if (m === 'server') {
        h.on('connection', function() {
            console.log('connection - child');
        });
    }
});

通過端口 7000 訪問此程序,得到輸出可能為 connection

主站蜘蛛池模板: 欧美日韩在线视频一区 | 久久精品视频网站 | 在线播放免费播放av片 | 日韩av电影免费看 | 一级片久久免费 | 久草视频在线资源 | 精品中文字幕久久久久四十五十骆 | 在线无码| 天天色宗合 | 亚洲伊人色欲综合网 | 精品乱码久久久久 | 久久久鲁 | 国产中文av在线 | 一级视频在线播放 | 色女人在线 | 草久在线 | 综合国产一区 | 久国产精品视频 | 欧美a视频 | 男女羞羞视频在线观看免费 | 91情侣在线偷精品国产 | 免费欧美精品 | 日韩黄色成人 | 依人在线视频 | 黄色网址电影 | av电影在线播放 | 男女无套免费视频 | 一级免费在线 | 麻豆一二区 | 亚洲午夜一区二区三区 | 在线观看视频日本 | 爱唯侦察 国产合集 亚洲 | 姑娘第5集高清在线观看 | 91网站链接 | 毛片国产| 美女视频黄视大全视频免费网址 | 激情视频导航 | 日日草夜夜 | 午夜视频在线 | 一级做受大片免费视频 | 亚洲第一成人在线观看 |