diff --git a/markdown/asynkronous-and-koroutine.md b/markdown/asynkronous-and-koroutine.md index ec1123f..f2f1787 100644 --- a/markdown/asynkronous-and-koroutine.md +++ b/markdown/asynkronous-and-koroutine.md @@ -27,7 +27,7 @@ processData(data) 在上述代码中,当程序执行到 `readData` 时,如果远程计算机没有响应,那么程序就要停下来等待。对于一个**阻塞式**的 API 来说,它会让线程挂起,将控制权交还给操作系统,让操作系统调度另一个可以执行的线程。 直到数据到来时, -操作系统将线程唤醒,程序才能继续执行。也就是说,这样的 API 在需要等待 IO 时,会**阻塞整个线程的执行**。 +操作系统将线程唤醒,程序才能继续执行。也就是说,这个 API 在等待 IO 时,会**阻塞整个线程的执行**。 那么,如果这段代码属于某个服务程序: @@ -40,14 +40,14 @@ while (true) { } ``` -那么,当一个客户端连接到这个服务程序时,如果这个客户端和服务器之间的网络连接很慢,或是客户端发送的数据很大, +当一个客户端连接到这个服务程序时,如果这个客户端和服务器之间的网络连接很慢,或是客户端发送的数据很大, 那么整个程序就会卡在 `readData` 上,而无法处理其他客户端的请求。 ## 多线程和多进程 -在这种情况下,如果一个程序想要尽可能利用计算机上的 CPU 资源,也就是希望在等待 IO 的时候尽量有活可做, +在这种情况下,如果一个程序想要尽可能利用计算机上的 CPU 资源,也就是希望**在等 IO 的时候尽量有活可做**, 一种直观的做法就是启动多个线程或者多个进程。这样,当一个线程在等待 IO 的时候,其他线程还可以继续执行。 -例如,在上面的服务程序中,我们可以为每个客户端连接启动一个线程: +例如,在上面的服务程序中,我们可以为每个客户端连接启动一个线程: ```javascript while (true) {