Reactor 和 Proactor 区别

同步异步、阻塞非阻塞组合

同步

read()函数为例,int n = read(fd, buf. sz)

  1. 当采用同步的方式和阻塞io的方式时,buf就是从内核拷贝的数据,函数返回则可以马上知道 buf 中的数据。
  2. 当采用同步的方式和非阻塞io的方式,并且此时io未就绪,此时n = -1即返回结果为-1,并且会通过error_number的返回值可以查看为什么没有得到数据。
  3. 当采用同步的方式和非阻塞io的方式,并且此时io就绪,那么此时跟阻塞io是同样的结果,当io函数返回时,可以获取从内核当中拷贝的数据即buf中的数据。

总结:由此可以看到采用同步的方式可以马上获知io操作的结果。

异步:

read()函数为例,int n = read(fd, buf. sz)

  1. 当采用异步的方方式时,发起函数调用请求以后,用户态的线程会可以去做其他的事情。不管io现在处于非阻塞还是阻塞的状态,内核会进行io检测是否就绪,就绪后就会在内核当中操作,将数据拷贝拷贝到buf中,再来通知用户层,数据io操作已经完成,之后就可以去处理相应的业务逻辑。

总结:io 函数调用后,不能获知 io 的操作结果, 此时 io 操作都由内核完成

本质区别

io 操作不同;reactor 中检测 io 是否就绪,然后操作 io; proactor 投递请求,所有 io 操作由内核完成 。

充电站
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

Reactor 和 Proactor 区别相关推荐

  1. IO:Reactor和Proactor的区别

    系统I/O 可分为阻塞型, 非阻塞同步型.阻塞异步型以及非阻塞异步型. 阻塞型I/O意味着控制权只到调用操作结束了才会回到调用者手里. 同步非阻塞是会立即返回控制权给调用者的.调用者不需要等等,它从调 ...

  2. Reactor与Proactor的区别

    1.标准定义 两种I/O多路复用模式:Reactor和Proactor 一般地,I/O多路复用机制都依赖于一个事件多路分离器(Event Demultiplexer).分离器对象可将来自事件源的I/O ...

  3. IO设计模式:Reactor和Proactor对比

    IO设计模式:Reactor和Proactor对比 平时接触的开源产品如Redis.ACE,事件模型都使用的Reactor模式:而同样做事件处理的Proactor,由于操作系统的原因,相关的开源产品也 ...

  4. 同步和异步, 阻塞和非阻塞, Reactor和Proactor

    http://www.artima.com/articles/io_design_patterns.html http://note.sdo.com/u/1434409594/n/lvRFW~kjR2 ...

  5. 2种IO并发开发中的设计模式:Reactor and Proactor

    Reactor and Proactor [原文:http://blog.csdn.net/wenbingoon/article/details/9880365] 1 概述 IO读写时,多路复用机制都 ...

  6. I/O模型系列之四:两种高性能IO设计模式 Reactor 和 Proactor

    不同的操作系统实现的io策略可能不一样,即使是同一个操作系统也可能存在多重io策略,常见如linux上的select,poll,epoll,面对这么多不同类型的io接口,这里需要一层抽象api来完成, ...

  7. 高性能IO设计的Reactor和Proactor模式(转)

    在高性能的I/O设计中,有两个比较著名的模式Reactor和Proactor模式,其中Reactor模式用于同步I/O,而Proactor运用于异步I/O操作. 在比较这两个模式之前,我们首先的搞明白 ...

  8. Reactor和Proactor对比以及优缺点 (netty的底层原理reactor模型)

    IO设计模式:Reactor和Proactor对比 时接触的开源产品如Redis.ACE,事件模型都使用的Reactor模式:而同样做事件处理的Proactor,由于操作系统的原因,相关的开源产品也少 ...

  9. 带你彻底搞懂高性能网络模式Reactor 和 Proactor

    ​​​​摘要:无论是 Reactor,还是 Proactor,都是一种基于「事件分发」的网络编程模式,区别在于 Reactor 模式是基于「待完成」的 I/O 事件,而 Proactor 模式则是基于 ...

最新文章

  1. ARP(Accounting Resource Planning)项目感想
  2. php 动态切换数据库,thinkphp多数据库动态切换
  3. VirtualBox中的Linux读取Windows共享目录
  4. 大剑无锋之UNION 和 UNION ALL (SQL)【面试推荐】
  5. 含有运算符的STRING得到计算结果,类似JS的EVAL
  6. Oracle 20c 新特性知多少?ANSI SQL 全支持之 EXCEPT 运算符增强
  7. Linux 命令(62)—— ar 命令
  8. 黑马程序员C++学习笔记(第二阶段核心:面向对象)(二)
  9. 机械设计与制造专业学习嵌入式单片机开发容易吗?
  10. CSDN-怎么设置被粉丝关注之后的自动回复
  11. 2017年全国大学生电子设计竞赛综合测评题目解析——2022更新(方波生成,方波分频,三角波,加法器,滤波器,正弦波))
  12. java方法可选参数_Java可选参数
  13. 【黑马程序员pink老师前端】HTML综合案例(二)
  14. 使用Nexus添加jar包到私服里
  15. iPhone开发秘籍(一)--第一章 iPhone SDK简介
  16. csu1335 高桥与低桥
  17. BZOJ4399魔法少女LJJ——线段树合并+并查集
  18. oracle查询视图时慢,oracle视图查询速度慢
  19. 优信拍集团php面试题_【优信拍PHP面试】一次不错的面试体验,面试官根据实际出发提问。-看准网...
  20. C语言函数没有return时会返回什么

热门文章

  1. 试述科学精神的核心意蕴
  2. 北纬36°2 and 东经120°0(一)
  3. 【点云前视图FV】详细理解雷达点云前视图(FV, Front View)
  4. Java 打印堆栈的几种方法
  5. java 单链表 添加 插入 删除
  6. BOS物流管理系统-第五天
  7. 学习笔记——Day1——Python歌词解析
  8. 点对点通讯的好处和坏处?能否实现及时通讯?
  9. FBX文件导入unity贴图丢失或动作无法播放
  10. insufficient data written 错误