Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update dont-block-the-event-loop.md #1911

Merged
merged 1 commit into from
Nov 22, 2018
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions locale/zh-cn/docs/guides/dont-block-the-event-loop.md
Original file line number Diff line number Diff line change
Expand Up @@ -418,12 +418,12 @@ Node 由 `k` 个工作线程组成了工作线程池。

### 任务拆分
具有可变时间成本的任务可能会损害工作池的吞吐量。
为了尽量减少任务时间的丛台变化,应尽可能将每个任务 *划分* 为开销接近一致的子任务。
为了尽量减少任务时间的变化,应尽可能将每个任务 *划分* 为开销接近一致的子任务。
当每个子任务完成时,它应该提交下一个子任务;并且当最终的子任务完成时,它应该通知提交者。

继续使用 `fs.readFile()` 的示例,更好的方案是使用 `fs.read()`(手动拆分)或 `ReadStream`(自动拆分)。

同样的原理也适用于 CPU 密集型任务; `asyncAvg` 示例可能不适用于事件循环,但它非常适合于工作行哦啊线程池
同样的原理也适用于 CPU 密集型任务; `asyncAvg` 示例可能不适用于事件循环,但它非常适用于工作线程池

将任务拆分为子任务时,较短的任务将拆分为少量的子任务,而更长的任务将拆分为更多的子任务。
在较长任务的每个子任务之间,分配给它的工作线程可以调度执行另一个更短的任务拆分出来的子任务,从而提高工作池的总体任务吞吐量。
Expand Down Expand Up @@ -468,7 +468,7 @@ Node 由 `k` 个工作线程组成了工作线程池。
## 总结
Node 有两种类型的线程:一个事件循环线程和 `k` 个工作线程。
事件循环负责 JavaScript 回调和非阻塞 I/O,工作线程执行与 C++ 代码对应的、完成异步请求的任务,包括阻塞 I/O 和 CPU 密集型工作。
着两种类型的线程一次都只能处理一个活动
这两种类型的线程一次都只能处理一个活动
如果任意一个回调或任务需要很长时间,则运行它的线程将被 *阻塞*。
如果你的应用程序发起阻塞的回调或任务,在好的情况下这可能只会导致吞吐量下降(客户端/秒),而在最坏情况下可能会导致完全拒绝服务。

Expand Down