wha*_*ide 10 javascript concurrency node.js
举个简短的例子:我有一个名为的文件parent.js,代码如下:
var child_process = require('child_process')
var forker = child_process.fork(__dirname + '/child.js')
forker.on('message', function (msg) {
console.log('PARENT got message:', msg)
})
// sends a message to the forked process?
forker.send({msg: 'Parent message.'})
Run Code Online (Sandbox Code Playgroud)
第一个问题:我做对了吗?child_process.fork()返回forker进程,不是吗?(比如child_process.spawn()?)
无论如何,这里是代码child.js:
process.on('message', function (msg) {
console.log('CHILD got message:', msg)
})
// sends a message to the forker process? why?
process.send({msg: 'Message from the child.'})
Run Code Online (Sandbox Code Playgroud)
第二个问题:process儿童过程中涉及什么?我猜到当前的分叉过程?如果是这样,当我打电话给process.send()我正在向父进程发送消息时?
第三个问题:举个例子(Node:Up and Running)的简化版本:
var cluster = require('cluster')
if (cluster.isMaster) {
// fork child...
var worker = cluster.fork()
worker.on('message', function (msg) {
// do stuff
})
} else if (cluster.isWorker) {
process.send(aMessage)
}
Run Code Online (Sandbox Code Playgroud)
我发现不清楚的是:worker是forker上一个例子中的一种吗?而process.send()工人内将消息发送到forker过程?
dan*_*cic 10
1)child_process.fork()以与child_process.spawn()返回新生成的进程相同的方式返回分叉进程.的确,fork()只是
[...]
spawn()产生Node进程的功能的特例.除了在普通的ChildProcess实例中具有所有方法之外,返回的对象还具有内置的通信通道.1
2)process在孩子中指的是孩子process.也,
在子进程中,进程对象将具有send()方法,并且进程将在每次在其通道上接收消息时发出对象.2
因此,从孩子内部我们可以发送带有'send()'的消息,我们可以接收它们.on('message').就像你的片段一样.
3)如cluster关于Node.js上的模块的文档中所述:
使用the生成工作进程
child_process.fork method,以便它们可以通过IPC与父进程通信并来回传递服务器句柄.3
所以你是对的.节点集群process以更有用的方式包装功能(请注意,此时,cluster模块标记为实验性.Api可能在不久的将来发生变化).
| 归档时间: |
|
| 查看次数: |
7896 次 |
| 最近记录: |