[转帖]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做过一个 ...
随机推荐
- ubuntu安装mysql自动输入密码随笔记录
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password your_pass ...
- hbase 在线修复集群命令
前提:HDFS fsck确保hbase根目录下文件没有损坏丢失,如果有,则先进行corrupt block移除. 切记:一定要在所有Region都上线之后再修复,否则修复之后可能出现重复Region. ...
- Java设计模式之三建造者模式和原型模式
建造者模式 简介 建造者模式是属于创建型模式.建造者模式使用多个简单的对象一步一步构建成一个复杂的对象.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.简单的来说就是将一个复杂的东西 ...
- 第十一周助教工作总结——NWNU李泓毅
助教博客链接:https://www.cnblogs.com/NWNU-LHY/ 本次作业的要求:原型设计:https://www.cnblogs.com/nwnu-daizh/p/10761596. ...
- 值得H5前端学习的60个JS插件(含DEMO演示)
下面也可以说是H5前端学习的js插件大全.基本包含了大部分的前端最前沿的js插件和库. 布局 SuperEmbed.js- 是一个Javascript库,可检测出网页上的内嵌视频并使他们能够变成响应式 ...
- 第06组 团队Git现场编程实战
一.组员职责分工 队员姓名 主要分工 朱庆章 测评福州最受欢迎的商圈(参考人气) 陈梦雪 测评福州最受欢迎的商圈(参考人气) 关文涛 分别测评福州人均消费50以下,50-100.100-200.200 ...
- input type color
<input type="color"> https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input ...
- Linux-IIC驱动(详解)
IIC接口下的24C02 驱动分析: http://www.cnblogs.com/lifexy/p/7793686.html 接下来本节, 学习Linux下如何利用linux下I2C驱动体系结构来操 ...
- NonSerialized 属性忽略序列化报错'NonSerialized' is not valid on this declaration type
[XmlIgnore] [NonSerialized] public List<string> paramFiles { get; set; } //I get the following ...
- ISO/IEC 9899:2011 条款6.8——语句和语句块
6.8 语句和语句块 语法 1.statement: labeled-statement compound-statement expression-statement ...