EPOLL和IOCP比较

https://blog.csdn.net/educast/article/details/15503179

IOCP 异步非阻塞EPOLL 异步阻塞
 
EPOLL是半成品,IOCP是成品,底层机制一样,协议栈的状态检查不需要用户去查询,由作业系统来通知。
其实这是任何守护性逻辑高性能的基础机制。

但是EPOLL只是告诉你现在可以读和写,即协议栈的读写缓冲被初始化或重设(对于写,上次数据已经提交并写缓冲重设为空,对于读,栈议栈读缓冲已经开始接受数据。)
但是写和读的过程还是由用户来控制,系统只是告诉你已经为你准备好了和网络驱动对接好的读写的通道。如果某个通道的读写很慢,我们其实自己可以控制,比如要读8K字节,但经过x秒只读到几个字节,这说明这个通道很差,我们可以将这个IO通道从EPOLL中分离出来把它投递到一个阻塞的socket中,而不影响整个EPOLL的性能。所以EPOLL虽然是半成品,但用户有更高的控制权。

而对于IOCP,从名称就可以知道,系统不仅控制IO通道的状态,而且把读写操作都做完了才通知用户。对于读,系统已经把数据读好放在buffer中,其实相当于是RBF,对于写,已经是写出了n长度的字节,所以即使某个IO通道上的传输很慢,你也无法控制,因为当你收到通知时,系统已经是读好数据或写出数据。所以IOCP在用户的控制上没有灵活的空间。

但是由系统来做毕竟比普通的二流以下的程序员自己来控制性能普遍来说要更好一些。

在高性能服务器的开发中,采用一个非阻塞的IO模型配两三个阻塞的socket混合处理,是最合理的,因为在大量连接中总会有一些客户端传输很慢,对于非常慢的连接,EPOLL,IOCP还不如阻塞模型处理性能更好,即时读写速度是一样的,但阻塞模型简单,上下文切换和内存分配的开销比较少。所以把一些很慢的连接重新投递到阻塞的socket上而让EPOLL能有更多的机会去处理传输非常快的连接才是非阻塞的优势。相比来说,IOCP就不能这样做。

[转帖]EPOLL和IOCP比较的更多相关文章

  1. [转帖]Epoll和IOCP的比较

    Epoll和IOCP的比较 https://yq.aliyun.com/articles/53621/   kryptosx 2016-05-27 23:32:51 浏览6181   原来整理过一个& ...

  2. 【C# 线程】线程池 epoll和IOCP之比较

    总结:IOCP :我的打印文件放在店里面排队,轮到我打印了,店长帮我打印一下,打印好了通知我来拿 Epoll  :我的打印文件放在店里面排队,轮到我叫我一下,我自己来打印. 直入正题:Epoll 是L ...

  3. 再谈select, iocp, epoll,kqueue及各种I/O复用机制

    原文:http://blog.csdn.net/shallwake/article/details/5265287 首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonbl ...

  4. [转]谈谈select, iocp, epoll,kqueue及各种网络I/O复用机制

    参考原文:再谈select, iocp, epoll,kqueue及各种I/O复用机制 一.I/O模型概述 介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking ...

  5. select, iocp, epoll,kqueue及各种I/O复用机制

    http://blog.csdn.net/heyan1853/article/details/6457362 首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblock ...

  6. 【网络】再谈select, iocp, epoll,kqueue及各种I/O复用机制 && Reactor与Proactor的概念

    首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal drive ...

  7. 转: 再谈select, iocp, epoll,kqueue及各种I/O复用机制

    首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblocking I/O I/O multiplexing (select and poll) signal drive ...

  8. epoll, NIO,AIO

    Java 网络IO编程总结(BIO.NIO.AIO均含完整实例代码) Java中BIO,NIO和AIO使用样例 https://blog.insanecoder.top/javazhong-bio-n ...

  9. 源码剖析Linux epoll实现机制及Linux上惊群

    转载:https://blog.csdn.net/tgxallen/article/details/78086360 看源码是对一个技术认识最直接且最有效的方式了,之前用Linux Epoll做过一个 ...

随机推荐

  1. cs 与 bs 架构

    C/S和B/S各有优势,C/S在图形的表现能力上以及运行的速度上肯定是强于B/S模式的,不过缺点就是他需要运行专门的客户端,而且更重要的是它不能跨平台,用c++在windows下写的程序肯定是不能在l ...

  2. const经典面试题

    1> const int age1 = 21; age1 = 100; // 编译报错 2> int const age2 = 22; 3> const int *age3 = 23 ...

  3. Gremlin入门

    Gremlin入门 一.Gremlin简介 Gremlin是Apache ThinkerPop框架下的图遍历语言,Gremlin是一种函数式数据流语言,可以使用户使用简洁的方式表述复杂的属性图的遍历或 ...

  4. mapreduce入门程序之---wordcount

    mapreduce是hadoop生态中非常重要的一部分,顾名思义,主要分为两部分,map和reduce,他们各司其职,map的主要功能是用来对待处理的文档进行处理,主要是对数据进行按行读取,分割,然后 ...

  5. vue+elementui搭建后台管理界面(3侧边栏菜单)

    上一节搭好了主框架,但是标签页和侧边栏只是分别展示了各自的菜单,如何将二者联动起来? 定义路由规则:当有 children 属性时,从 children 里取出 path 填充到侧边栏,如: { pa ...

  6. arcpy SearchCursor sql_clause

    import arcpy fc = 'c:/data/base.gdb/well' fields = ['WELL_ID', 'WELL_TYPE'] # Use ORDER BY sql claus ...

  7. TLS整理(下):TLS如何保证安全

    明文 无法验证服务器的真实性 从而引出了TLS.本篇就来着重介绍下TLS. 说起TLS可能有些人还比较陌生,但如果说到SSL,那知道的人就更多了.TLS其实就是SSL发展而来,版本演进大体为SSL 2 ...

  8. JVM 类加载器的双亲委托机制

    1.类加载器的层次结构 在双亲委托机制中,各个加载器按照父子关系形成了树形结构(逻辑意义),除了根加载器之外,其余的类加载器都有且只有一个父加载器. public class MyTest13 { p ...

  9. Java_jdbc 基础笔记之四 数据库连接 (通用更新方法)

    /** * 写一个通用的更新方法 包括 INSERT. DELETE.UPDATE * 使用工具类 * @param sql */ public void update(String sql){ Co ...

  10. 数据库中的同义词synonym

    一.Oracle数据只有一个实例(简单理解就是Oracle 只能建立一个数据库,不像MySQL,它下面可以创建N个库),那么Oracle是根据用户灵活去管理的:这点读起来.理解     起来也不那么难 ...