完成了第 17 章 优于 select 的 epoll

This commit is contained in:
riba2534
2019-02-01 19:04:21 +08:00
parent 5a47b86471
commit c9d1253ae1
2 changed files with 425 additions and 2 deletions

View File

@@ -4489,6 +4489,8 @@ gcc echo_EDGEserv.c -o serv
从上面的例子看出接收到客户端的消息时只输出一次「return epoll_wait」字符串这证明仅注册了一次事件。
**select 模型是以条件触发的方式工作的**。
#### 17.2.3 边缘触发的服务器端必知的两点
- 通过 errno 变量验证错误原因
@@ -4581,13 +4583,37 @@ gcc echo_EPETserv.c -o serv
### 17.3 习题
> 以下答案仅代表本人个人观点,可能不是正确答案。
1. 利用 select 函数实现服务器端时,代码层面存在的两个缺点是?
答:①调用 select 函数后常见的针对所有文件描述符的循环语句②每次调用 select 函数时都要传递监视对象信息。
2. 无论是 select 方式还是 epoll 方式,都需要将监视对象文件描述符信息通过函数调用传递给操作系统。请解释传递该信息的原因。
答:文件描述符是由操作系统管理的,所以必须要借助操作系统才能完成。
3. select 方式和 epoll 方式的最大差异在于监视对象文件描述符传递给操作系统的方式。请说明具体差异,并解释为何存在这种差异。
select 函数每次调用都要传递所有的监视对象信息,而 epoll 函数仅向操作系统传递 1 次监视对象监视范围或内容发生变化时只通知发生变化的事项。select 采用这种方法是为了保持兼容性。
4. 虽然 epoll 是 select 的改进反感,但 select 也有自己的优点。在何种情况下使用 select 更加合理。
答:①服务器端接入者少②程序应具有兼容性。
5. epoll 是以条件触发和边缘触发方式工作。二者有何差别?从输入缓冲的角度说明这两种方式通知事件的时间点差异。
答:在条件触发中,只要输入缓冲有数据,就会一直通知该事件。边缘触发中输入缓冲收到数据时仅注册 1 次该事件,即使输入缓冲中还留有数据,也不会再进行注册。
6. 采用边缘触发时可以分离数据的接收和处理时间点。请说明其优点和原因。
7.
答:分离接收数据和处理数据的时间点,给服务端的实现带来很大灵活性。
## 第 18 章 多线程服务器端的实现
本章代码,在[TCP-IP-NetworkNote](https://github.com/riba2534/TCP-IP-NetworkNote)中可以找到。
### 18.1 理解线程的概念