前文简单梳理了Node.js使用child_process模块创建子进程的4种方法,exec
、execFile
、fork
和spawn
。接下来我们看看cluster模块如何创建子进程,后续更多内容会介绍cluster.fork启动Net Server时候为何不会因为共同监听同一个端口而不报错。
cluster
- fork: 衍生出一个新的工作进程,这只能通过主进程调用。
Node.js 创建子进程的方法常用的有如下几种:
child_process
command
,并缓冲任何产生的输出,最大缓存 1024*1024 个字节。exec
,但默认情况下不会衍生 shell。 相反,指定的可执行文件file
会作为新进程直接地衍生,使其比exec
稍微更高效。和exec
一样,它也有最大 1024*1204 个字节的显示缓存。spawn
的一个特例,专门用于衍生新的 Node.js 进程。 与spawn
一样返回ChildProcess
对象。 返回的ChildProcess
将会内置一个额外的通信通道,允许消息在父进程和子进程之间来回传递。cluster
之前写了一篇收集 Node.js 应用的内存堆栈快照和 CPU 火焰图文章,其中的架构非常粗糙,但是初步算是满足了现在的监控需求。不过随着业务的增长,单台TCP Server可定无法满足高可用的需求,一旦出现问题那就没办法持续使用了,所以需要一个重新设计和改造。
在网络上查询libuv和EventLoop相关信息的时候,经常看到不同的文章所表达的意思差距较多,主要原因有二吧:
libuv
和V8
大版本不同,导致具体的实现略有差异与其受他人影响,不如自己来好好梳理下。
版本
1 | // libuv |
没有列出具体版本号的代码分析都是耍流氓,2010年的代码和2020年的代码可能差距甚远,“上古”分析固然在当时是对的,但是在今日也许是错误的。
Update your browser to view this website correctly. Update my browser now