博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
epoll和iocp的异同之处
阅读量:4106 次
发布时间:2019-05-25

本文共 659 字,大约阅读时间需要 2 分钟。

昨天面试题,谈谈linux下的epoll模式和windows下的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的使用更加灵活。

转载地址:http://xrjsi.baihongyu.com/

你可能感兴趣的文章
Win10上搭建Nginx+SimpleSAMLphp认证服务
查看>>
Win10下搭建绿色版基于WAMP的PHP开发环境
查看>>
如何优雅地使用 Sublime Text
查看>>
理解 HTTPS 的工作原理
查看>>
解决命令启动Android模拟器出现lib64OpenglRender.so: cannot open shared object file问题
查看>>
全站 HTTPS 来了
查看>>
Win8.1/10中删除文件的默认关联程序
查看>>
修改Android系统默认关闭“验证应用”功能
查看>>
Win10下使用PHP7+XDebug+Sublime Text 3搭建PHP集成开发环境
查看>>
即使被拖库,也可以保证密码不泄露
查看>>
Android网络时间同步
查看>>
最简明扼要的 Systemd 教程,只需十分钟
查看>>
Gradle的神奇之处
查看>>
受用不尽的Gradle使用方法与技巧
查看>>
Android系统移植与调试之------->如何修改Android的默认语言、默认时区
查看>>
Grub 2:拯救你的 bootloader
查看>>
Android开发中常用ADB命令总结
查看>>
grep 命令系列:如何在 Linux/UNIX 中使用 grep 命令
查看>>
Android抓取各种log的方法
查看>>
在项目中记住Github用户名和密码的方法
查看>>