nodejs的多线程编程主要是依赖原生类库中的child_process这个库。官方文档:http://nodejs.org/api/child_process.html

使用child_process里的fork函数,来创建子线程。我们需要两个脚本,一个叫parent.js一个叫child.js,由parent来启动child。两者之间通过"process.on('message', function(msg) {});"来相互通讯。只要处理好了消息传输的事件,基本上来说还是很简单的。

下面给出例子:

parent.js

[codesyntax lang="javascript"]

var childProcess = require('child_process');

var child = childProcess.fork('./child.js');
child.on('message', function(msg) { // 处理child线程发送过来的消息
    if (typeof msg != 'object' || !msg.hasOwnProperty('cmd')) {
        console.log('[Parent] Invalid message! ' + JSON.stringify(msg));
        return;
    }
    switch (msg.cmd) {
        case 'childSay':
            console.log('child say: ' + msg.data.chat);
            break;
        default:
            console.log('[Parent] Invalid message command! ' + JSON.stringify(msg));
            break;
    }
});
child.send({cmd: 'parentSay', data: {chat: 'This is parent!'}}); // 向child线程发送消息

[/codesyntax]

child.js

[codesyntax lang="javascript"]

process.on('message', function(msg) { // 处理parent线程发送过来的消息
    if (typeof msg != 'object' || !msg.hasOwnProperty('cmd')) {
        console.log('[Child] Invalid message! ' + JSON.stringify(msg));
        return;
    }
    switch (msg.cmd) {
        case 'parentSay':
            console.log('parent say: ' + msg.data.chat);
            process.send({}); // invalid message
            process.send({cmd: 'invalid'}); // invalid command
            process.send({cmd: 'childSay', data: {chat: 'This is child!'}}); // 向parent线程发送消息
            process.exit(0);
            break;
        default:
            console.log('[Child] Invalid message command! ' + JSON.stringify(msg));
            break;
    }
});

[/codesyntax]