reactor & proactor 笔记
1. 基本概念
1.1 同步/异步,针对应用程序和内核交互而言。
同步:进程触发IO操作等待或轮询查看IO操作是否完成;
异步:进程触发IO操作后仅需自身的处理,IO操作完成后会得到通知(异步的特点)
1.2 阻塞/非阻塞:针对进程访问数据
阻塞:调用数据访问函数后一直等待
非阻塞:调用数据访问函数后立即返回
同步阻塞IO:传统的IO方式,进程发起一个IO操作后等待其完成;
同步非阻塞IO:进程发起一个IO操作后返回做其他处理,但进程需要不断询问IO操作是否完成,如JAVA NIO
异步阻塞IO:进程发起IO后等待内核通知,但仍然阻塞如select函数
异步非阻塞IO:发起IO操作后立即返回,然后等待内核的IO操作通知,当前java无支持
因此阻塞非阻塞本质上只针对同步有意义。
2. reactor & proactor
2.1 reactor
1. 注册就绪时间和关联的事件处理器;
2. 事件分离器等待事件发生;
3. 当发生读就绪事件时,事件分离器调用相应的时间处理器;
2.2 proactor
1. 等待事件
2. 读数据,由proactor完成
3. 把已经准备好的数据给用户处理函数(用户代码)
4. 用户处理数据
备注:与reactor不同的是proactor关注的是读/写完成事件
reactor & proactor 笔记的更多相关文章
- 两种高性能I/O设计模式(Reactor/Proactor)的比较
原文出处: Alex Libman 译文出处:潘孙友 欢迎分享原创到伯乐头条 综述 这篇文章探讨并比较两种用于TCP服务器的高性能设计模式. 除了介绍现有的解决方案,还提出了一种更具伸缩性,只 ...
- [转]两种高性能I/O设计模式(Reactor/Proactor)的比较
[原文地址:http://www.cppblog.com/pansunyou/archive/2011/01/26/io_design_patterns.html] 综述 这篇文章探讨并比较两种用于T ...
- 【转载】高性能IO设计 & Java NIO & 同步/异步 阻塞/非阻塞 Reactor/Proactor
开始准备看Java NIO的,这篇文章:http://xly1981.iteye.com/blog/1735862 里面提到了这篇文章 http://xmuzyq.iteye.com/blog/783 ...
- Reactor/Proactor的比较 (ZZ)
一般情况下,I/O 复用机制需要事件分享器(event demultiplexor [1.3]). 事件分享器的作用,即将那些读写事件源分发给各读写事件的处理者,就像送快递的在楼下喊: 谁的什么东西送 ...
- 两种高性能 I/O 设计模式 Reactor 和 Proactor
两种高性能 I/O 设计模式 Reactor 和 Proactor Reactor 和 Proactor 是基于事件驱动,在网络编程中经常用到两种设计模式. 曾经在一个项目中用到了网络库 libeve ...
- I/O模型系列之四:两种高性能IO设计模式 Reactor 和 Proactor
不同的操作系统实现的io策略可能不一样,即使是同一个操作系统也可能存在多重io策略,常见如linux上的select,poll,epoll,面对这么多不同类型的io接口,这里需要一层抽象api来完成, ...
- libevent之Reactor模式
通过前边的一篇博文轻量级网络库libevent初探,我们知道libevent实际上是封装了不同操作系统下的/dev/poll.kqueue.event ports.select.poll和epoll事 ...
- 框架篇:见识一下linux高性能网络IO+Reactor模型
前言 网络I/O,可以理解为网络上的数据流.通常我们会基于socket与远端建立一条TCP或者UDP通道,然后进行读写.单个socket时,使用一个线程即可高效处理:然而如果是10K个socket连接 ...
- GJM : 常用网站收集 【不断更新中... ... ... 】
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
随机推荐
- effetive C++ 02 尽量以const,enum,inline替换#define
#define ASPECT_RATIO=1.1const double AspectRatio=1.1 1. 使用宏会导致预处理器把程序代码中的ASPECT_RATIO无条件替换为1.1,编译器从未 ...
- 关于移动端input框 在微信中 和ios中无法输入文字的问题
这个是一个提交的页面但是总是无法输入进去文字 在uc中是可以的 但是在微信中 或者ios自带浏览器是无法输入的 绞尽脑汁 找了半天 才发现自己多加了一段代码(这个代码是模版中自带的 我靠) ...
- Linux中的工作管理(Job Control )
以前使用Linux老是会不小心按下Ctrl + z,然后就出现看不懂的情况,以为程序突然就没了,今天专门研究了下Linux下的几个快捷键和工作管理. 其中找到一篇很不错的文章,大部分是里面转载的. 原 ...
- cut笔记
cut -f 2,3 file.txt #查看第2.3列的信息,列分隔符默认为空格符 指定分隔符使用-d选项,如: cut -f 2,3 ...
- gitlab安装过程总结
gitlab总算搭建好了,今天下午完成了第一个工程的导入. 梳理下搭建的过程: 1.下载bitnami的一键安装包,并安装 注意设置权限为777,以免出现某文件写入错误的问题 2.配置邮件服务 分别修 ...
- JavaScript 三个组成部分
1.核心(ECMAScript) ECMAScript 仅仅是一个描述,定义了脚本语言的所有属性.方法和对象.其他语言可以实现 ECMAScript 来作为功能的基准,JavaScript 就是这样: ...
- js弹出公告
调用: $(document).ready(function(){ sAlert("公告","内容"); }); 方法 function sAlert(strT ...
- OpenCV 学习之路(1)
OpenCV的第一个代码: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #i ...
- Linux 如何安装memcache?
原有memcache所在机器损坏,需要在新的Linux机器上安装memcache,具体步骤如下: 1.使用Linux机器的root权限登陆 2.安装libevent 下载地址:http://libev ...
- LR11录制脚本时打不开浏览器,如何解决?
请教一下各位大神,我安装的LR11,在录制脚本的时候打不开浏览器,已经试过了网上的方法还是不行,以下是搜到的方法: 无法打开IE的主要原因是,LR的注册信息被修改了,所以无法找到IE的路径. 解决这个 ...