[转帖]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做过一个 ...
随机推荐
- 项目管理、bug管理工具 ---禅道使用流程
使用前描述: 禅道是付费的一款云平台工具,它可以实现项目管理.需求管理.bug提交.bug跟踪.文档管理.bug统计等功能 使用账号.密码:公司提供,登录后基本识别操作流程如下: 1.登录首页-我的地 ...
- cnetos7--zabbix(3.4)-server安装
1.安装前准备 (1)关闭防火墙 [root@localhost ~]#Systemctl stop firewalld.service (2)开机关闭防火墙 [root@localhost ~]#S ...
- ICEM-hollow
原视频下载地址: http://yunpan.cn/cumt7U7ufYfA3 访问密码 a46d
- 安卓开发实战之app之版本更新升级(DownloadManager和http下载)完整实现
转载: https://blog.csdn.net/u013278099/article/details/52692008 前言 本文将讲解app的升级与更新.一般而言用户使用App的时候升级提醒有两 ...
- Java多线程相关的API方法以及作用摘要
wait() 会让当前运行线程 阻塞,并释放对应的对象锁, 一般由当前线程持有的对象锁调用 x.wait(): 当前线程必须拥有此对象的monitor(即锁),才能调用此对象的wait()方法能让当前 ...
- js的prototype理解
转载:https://www.cnblogs.com/douyage/p/8630529.html 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实 ...
- 关于如何取消访问https时的提示:“此网站的安全证书存在问题”的解决方法
问题描述: 症状1:采用IE浏览器通过https/http协议访问网站时,总是提示:“此网站的安全证书存在问题.” 症状2:采用搜狗浏览器打开网页总是看到网页的图片等元素显示不完整,是一个X的小图片. ...
- web文件上传,带进度条
原生ajax上传带进度条 (百分比) <%@ page language="java" contentType="text/html; charset=UTF-8& ...
- keepalived非争抢机制不生效【原创】
故障现象:俩台服务器设置了keepalived非争抢机制,但是发现优先级高的服务器还是会优先获取vip 利用tcpdump抓包发现只有其中一台服务器,没有另一台 tcpdump -i eth0 vrr ...
- C语言中size_t类型详细说明【转载】
来看看网上的一些说法: C语言 size_t到底是个什么东东? 大神求解 . 简单理解为 unsigned int就可以了 . 这是在不同的机器里面的的头文件定义的相应宏定义,实际上是unsigned ...