为了形成一个完整清晰的认识,将概念和关系梳理出来,把坑填平。

I/O多路复用
I/O多路复用主要解决传统I/O单线程阻塞的问题。它通过单线程管理多个FD,当监听的FD有状态变化的时候的,调用回调函数,通知用户已经准备完毕。用户收到通知,就可以进行IO操作了。这种机制大大的提高了系统的吞吐量。I/O多路复用的目的是为了更充分的利用CPU资源。

EPOLL(SELECT/POLL)
Linux下I/O多路复用的接口实现。EPOLL是POLL和SELECT的升级版。NIO底层就是封装了EPOLL接口。

Event-driven
也叫事件驱动。是通过执行某一操作的时候,触发之前就已经注册好的监听器。比如:AWT中的按钮点击事件机制,还有下面要说的Reactor模式就是基于事件驱动的设计。基于事件驱动的应用有:Nginx、Redis、Memcached等,都是大名鼎鼎的开源项目。同时,个人认为事件驱动机制也是依赖与EPOLL机制,基于没有依据,需要看官多多思考,更欢迎指教。

Reactor模式
也叫反应堆模式,基于事件驱动的设计模式。网上有大把的文章和教程比较看,笔者强烈推荐看《Scalable IO in Java》论文。看完就啥都懂了。

NIO && Netty
Reactor模式在Java上的API实现。是Java高性能高并发访问的重要组成部分。但是因为在NIO编程中需要处理的琐碎细节比较多,个人在coding的时候发现的是异常情况处理有点多。《Netty权威指南》说了为什么不选择原生NIO编程的原因(虽然同行们对此书评价不高,但至少这个原因说的还算正确):
可靠性能力补齐,工作量和难度都非常大。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等等,NIO编程的特点是功能开发相对容易,但是可靠性能力补齐工作量和难度都非常大;
Netty封装了NIO,给人们提供了一个更方便可靠的选择。在很多著名的开源工具上都有使用Netty作为NIO功能的替代,比如阿里的dubbo、新浪刚开源的motan等。

知识联结梳理 : I/O多路复用、EPOLL(SELECT/POLL)、NIO、Event-driven、Reactor模式的更多相关文章

  1. 关于同步,异步,阻塞,非阻塞,IOCP/epoll,select/poll,AIO ,NIO ,BIO的总结

    相关资料 IO基本概念 Linux环境 同步异步阻塞非阻塞 同步与异步 阻塞与非阻塞 IO模型Reference Link 阻塞IO模型 非阻塞IO模型 IO复用模型 信号驱动异步IO模型 异步IO模 ...

  2. IO多路复用之select poll epoll

    参考文档: http://blog.csdn.net/tennysonsky/article/details/45745887 select(),poll(),epoll()都是I/O多路复用的机制. ...

  3. [转载] Linux下多路复用IO接口 epoll select poll 的区别

    原地址:http://bbs.linuxpk.com/thread-43628-1-1.html 废话不多说,一下是本人学习nginx 的时候总结的一些资料,比较乱,但看完后细细揣摩一下应该就弄明白区 ...

  4. Linux下多路复用IO接口epoll/select/poll的区别

    select比epoll效率差的原因:select是轮询,epoll是触发式的,所以效率高. Select: 1.Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认 ...

  5. I/O多路复用之select,poll,epoll简介

    一.select 1.起源 select最早于1983年出现在4.2BSD中(BSD是早期的UNIX版本的分支). 它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回 ...

  6. Linux网络通信编程(套接字模型TCP\UDP与IO多路复用模型select\poll\epoll)

    Linux下测试代码: http://www.linuxhowtos.org/C_C++/socket.htm TCP模型 //TCPClient.c #include<string.h> ...

  7. 浅谈网络I/O多路复用模型 select & poll & epoll

    http://blog.csdn.net/nk_test/article/details/50662946

  8. IO多路复用select/poll/epoll详解以及在Python中的应用

    IO multiplexing(IO多路复用) IO多路复用,有些地方称之为event driven IO(事件驱动IO). 它的好处在于单个进程可以处理多个网络IO请求.select/epoll这两 ...

  9. I/O复用中的 select poll 和 epoll

    I/O复用中的 select poll 和 epoll: 这里有一些不错的资料: I/O多路复用技术之select模型: http://blog.csdn.net/nk_test/article/de ...

随机推荐

  1. BZOJ1057[ZJOI2007]棋盘制作 [单调栈]

    题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的 ...

  2. POJ3070 Fibonacci[矩阵乘法]

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13677   Accepted: 9697 Descri ...

  3. block的哪些事 --- 学习笔记十

    //带有自动变量值的匿名函数 //block 与 C语言函数比只有两点不同,1.没有函数名. 2.带有"^". //类似于方法,如B中的值传给A中,在B中,一. 定义 : 二. 实 ...

  4. C#事件学习

    通过代码触发事件(第10章).由对象触发的事件(Timer每隔Interval指定时间,就触发Tick事件,第8章使用Timer). 目录: 避免递归事件 访问对象的事件 使用事件参数 创建事件处理程 ...

  5. Java并发编程:深入剖析ThreadLocal

    原文出处: 海 子 想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理.首先,本文先谈一下对ThreadLocal的理解,然后根据Threa ...

  6. tagfield

  7. 从梯度下降到Fista

    前言: FISTA(A fast iterative shrinkage-thresholding algorithm)是一种快速的迭代阈值收缩算法(ISTA).FISTA和ISTA都是基于梯度下降的 ...

  8. ajax给全局变量赋值问题解决示例

    今天在做项目时,遇到了一个问题.我用的是ajax,要在 ajax里面给一个全局变量赋值,结果死活赋值不上,纠结了好半天,后来上网查了查,才 知道,ajax默认是异步请求,(当要赋值时,此时的值没有拿到 ...

  9. CRC32算法

    unsigned ] = { 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0 ...

  10. 解决 PHPExcel 长数字串显示为科学计数

    解决 PHPExcel 长数字串显示为科学计数 在excel中如果在一个默认的格中输入或复制超长数字字符串,它会显示为科学计算法,例如身份证号码,解决方法是把表格设置文本格式或在输入前加一个单引号. ...