[转帖]Epoll和IOCP的比较
Epoll和IOCP的比较
https://yq.aliyun.com/articles/53621/
kryptosx 2016-05-27 23:32:51 浏览6181
原来整理过一个《六种Socket I/O模型幽默讲解》,里面是windows的六种socket I/O模型,大学时的windows网络编程就是讲的这几个。今天听了一个网络技术讲座,突然想起了这两个模型还是没搞清楚。
但是,貌似服务器中用的最多的还是linux,相对于windwos最尖端的IOCP而言,linux祭出的则是它的Epoll。
Epoll 和 IOCP 都是为高性能网络服务器而设计的高效 I/O 模型;都是基于事件驱动的。事件驱动有个著名的好莱坞原则(“不要打电话给我们,我们会打电话给你”)。
不同之处:
- Epoll 用于 Linux 系统;而 IOCP 则是用于 Windows;
- Epoll 是当事件资源满足时发出可处理通知消息;而 IOCP 则是当事件完成时发出完成通知消息。
- 从应用程序的角度来看, Epoll 本质上来讲是同步非阻塞的,而 IOCP 本质上来讲则是异步操作;这是才二者最大的不同。
这么说来,其实Epoll有点像上面说的第四种Socket I/O模型。不过,Epoll只告诉你几个句柄收到消息和收到消息的句柄队列,然后你自己去扫描。
一个例子
有个文档需要拿到打印室打印,这时候看到前面还有好几个同事在排队。
我们分解一下操作:
一:你有一个打印的需求,来到打印店。
二:你需要排队等别人打印完。
三:轮到你打印了,直到你的文档打印完。
四:你取走文档,做后面的处理。
阻塞模型:
你只能傻呆呆的站着,直到轮到你打印。
这种模型,就类似一个流水线,你的一,二,三,四步是一步一步走的。所需时间就是他们的和。
同步非阻塞:
你告诉打印店的人,可以轮到你打印了,就通知你。
于是,你在第一步的时候,给打印店留了个电话号码,就做自己的事情去了。直到别人打印完了,打印店会通知你,然后第三步第四步。
异步非阻塞:
这比上一个更轻松,同样是留了个电话号码,但是打印店的人会把你的打印完了再通知你。你只要回来拿就可以了。
用一句话来说就是”同步非阻塞是半托管,异步非阻塞是全托管“
几个疑问
从技术上来看,IOCP比Epoll更为智能,全包了。但为什么Epoll的效率高于IOCP?
个人看法,IOCP确实看上去更智能,啥事都干完了,但同异步情况来看,并不见得就比Epoll要好。无非就是收包这步系统做了。
但是扫描epoll返回的fd,并非就比IOCP回调要快。其次,linux内核的协议栈实现要优于windows,因为linux本身就是服务器的架构。
为什么Linux不用IOCP模型?
某人的经典回答:这和为什么linux桌面一直做不好差不多一个道理。
总结:
其实说到底,优化的手段都是让程序能够并行,以让服务器的性能能发挥到机智。
线程池也发挥了很大的作用,正是它,让大量的链接成为可能。常见的场景总是链接很多,但是活跃的链接很少,异步I/O技术使得在活跃连接数不变的情况下,链接数量的增加不会对系统产生影响。
说到底,Epoll也是过去的产物。在现在,大量的连接已经不是难题,下一代网络的挑战是如何更高效的服务。
转载请注明:旅途@KryptosX » Epoll和IOCP的比较
[转帖]Epoll和IOCP的比较的更多相关文章
- [转帖]EPOLL和IOCP比较
		EPOLL和IOCP比较 https://blog.csdn.net/educast/article/details/15503179 IOCP 异步非阻塞EPOLL 异步阻塞 EPOLL是半成品 ... 
- 【C# 线程】线程池 epoll和IOCP之比较
		总结:IOCP :我的打印文件放在店里面排队,轮到我打印了,店长帮我打印一下,打印好了通知我来拿 Epoll :我的打印文件放在店里面排队,轮到我叫我一下,我自己来打印. 直入正题:Epoll 是L ... 
- 再谈select, iocp, epoll,kqueue及各种I/O复用机制
		原文:http://blog.csdn.net/shallwake/article/details/5265287 首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonbl ... 
- [转]谈谈select, iocp, epoll,kqueue及各种网络I/O复用机制
		参考原文:再谈select, iocp, epoll,kqueue及各种I/O复用机制 一.I/O模型概述 介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking ... 
- select, iocp, epoll,kqueue及各种I/O复用机制
		http://blog.csdn.net/heyan1853/article/details/6457362 首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblock ... 
- 【网络】再谈select, iocp, epoll,kqueue及各种I/O复用机制  &&  Reactor与Proactor的概念
		首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal drive ... 
- 转: 再谈select, iocp, epoll,kqueue及各种I/O复用机制
		首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal drive ... 
- epoll, NIO,AIO
		Java 网络IO编程总结(BIO.NIO.AIO均含完整实例代码) Java中BIO,NIO和AIO使用样例 https://blog.insanecoder.top/javazhong-bio-n ... 
- 源码剖析Linux epoll实现机制及Linux上惊群
		转载:https://blog.csdn.net/tgxallen/article/details/78086360 看源码是对一个技术认识最直接且最有效的方式了,之前用Linux Epoll做过一个 ... 
随机推荐
- Dns的作用
			DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串 DNS系统:通过 ... 
- Android中活动的最佳实践(如何很快的看懂别人的代码activity)
			这种方法主要在你拿到别人的代码时候很多activity一时半会儿看不懂,用了这个方法以后就可以边实践操作就能够知道具体哪个activity是干什么用的 1.新建一个BaseActivity的类,让他继 ... 
- Linux远程传输文件免密码
			首先为什么Linux远程传输要免密码?手动使用scp命令传输每次都要输密码太过麻烦了. 开发中有一句话,能复制粘贴尽量不要手打. 运维中有一句话,能脚本化实现尽量不要手动执行. 远程传输文件免密码的目 ... 
- Oracle语法 及 SQL题目(二)
			目录 课例复制 思考题四 解题思路 思考题五 解题思路 课例复制 思考题四 最近,经过你的努力,你得到了一份工作,成为了百货公司的一位经理. 到位后,你发现你的销售数据库中有两张表,一个是商店促销时间 ... 
- 解决 screen 连接不上,提示“There is no screen to be resumed matching 18352.” 的问题
			当你挂起screen,下次想重新连上screen时,有时会出现screen session的状态为Attached但是却连不上的情况,比如我想重新进入session id 为18352的screen, ... 
- centos7使用MariaDB(转)
			转载文章:https://blog.csdn.net/zwkkkk1/article/details/78444581?locationNum=10&fps=1 最近使用centos7,php ... 
- MiniUI官方表单验证示例
			原文地址:http://www.miniui.com/docs/tutorial/validator.html 表单验证 参考示例: 验证规则 表单验证 表单验证:文本提示 表 ... 
- Dart静态方法、对象操作符和类的继承
			/* Dart中的静态成员: 1.使用static 关键字来实现类级别的变量和函数 2.静态方法不能访问非静态成员,非静态方法可以访问静态成员 */ // class Person { // stat ... 
- Web Service 和 WCF的比较
			Web Service 和WCF的比较 Web Service 的工作原理 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intra ... 
- osg编译日志-release
			1>------ 已启动生成: 项目: ZERO_CHECK, 配置: Release x64 ------1> Checking Build System1> CMake does ... 
