Appearance
Epoll、IOCP 模型简单比较
1. 概述
Epoll 是 Linux 系统下的模型,IOCP 是 Windows 下模型。
- Epoll 是当事件资源满足时发出可处理通知消息;
- IOCP 则是当事件完成时发出完成通知消息;
从应用程序的角度来看,Epoll 是同步非阻塞的,IOCP 是异步操作。
2. 举例说明
举例说明,更加清晰透彻:有一个打印店,有一台打印机,好几个人在排队打印。
2.1. 阻塞模型
普通打印店,正常情况是:
- 你准备好你的文档,来到打印店;
- 排队,等别人打印完;
- 轮到你了,打印你的文档;
- 你取走文档,做后面的处理;
这种方式,你会浪费很多等待时间,非常低效。于是, Linux 和 Windows 都提出了自己最优的模型。
2.2. Epoll 模型
Linux 的 Epoll 模型,则可以描述如下:
- 你准备好你的文档,来到打印店;
- 告诉店小二说,我先排队在这位置,轮到我了通知一声(假定你来回路上不耗时);
- 你先去忙你的事情去了;
- 轮到你了,店小二通知你(假定你来回路上不耗时);
- 你获得打印机使用权了,开始打印;
- 打印完了拿走;
你会发现,你节省了排队的时间,等到你能获得打印机资源的时候,告诉你来处理。但是这里,就浪费了一点时间,就是你自己打印。这就是 Epoll 的同步非阻塞。
2.3. IOCP 模型
Windows 的 IOCP 模型,则可以描述如下:
- 你准备好你的文档,来到打印店;
- 告诉店小二说,我先排队,轮到我了帮打印下,好了通知我(也假定你来回路上不耗时);
- 你先去忙你的事情去了;
- 轮到你的文档了,店小二直接帮你打印好了,通知你;
- 你来了,直接取走文档;
你会发现,你不但节省了排队时间,你连打印时间都节省了, 完全异步操作。