From 74a0e285b592584c583d10f8a03ed82445f1c00f Mon Sep 17 00:00:00 2001 From: Mars Wong Date: Sun, 5 Mar 2017 22:13:30 +0800 Subject: [PATCH 1/2] Update process.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 勘误及改进建议 --- sections/process.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sections/process.md b/sections/process.md index 761a9d8..540e9cc 100644 --- a/sections/process.md +++ b/sections/process.md @@ -128,7 +128,7 @@ Node.js 的 `child_process.fork()` 不像 POSIX [fork(2)](http://man7.org/linux/ > 父进程或子进程的死亡是否会影响对方? 什么是孤儿进程? -子进程死亡不会影响父进程, 不过 node 中父进程会收到子进程死亡的信号. 反之父进程死亡, 一般情况下子进程也会跟着死亡, 如果子进程需要死亡却没有随之终止而继续存在的状态, 被称作孤儿进程. 另外, 子进程死亡之后资源没有回收的情况被称作僵死进程. +子进程死亡不会影响父进程, 不过子进程死亡时(线程组的最后一个线程,通常是“领头”线程死亡时),会向它的父进程发送死亡信号. 反之父进程死亡, 一般情况下子进程也会随之死亡, 但如果此时子进程处于可运行态、僵死状态等等的话, 子进程将被`进程1`(init 进程)收养,从而成为孤儿进程. 另外, 子进程死亡的时候(处于“终止状态”),父进程没有及时调用 `wait()` 或 `waitpid()` 来返回死亡进程的相关信息,此时子进程还有一个 `PCB` 残留在进程表中,被称作僵尸进程. ## Cluster From f102605c3f9df406a480f91926882aa23f323e1e Mon Sep 17 00:00:00 2001 From: Mars Wong Date: Sun, 5 Mar 2017 22:37:34 +0800 Subject: [PATCH 2/2] Update process.md --- sections/process.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sections/process.md b/sections/process.md index 540e9cc..062f446 100644 --- a/sections/process.md +++ b/sections/process.md @@ -169,11 +169,11 @@ worker 进程是由 child_process.fork() 方法创建的, 所以可以通过 IPC cluster 模块提供了两种分发连接的方式. -第一种方式 (默认方式, 不适用于 windows), 通过轮询(round-robin)的方式分发连接. 主进程监听端口, 接收到新连接之后, 通过内建的算法来决定将 accept 到的客户端 socket fd 传递给指定的 worker 处理. 使用该方式时, 每个连接由哪个 worker 来处理, 完全由 master 的 round-robin 算法决定. +第一种方式 (默认方式, 不适用于 windows), 通过时间片轮转法(round-robin)分发连接. 主进程监听端口, 接收到新连接之后, 通过时间片轮转法来决定将接收到的客户端的 socket 句柄传递给指定的 worker 处理. 至于每个连接由哪个 worker 来处理, 完全由内置的循环算法决定. -第二种方式是由主进程创建 socket 监听端口后, 将 socket 的句柄直接分发给相应的 workder, 然后当连接进来时, 就直接由相应的 worker 来 accept 连接并处理. +第二种方式是由主进程创建 socket 监听端口后, 将 socket 句柄直接分发给相应的 worker, 然后当连接进来时, 就直接由相应的 worker 来接收连接并处理. -使用第二种方式时, 多个 worker 之间会存在竞争关系, 产生一个老生常谈的 "[惊群效应](https://www.google.com.hk/search?q=%E6%83%8A%E7%BE%A4%E6%95%88%E5%BA%94)" 从而导致效率变低的问题. 该问题常见于 Apache. 并且各自竞争的情况下无法控制一个新的连接由哪个进程来处理, 从而导致各 worker 进程之间的负载不均衡, 比如 70% 的连接被8个进程中的2个处理, 而其他进程比较清闲. +使用第二种方式时, 多个 worker 之间会存在竞争关系, 产生一个老生常谈的 "[惊群效应](https://www.google.com.hk/search?q=%E6%83%8A%E7%BE%A4%E6%95%88%E5%BA%94)" 从而导致效率变低的问题. 该问题常见于 Apache. 并且各自竞争的情况下无法控制一个新的连接由哪个进程来处理, 从而导致各 worker 进程之间的负载不均衡, 比如通常 70% 的连接仅被 8 个进程中的 2 个处理, 而其他进程比较清闲. ## 进程间通信