网络编程:2. Reactor与Proactor

一、事件处理模型

网络连接上的消息处理可以分成两个阶段:

  1. 等待消息准备好
  2. 消息处理

通过使用事件处理模型,我们可以将代码结构化、模块化,并且可以更容易地维护和扩展。同时,事件处理模型也能够提高程序的并发性和响应性,因为事件处理器可以在不阻塞主线程的情况下异步处理事件。

二、Reactor模型

1. Reactor是什么

Reactor是一种事件驱动机制,用于同步IO。将I/O操作的并发处理从单线程中分离出来,使程序可以同时处理多个客户端请求。

在Reactor模型中,主线程负责接收新的连接请求,并将它们转发给不同的处理程序处理,而不是在主线程中直接处理这些请求。

  • 其中心思想是将所有要处理的IO事件注册到一个中心IO多路复用器上,同时主线程/进程阻塞在多路复用器上。
  • 一旦有IO事件到来或者是准备就绪,多路复用器返回并将事先注册的相应IO事件分发到对应的处理器中。

Reactor模型的三个重要组件:

  1. 多路复用器:由操作系统提供,在Linux上一般是select,poll,epoll等系统调用
  2. 事件分发器:将多路复用器中返回的就绪事件分发到对应的处理函数中
  3. 事件处理器:负责处理特定事件的处理函数

2. Reactor优点

优点如下:

  1. 响应快,不必为单个同步事件而阻塞,虽然Reactor本身依然是同步的
  2. 编程相对简单,可以最大程度的避免复杂的多线程及同步问题,并且避免了多线程/进程的切换开销
  3. 可扩展性,可以方便的通过增加Reactor实例个数来充分利用CPU资源
  4. 可复用性,reactor框架本身与具体事件处理逻辑无关,具有很高的复用性

Reactor模型开发效率上比直接使用IO复用要高,它通常是单线程的,设计目标是希望单线程使用一颗CPU的全部资源,在每个事件处理中大部分情况下可以不考虑共享资源的互斥访问。

三、Proactor模型

1. Proactor是什么

Proactor是一种并发编程模式,其目的是提高异步IO操作的性能和可维护性。在Proactor模式中,操作系统负责管理IO操作,应用程序只需要定义回调函数处理IO事件

  • 所有的IO操作都交由系统提供的异步IO接口去执行,工作线程仅仅负责业务逻辑

2. Proactor的优点

Proactor在系统态将读写优化,利用IO并行能力,提供一个高性能单线程模型,有效地减少线程切换、减轻CPU负担,提高系统的并发能力

  1. 高效性:Reactor采用异步非阻塞的方式处理IO操作,可以高效地处理大量的并发请求。
  2. 可扩展性:Reactor的设计模式支持横向扩展和垂直扩展,可以根据需要动态增加或减少服务器节点。
  3. 可靠性:由于采用了事件驱动的模式,Reactor能够更好地处理异常情况,保证系统的稳定性和可靠性。
  4. 易于维护:Reactor采用清晰简单的代码结构和模块化的设计模式,易于维护和修改。
  5. 跨平台性:Reactor在不同的操作系统上都有良好的兼容性,可以运行在各种平台上。

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:

Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

猜你喜欢

转载自blog.csdn.net/weixin_44839362/article/details/130233350