epoll与iocp的异同

目前国内的网游研发,在服务器使用的开发平台方面, win linux 的比例各占多少,我一时半会也没有准确数据,但从我了解的这么多公司情况来看,用 win 系统的还是比较多一点,这些企业一般都是比较单纯的网游公司,而用 linux 的则多数是一些传统的互联网公司,比如网易和腾讯。

网游服务器用 win 还是 linux ,向来都是大家关注的话题。我想,原因可能很多,但此处不想过多论述这个问题,为避免多费口舌,我还是明确表明一下自己的观点:我是推荐用 linux 作开发的,虽然我也是刚转来作 linux 平台下的开发。

那么,说具体一点。但凡作过比较深入的网络编程的人,都会知道,在 win 平台下,高效的 IO 模型是 IOCP ,而在 linux 底下则是 epoll 。那么, epoll iocp 之间到底有哪些异同之处呢?

首先,我们看一下它们相同的地方。

两者都是处理异步 IO 的高效模型,这种高效,除了“异步处理”这个共同的特征之外,二者都可以通过指针携带应用层数据:在 IOCP 里,应用层数据可以通过单句柄数据和单 IO 数据来与 IOCP 底层通信;而在 epoll 里,可以通过 epoll_data 里的 'void *ptr' 来传递。这是一种很重要的思想,也是它们高效的原因所在:当事件的通知到来时,它不仅告诉你发生了什么样的事件,还同时告诉这次事件所操作的数据是哪些。

那么, epoll iocp 到底又有什么不同呢?

以我目前粗浅的使用经验来看,至少可以得到以下结论:

1.iocp
是在 IO 操作完成之后,才通过 get 函数返回这个完成通知的;而 epoll 则不是在 IO 操作完成之后才通知你,它的工作原理是,你如果想进行 IO 操作时,先向 epoll 查询是否可读或可写,如果处于可读或可写状态后, epoll 会通过 epoll_wait 函数通知你,此时你再进行进一步的 recv send 操作。

2.
1 的基础上,我们其实可以看到, epoll 仅仅是一个异步事件的通知机制,其本身并不作任何的 IO 读写操作,它只负责告诉你是不是可以读或可以写了,而具体的读写操作,还要应用层自己来作;但 iocp 的封装就要多一些,它不仅会有完成之后的事件通知,更重要的是,它同时封装了一部分的 IO 控制逻辑。从这一点上来看, iocp 的封装似乎更全面一点,但是,换个角度看, epoll 仅提供这种机制也是非常好的,它保持了事件通知与 IO 操作之间彼此的独立性,使得 epoll 的使用更加灵活。

这只是我初步使用 epoll 开发过程中的体会,以后有更深的体会时还会发上来跟大家分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值