Reactor 和 Proactor 区别

简介: Reactor 和 Proactor 区别

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等技术内容,立即学习

相关文章
|
7月前
|
负载均衡 NoSQL 网络协议
网络中的阻塞与非阻塞以及reactor模型
网络中的阻塞与非阻塞以及reactor模型
50 0
|
2月前
|
Java
Reactor模式
通过一个具体的Java代码示例展示了如何在NIO框架下实现Reactor模式,用于处理网络IO事件,包括事件的接收、分发和处理。
40 4
Reactor模式
|
2月前
|
NoSQL Java Redis
Reactor实战,创建一个简单的单线程Reactor(理解了就相当于理解了多线程的Reactor)
本文通过一个简单的单线程Reactor模式的Java代码示例,展示了如何使用NIO创建一个服务端,处理客户端的连接和数据读写,帮助理解Reactor模式的核心原理。
37 0
Reactor实战,创建一个简单的单线程Reactor(理解了就相当于理解了多线程的Reactor)
|
7月前
|
设计模式
深入浅出Reactor和Proactor模式
深入浅出Reactor和Proactor模式
|
7月前
|
监控 安全 Linux
reactor的原理与实现
前情回顾 网络IO,会涉及到两个系统对象:   一个是用户空间调用的进程或线程   一个是内核空间的内核系统 如果发生IO操作read时,会奖励两个阶段:
74 1
|
7月前
|
缓存
2.1.2事件驱动reactor的原理与实现
2.1.2事件驱动reactor的原理与实现
|
7月前
|
API Windows
Reactor和Proactor网络模型的区别
Reactor和Proactor网络模型的区别
|
7月前
|
监控 Java 应用服务中间件
Reactor反应器模式
在Java的OIO编程中,最初和最原始的网络服务器程序使用一个while循环,不断地监听端口是否有新的连接,如果有就调用一个处理函数来处理。这种方法最大的问题就是如果前一个网络连接的处理没有结束,那么后面的连接请求没法被接收,于是后面的请求统统会被阻塞住,服务器的吞吐量就太低了。 为了解决这个严重的连接阻塞问题,出现了一个即为经典模式:Connection Per Thread。即对于每一个新的网络连接都分配一个线程,每个线程都独自处理自己负责的输入和输出,任何socket连接的输入和输出处理不会阻塞到后面新socket连接的监听和建立。早期版本的Tomcat服务器就是这样实现的。
|
设计模式 网络协议 数据处理
Reactor模式(一)
Reactor模式
125 0
|
网络协议 数据处理
Reactor模式(二)
Reactor模式
85 0