node

127 阅读2分钟

16.cluster 模块为什么可以让多个子进程监听同一个端口呢

开启多进程时候端口疑问讲解:如果多个 Node 进程监听同一个端口时会出现 Error:listen EADDRIUNS 的错误,而 cluster 模块为什么可以让多个子进程监听同一个端口呢?原因是 master 进程内部启动了一个 TCP 服务器,而真正监听端口的只有这个服务器,当来自前端的请求触发服务器的 connection 事件后,master 会将对应的 socket 句柄发送给子进程。而 child_process 操作子进程时,创建多个 TCP 服务器, 无论是 child_process 模块还是 cluster 模块,为了解决 Node.js 实例单线程运行,无法利用多核 CPU 的问题而出现的。核心就是通过 fork()或者其他 API,创建了子进程之后,父进程(即 master 进程)负责监听端口,接收到新的请求后将其分发给下面的 worker 进程,父子进程之间才能通过 message 和 send()进行 IPC 通信(Inter-Process Communication)。

Node 中实现 IPC 通道是依赖于 libuv,

17.说说 Nodejs 异步 IO 模型

18.孤儿进程 / 僵尸进程

孤儿进程

父进程已经退出,它的一个或者多个子进程还在运行,上述的子进程会成为孤儿进程孤儿进程会被 init 进程(pid 为 1)收养,并由 init 进程完成对它们的状态收集工作,init 进程会循环 wait 回收资源,孤儿进程无害

僵尸进程

主进程通过 fork 创建了子进程,如果子进程退出之后父进程没有调用 wait/waitpid 获取子进程的状态信息,那么子进程中保存的进程号/退出状态/运行时间等都不会被释放,进程号会一直被占用