服务器模型 Reactor 和 Proactor

2024-09-06 16:20

本文主要是介绍服务器模型 Reactor 和 Proactor,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Proactor

image.png

image.png

具体流程如下:

  1. 处理器发起异步操作,并关注 IO 完成事件;
  2. 事件分离器等待操作完成事件;
  3. 分离器等待过程中,内核并行执行实际的 IO 操作,并将结果存储入用户自定义的缓冲区,最后通知事件分离器读操作完成;
  4. IO 完成后,通过事件分离器呼唤处理器;
  5. 事件处理器处理用户自定义的缓冲区中的数据

Proactor 的所有 IO 操作都交给系统提供的异步 IO 接口去执行。工作线程值负责业务逻辑。在 Proactor 中,用户函数启动一个异步的文件操作。同时将这个操作注册到多路复用器上。多路复用器并不关心文件是否可读或可写,而是关系这个异步读操作是否完成步操作是操作系统完成,用户程序不需要关心。多路复用器等待直到有完成通知到来。当操
作系统完成了读文件操作将读到的数据复制到了用户先前提供的缓冲区之后,通知多路
复用器相关操作已完成。多路复用器再调用相应的处理程序,处理数据。

Reactor

image.png

Reactor 模式是处理并发 IO 必将常见的一种模式,用于同步 IO,中心思想是将所有要处理的 IO 事件都注册到一个中心 IO 多路复用器上,同时主线程/进程阻塞在多路复用器上;一旦有 IO 事件到来回事准备就绪,多路复用器返回并将事先注册的相应 IO 事件分发到对应的处理器中。

Reactor 模型有三个重要组件:

  • 多路复用器:由操作系统提供;
  • 事件分发器:将多路复用器中返回的就绪事件分到对应的处理函数中;
  • 事件处理器:负责处理特定事件的处理函数。

image.png

具体流程如下:

  1. 注册读就绪事件和相应的时间处理器;
  2. 事件分离器等待事件
  3. 事件到来,激活分离器,分离器调用事件对应的处理器;
  4. 事件处理器完成实际读操作,处理读到的数据,注册新事件,然后返还控制权。

Reactor 模式是编写高性能网络服务器的必备技术之一,它具有如下的优点:

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

在 Reactor 模式中,一个单独的线程(通常称为主循环或事件循环)负责处理所有的输入输出事件,并通过事件分发器将这些事件分派给相应的处理器。由于只有一个线程负责处理所有事件,因此在多核系统上使用 Reactor 模式可能会面临以下挑战:

  1. 线程同步问题:在多核系统上,不同的 CPU 核心可以同时执行不同的线程。当多个线程同时访问共享数据时,需要进行适当的同步机制来保证数据的一致性和避免竞态条件。
  2. 线程间切换开销:在多核系统上,如果使用 Reactor 模式实现时每个连接都对应一个线程,则可能会创建大量的线程。线程之间频繁地切换会引入额外的开销,并可能导致系
  3. 调度和负载均衡:在多核系统上使用 Reactor 模式时,需要考虑如何合理地分配任务给各个 CPU 核心以达到负载均衡。否则,某些 CPU 核心可能会过载而其他核心处于闲置状态。

这篇关于服务器模型 Reactor 和 Proactor的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142512

相关文章

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Spring AI Alibaba接入大模型时的依赖问题小结

《SpringAIAlibaba接入大模型时的依赖问题小结》文章介绍了如何在pom.xml文件中配置SpringAIAlibaba依赖,并提供了一个示例pom.xml文件,同时,建议将Maven仓... 目录(一)pom.XML文件:(二)application.yml配置文件(一)pom.xml文件:首

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

如何在本地部署 DeepSeek Janus Pro 文生图大模型

《如何在本地部署DeepSeekJanusPro文生图大模型》DeepSeekJanusPro模型在本地成功部署,支持图片理解和文生图功能,通过Gradio界面进行交互,展示了其强大的多模态处... 目录什么是 Janus Pro1. 安装 conda2. 创建 python 虚拟环境3. 克隆 janus

本地私有化部署DeepSeek模型的详细教程

《本地私有化部署DeepSeek模型的详细教程》DeepSeek模型是一种强大的语言模型,本地私有化部署可以让用户在自己的环境中安全、高效地使用该模型,避免数据传输到外部带来的安全风险,同时也能根据自... 目录一、引言二、环境准备(一)硬件要求(二)软件要求(三)创建虚拟环境三、安装依赖库四、获取 Dee