高性能网络模型

高性能网络模型

  • Reactor
    • 单Reactor单线程/进程模型
      • 执行流程
      • 缺点
    • 单Reactor多线程
      • 执行流程
      • 缺点
    • 多Reactor多线程
      • 执行流程
  • Proactor
    • Reactor和Proactor的区别
    • Proactor的流程

Reactor

单Reactor单线程/进程模型

高性能网络模型_第1张图片

  • Reactor对象的作用是监听和分发事件
  • Accept的作用是来获取连接的
  • Handler就是来处理业务的

执行流程

  • Reactor对象通过select(IO多路复用接口)监听事件,收到后通过dispatch进行分发,具体是发给Handler还是Acceptor还得看具体的事件
  • 如果是建立连接的请求,就交给Acceptor处理,通过accept方法建立连接并且生成一个handler处理后续的事情
  • 如果不是连接事件就交给Handler区处理

缺点

  • 只有一个线程或者进程,无法充分利用CPU的性能
  • 如果在Handler处理事件的时候,整个整个线程无法处理其他的事件

单Reactor多线程

高性能网络模型_第2张图片

执行流程

  • Reactor 对象通过 select (IO 多路复⽤接⼝) 监听事件,收到事件后通过 dispatch 进⾏分发,具体分发给 Acceptor 对象还是 Handler 对象,还要看收到的事件类型;
  • 如果是连接建⽴的事件,则交由 Acceptor 对象进⾏处理,Acceptor 对象会通过 accept ⽅法 获取连接,并创建⼀个 Handler 对象来处理后续的响应事件;如果不是连接建⽴事件, 则交由当前连接对应的 Handler 对象来进⾏响应
  • Handler不再负责业务处理,只负责数据的接收和发送,Handler在read读取数据之后,会将数据发送给子线程的Process去处理

缺点

  • 只有一个Reactor负责接收和监听的话,在面对高并发的时候,可能成为性能瓶颈

多Reactor多线程

高性能网络模型_第3张图片

执行流程

  • 主线程中的MainReactor对象通过select监控建立事件,收到事件之后通过Acceptor对象接力起连接,并将连接派发给某个子线程
  • 子线程中的subReacotr对象将MainReactor对象分配的连接加入到select继续监听,并创建一个Handler处理相应的事件

Proactor

定义:Reactor是非阻塞同步网络模式,Proactor是异步网络模型

Reactor和Proactor的区别

  • Reactor是非阻塞同步网络模式,感知的是就绪可读事件。每次感知到有事件发生的时候,就需要应用程序主动调用read方法,完成数据的读写,也就是应用程序主动将socket接收缓存中的数据读到应用内存中,这个过程是同步,读完数据之后才能处理数据
  • Proactor是异步网络模型,感知的是已完成的读写事件,读写都是用操作系统完成的,不需要像Reactor一样主动发起read/write来读写数据

Proactor的流程

高性能网络模型_第4张图片

  • Proactor Initiator负责创建Proactor和Handler,并将Proactor和handler都通过Asynchronous Operation Processor 注册到内核
  • Asynchronous Operation Processor 负责处理注册请求,并处理 I/O 操作
  • Asynchronous Operation Processor 完成 I/O 操作后通知 Proactor
  • Proactor 根据不同的事件类型回调不同的 Handler 进⾏业务处理;
  • Handler 完成业务处理

你可能感兴趣的:(操作系统,操作系统)