Epoll vs. IOCP

1 Epoll vs. IOCP

Epoll 和 IOCP 都是为高性能网络服务器而设计的高效 I/O 模型;都是基于事件驱动的。事件驱动有个著名的好莱坞原则(“不要打电话给我们,我们会打电话给你”)。

 

不同之处在于:

1. Epoll 用于 Linux 系统;而 IOCP 则是用于 Windows ;(啊,好大的鸡蛋 … )

 

2. Epoll 是当事件资源满足时发出可处理通知消息;而 IOCP 则是当事件完成时发出完成通知消息。

 

3. 从应用程序的角度来看, Epoll 本质上来讲是同步非阻塞的,而 IOCP 本质上来讲则是异步操作;这是才二者最大的不同。

 

就第 3 点来讲,还需要简单说说系统的 IO 模型。

 

2 系统的 IO 模型

系统 IO 可以分成三种模型:阻塞 (blocking) ,同步非阻塞 (non-blocking synchronous) 和异步非阻塞 (non-blocking asynchronous) 。

先举个打印室的例子:

你有个文档需要拿到打印室打印,这时候正巧你的一个同事正在打印一本 800 页的书;

看看这三种模型下你和打印室的反应。

 

1. 阻塞模型

调用者必须阻塞等待操作的完成,如果资源不可用,只能阻塞等待。可见这是一种相当低效的模型。

对应于打印室的例子:你把文档给打印室,打印室不会告诉你,现在前面有个兄弟 800 页呢,你的等半天了。你只能等在那里,直到打印室打完文档后给你;在打那 800 页时你也只能白等着。

 

2. 同步非阻塞

本质上依然是同步的,但是当资源不可用时,调用将会立即返回,并得到通知指示资源部可用;否则可以立即完成。

 

对应于打印室的例子:你把文档给打印室,打印室马上就会告诉你,忙着呢,现在前面有个兄弟 800 页呢。得到打印室的通知后,随你怎么处理了;如果你去的时候打印机正好空闲,打印室就会立即开始打印,把打印好的文档给你。

 

3. 异步非阻塞

异步肯定不会阻塞啦(有谁听过异步阻塞啊?),异步就是你告诉操作系统说,我要给你什么事情,好了,如果操作立即完成,系统会立即返回给你操作结果;否则就告诉你说执行中,完成了再通知你,你接着干自己的事情去吧,不用等在这里。

当然这个时候系统必须提供一种机制,以期能在完成时让应用程序得到通知。

 

对应于打印室的例子:你把文档给打印室,如果这时候打印机正好空闲,打印室就会立即开始打印,把打印好的文档给你;否则打印室会对你说,兄弟你忙去吧,文档打印好了马上通知你。

 

从理论上来讲异步肯定是最优的方案了,你把处理扔给操作系统就行了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EpollIOCP(I/O Completion Ports)都是用于提高现代操作系统中高并发网络编程性能的异步I/O模型。它们的主要目标是减少CPU阻塞,提高系统效率。 **Epoll(Linux下的事件驱动模型)**: - Epoll是Linux内核提供的原生事件通知机制,它允许一个进程注册文件描述符,当这些描述符上有数据可读或写就绪时,Epoll会唤醒进程。 - 它使用单个内核结构来维护多个fd的状态,减少了内存开销。 - 主要优点是简单易用,适合于Linux环境,性能较好,特别是在大量并发连接下。 **IOCP(Windows下的I/O完成端口)**: - IOCP是Windows NT内核提供的,类似于Epoll,用于处理多个网络连接的异步I/O请求。 - 它使用一组称为“完成端口”的结构,每个完成端口可以关联多个工作线程,当I/O操作完成时,会将数据发送回特定的端口。 - IOCP支持更复杂的异步操作,如接收缓冲区预读等高级功能。 - 与Epoll相比,IOCP在Windows性能通常更好,特别是对于非阻塞I/O和大数量的连接。 **比较**: 1. **平台依赖**:Epoll仅在Linux和某些Unix-like系统可用,而IOCP是Windows特有的。 2. **资源管理**:Epoll通常比IOCP更轻量级,因为它没有像完成端口那样的内核结构。 3. **并发性能**:两者都能提供良好的并发性能,但在某些场景下IOCP可能表现更优,尤其是在Windows平台且连接数较多的情况下。 4. **API复杂性**:IOCP可能需要更多的学习和调试,但提供了更丰富的功能。 相关问题: 1. Windows环境下,为何IOCP性能优于Epoll? 2. Epoll能否在Windows系统上运行? 3. IOCP和Epoll都支持哪些类型的I/O事件?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值