Skip to content

Commit 7ef1b8b

Browse files
authored
Merge pull request #2 from ryomahan/patch-1
Update ch04.md
2 parents af364ca + 8d8c672 commit 7ef1b8b

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

book/ch04.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
线程是操作系统的一个调度单元,线程包含在进程之中。一个进程最少有一个线程,叫主线程,也就是运行中的进程。一个进程中可以有多个线程,线程之间共享进程的全部系统资源,比如程序数据、文件描述符等等。线程可以挂起、中断、结束,也就是操作系统可以通过这些状态来对进程中的多个线程进行调度,比如某个线程有 IO 等待时就可以暂时被挂起,让出 CPU 让其他线程执行。
1010

11-
正式基于线程有这样的特点,多线程的 Web Server 共享数据比多进程的更容易实现,而且效率更高。
11+
正是基于线程有这样的特点,多线程的 Web Server 共享数据比多进程的更容易实现,而且效率更高。
1212

1313
```python
1414

@@ -119,4 +119,4 @@ def main():
119119

120120
在多线程 Web Server 中,某个工作线程处理的 socket 由于某种原因消息没有送达,暂且叫它 B 线程,调用 recv 时发生阻塞,由于线程的调度是操作系统控制的,此时 B 线程由于不再占用 CPU 而被操作系统挂起,让出 CPU 的控制权给其它工作线程使用,某一刻 B 线程等待的 socket 数据到达了可以读取了,**但是 B 线程何时才能获得 CPU 的使用权从而读取数据?答案是不知道**。因为线程的调度完全是随机的,任由操作系统根据每个线程占用时间片和线程当前的状态进行调度,也就是 B 线程完成数据的读取的时机是不确定的。在真实的 Web Server 工作环境中,类似 B 线程的这种线程是大量存在的。那么我们该如何准确的准确无误的唤醒等待中的线程告诉它等待的 socket 可写可读了,让它们赶紧干活呢?
121121

122-
答案就是 IO 多路复用技术 -- IO multiplex。
122+
答案就是 IO 多路复用技术 -- IO multiplex。

0 commit comments

Comments
 (0)