在node.js中,只有一个线程执行所有操作,如果某个操作需要大量消耗 CPU 资源的情况上,后续操作需要等待。 node.js 提供了一个 child_process 模块 可以开启 多个子进程,多个子进程之间可以共享内存空间,可以通过子进程的相互通信来实现信息的交互。
spawn
child_process.spawn(command[, args][, options])
options.stdio
用于配置在父进程和子进程之间建立的管道, 默认情况下,stdin、 stdout 和 stderr 的管道会在父 Node.js 进程和衍生的子进程之间建立
options.detached
在默认请款下,只有在子进程全部退出后,父进程才能退出。为了让父进程可以先退出,而让子进程继续进行 I/O操作:在 Windows 上,设置 options.detached 为 true 可以使子进程在父进程退出后继续运行。
默认情况下,父进程将会等待被分离的子进程退出。 为了防止父进程等待 subprocess,可以使用 subprocess.unref() 方法(父进程先退出,子进程继续进行)。 这样做将会导致父进程的事件循环不会将子进程包含在其引用计数中,使得父进程可以独立于子进程退出,除非子进程和父进程之间建立了 IPC 通道。
detached.jsfork
child_process.fork(modulePath[, args][, options])
衍生一个新的 node.js 进程,并通过建立一个 IPC 通讯通道来调用一个指定的模块,该通道允许父进程与子进程之间相互发送信息;fork 方法返回一个隐式创建的代表子进程的 ChildProcess 对象;子进程的输入/输出执行完毕后,子进程不会自动退出,必须使用 process.exit() 方法显示退出
child_process.fork() 方法是 child_process.spawn() 的一个特例,专门用于衍生新的 Node.js 进程。 与 child_process.spawn() 一样返回 ChildProcess 对象。 返回的 ChildProcess 将会内置一个额外的通信通道,允许消息在父进程和子进程之间来回传递。
记住,衍生的 Node.js 子进程独立于父进程,但两者之间建立的 IPC 通信通道除外。 每个进程都有自己的内存,带有自己的 V8 实例。 由于需要额外的资源分配,因此不建议衍生大量的 Node.js 子进程。
fork.js forkMessage.jsexec开启子进程
child_process.exec(command[, options][, callback])
exec 方法可以开启一个用于运行某个命令的子进程并缓存子进程的输出结果;spawn 是一个异步方法,exec 是一个同步方法;衍生一个 shell 并在 shell 上运行命令
execFile开启子进程
可以使用 execFile 开启一个专门用于运行某个可执行文件的子进程;类似 child_process.exec(),但直接衍生命令,且无需先衍生一个 shell
网友评论