Skip to content

Commit

Permalink
我好像独自站在那三尺红台,等你来为我喝一声倒彩
Browse files Browse the repository at this point in the history
  • Loading branch information
chuigda committed Jul 12, 2023
1 parent 6bc5402 commit 6b99346
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions markdown/asynkronous-and-koroutine.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ processData(data)

在上述代码中,当程序执行到 `readData` 时,如果远程计算机没有响应,那么程序就要停下来等待。对于一个**阻塞式**
API 来说,它会让线程挂起,将控制权交还给操作系统,让操作系统调度另一个可以执行的线程。 直到数据到来时,
操作系统将线程唤醒,程序才能继续执行。也就是说,这样的 API 在需要等待 IO 时,会**阻塞整个线程的执行**
操作系统将线程唤醒,程序才能继续执行。也就是说,这个 API 在等待 IO 时,会**阻塞整个线程的执行**

那么,如果这段代码属于某个服务程序:

Expand All @@ -40,14 +40,14 @@ while (true) {
}
```

那么,当一个客户端连接到这个服务程序时,如果这个客户端和服务器之间的网络连接很慢,或是客户端发送的数据很大,
当一个客户端连接到这个服务程序时,如果这个客户端和服务器之间的网络连接很慢,或是客户端发送的数据很大,
那么整个程序就会卡在 `readData` 上,而无法处理其他客户端的请求。

## 多线程和多进程

在这种情况下,如果一个程序想要尽可能利用计算机上的 CPU 资源,也就是希望在等待 IO 的时候尽量有活可做,
在这种情况下,如果一个程序想要尽可能利用计算机上的 CPU 资源,也就是希望**在等 IO 的时候尽量有活可做**
一种直观的做法就是启动多个线程或者多个进程。这样,当一个线程在等待 IO 的时候,其他线程还可以继续执行。
例如,在上面的服务程序中,我们可以为每个客户端连接启动一个线程
例如,在上面的服务程序中,我们可以为每个客户端连接启动一个线程:

```javascript
while (true) {
Expand Down

0 comments on commit 6b99346

Please sign in to comment.