Node 雖然自身存在多個線程,但是運行在 v8 上的 JavaScript 是單線程的。Node 的 child_process 模塊用于創建子進程,我們可以通過子進程充分利用 CPU。范例:
這里了解一下包括 fork 在內的幾個進程創建方法:
1.spawn(command, [args], [options]),啟動一個新進程來執行命令 command,args 為命令行參數
2.exec(command, [options], callback),啟動一個新進程來執行命令 command,callback 用于在進程結束時獲取標準輸入、標準輸出,以及錯誤信息
3.execFile(file, [args], [options], [callback]),啟動一個新進程來執行可執行文件 file,callback 用于在進程結束時獲取標準輸入、標準輸出,以及錯誤信息
4.fork(modulePath, [args], [options]),啟動一個新進程來執行一個 JavaScript 文件模塊,這時候創建的是 Node 子進程
Node 進程間通信
父進程
子進程
需要注意的是,這里的 send 方法是同步的,因此不建議用于發送大量的數據(可以使用 pipe 來代替,詳細見:http://nodejs.org/api/all.html#child_process_child_process_spawn_command_args_options)。
特殊的情況,消息中 cmd 屬性值包含 NODE_ 前綴(例如:{cmd: ‘NODE_foo'} 消息),那么此消息不會被提交到 message 事件(而是 internalMessage 事件),它們被 Node 內部使用。
send 方法的原型為:
這里,sendHandle(handle)可以被用于發送:
1.net.Native,原生的 C++ TCP socket 或者管道
2.net.Server,TCP 服務器
3.net.Socket,TCP socket
4.dgram.Native,原生的 C++ UDP socket
5.dgram.Socket,UDP socket
send 發送 sendHandle 時實際上不是(也不能)直接發送 JavaScript 對象,而是發送文件描述符(最終以 JSON 字符串發送),其他進程能夠通過這個文件描述符還原出對應對象。
現在看一個例子:
父進程
子進程
通過端口 7000 訪問此程序,得到輸出可能為 connection 主站蜘蛛池模板: 铜川市| 安庆市| 香格里拉县| 石家庄市| 威信县| 昭觉县| 策勒县| 中方县| 屯留县| 海丰县| 花莲县| 红桥区| 改则县| 灵武市| 宣武区| 邵阳县| 临清市| 长岭县| 中超| 井冈山市| 微博| 牡丹江市| 鹰潭市| 墨竹工卡县| 胶州市| 云浮市| 南溪县| 分宜县| 遂溪县| 乌鲁木齐县| 英吉沙县| 绥棱县| 分宜县| 昔阳县| 巴青县| 砀山县| 潼关县| 乡宁县| 花莲市| 延边| 师宗县|