项目总思路

news2024/11/25 2:26:03

一、模型选择

高性能服务器一般用到的是 Reactor 模型,即事件驱动模型。

1、模型一:单 Reactor 单线程模型

只有一个线程会造成性能瓶颈。

适用场景:客户端少,业务处理快速。

2、模型二:单 Reactor 多线程模型

即用线程池处理业务。

降低了代码耦合度,Reactor 线程进行IO处理,业务线程就处理过来的具体业务。

但是单 Reactor 线程包含了所有客户端的事件监控和客户端IO操作,不利于并发场景。

3、模型三:多 Reactor 多线程模型

也叫主从 Reactor 模型。

将连接处理单独取出,单 Reactor 处理连接(主),多 Reactor 处理IO事件监控(从)

充分利用CPU多核资源,合理分配资源。执行流并不是越多越好,过多会增加CPU切换调度成本(所以从Reactor可以放入业务处理,减少线程 )

4、最终模型 one thread one eventloop

二、server模块划分

1、buffer模块

用户态的发送 / 接收缓冲区(针对通信套接字)

意义:防止接收的数据不完整,要先缓存在接收缓冲区。对于给客户端响应的数据,应该在套接字的发送缓冲区可写的情况下发送,在此之前数据只能放在发送缓冲区。

实现功能:向缓冲区添加数据,从缓冲区取数据

2、socket模块

对socket套接字操作进行封装

意义:使使用者操作套接字简单。

实现功能:创建套接字,绑定地址信息,开始监听,通信套接字发起连接,监听套接字接收连接,接收数据,发送数据,关闭套接字。组合调用函数:创建监听套接字,创建通信套接字。

3、channel模块

对每一个描述符进行IO事件监控,回调对应处理函数。

意义:让某个描述符监控事件在用户态更好维护,触发事件后操作流程清晰。

实现功能:描述符是否可读 / 写,监控描述符可读 / 写,解除可读 / 写 / 所有事件监控,对于不同事件回调函数设置。

4、connection模块

对于通信连接进行整体管理,一个连接有任何事件都调用对应回调函数。

意义:不是一个功能模块,是一个管理连接模块。

实现功能:关闭连接,发送数据,协议切换,启动非活跃连接超时释放,取消非活跃连接超时释放,连接建立完成回调,连接有新数据接收成功回调,关闭连接回调,产生事件回调。

5、acceptor模块

对socket和channel模块封装,实现管理监听套接字

意义:获取一个新连接后,要封装成connection对象设置回调。

实现功能:设置新连接回调函数(由最后服务器tcpserver决定)

6、timerqueue模块

超时连接管理,让一个任务在指定时间后被执行。

意义:组件内部对非活跃连接 n 秒后释放。

实现功能:添加定时任务,刷新定时任务(每一次事件处理后都要刷新),取消定时任务。

7、poller模块

事件监控模块,对 epoll 的封装,对任意描述符的事件监控。

意义:对描述符IO事件监控更简单。

实现功能:添加事件监控(channel模块),修改事件监控,移除事件监控。

8、eventloop模块

代表单 Reactor 线程,事件循环模块,对连接事件监控管理模块(epoll模块,timequeue模块),对连接的所有操作放 eventloop 线程保证线程安全。

意义:对于服务器中的所有事件都有 eventloop 模块实现,每一个 connection 连接都会绑定一个 eventloop 模块和线程,因为外界对连接的操作都要放在单独的线程保证安全。

实现功能:将一个任务添加到任务队列线程,定时任务的具体添加刷新和取消。

9、tcpserver模块

对所有子模块的封装,为用户提供方便的搭建服务器接口。

意义:让使用者用简单接口搭建一个tcp服务器。

实现功能:监听连接的管理(有新连接如何处理),通信连接管理(事件触发如何处理),超时连接管理(是否开启非活跃连接),对事件监控管理(启动多少线程和 eventloop),事件回调设置(再设置给 connection 模块)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2212306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

栈——单调栈

题目描述 给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。 输入格式 第一行包含整数 N (1≤N≤10^5),表示数列长度。 第二行包含 N 个整数,表示整数数列。1≤ai≤10^9。 输出格式 共一…

git规范化开发

特性分支开发 以前使用git基本都是随心所欲的用,commit的信息比较随便,所以有时git分支结构有时显得混乱,最近标准化开发的过程中接触了特性分支开发。 何为特性分支,按我的理解,就是每一次代码的修改提交&am…

Linux操作系统学习——常见指令集合

本篇博客是对于linux系统学习的初步认识,了解一些常见指令以及基础知识 ls指令 ls/ls -l :只显示文件名/显示更多文件的属性,此时注意最后一行开头位置字母为d就代表显示的是目录的文件属性,还有一点就是:ls -l 默认查看当前目录…

解锁5 大无水印热门短视频素材库

想让你的抖音视频更出彩吗?想知道那些爆款视频的素材源头吗?快来了解以下 5 个超棒的视频素材下载平台。 蛙学网 国内的视频素材佼佼者,有大量 4K 高清且无水印的素材,自然风光、情感生活等类别任你选,不少还免费&…

利用 NIM 平台上的生成式 AI模型,根据描述生成图片

以下是一个使用 NIM 平台的生成式 AI模型构建的简单 demo。这个 demo 实现了文生图,通过解析用户需求来判断是否需要进行画图。这里使用 Python 和 FastAPI框架来搭建一个简单的 web 应用。 项目结构 work/ │ ├── images/ ├── chat.py └── chat.html 安…

PostgreSQL技术内幕14:从插件来看PG扩展性-FDW插件

文章目录 0.简介1.FDW介绍2.使用方式2.1 创建过程2.1.1 创建插件2.1.2 创建 Foreign Server2.1.3 创建 User Mapping(外部服务器映射,本地文件可以不需要)2.1.4 创建外部表 2.2 查询流程 3.源码分析3.1 扩展接口分析3.2 和其他部分关联3.2.1 和计划的关联…

AI智能助理在企业内部的8大应用场景

一、概述 1.1 AI智能助理核心功能概览 1.2 AI智能助理业务应用价值 二、详解 AI智能助理在企业内部办公方向的应用可以极大地提高工作效率、优化流程,并为员工提供更加个性化的支持。以下是一些具体的业务场景: 日程管理和会议安排: 自动安…

现今 CSS3 最强二维布局系统 Grid 网格布局

深入学习 CSS3 目前最强大的布局系统 Grid 网格布局 Grid 网格布局的基本认识 Grid 网格布局: Grid 布局是一个基于网格的二位布局系统,是目前 CSS 最强的布局系统,它可以同时对列和行进行处理(它将网页划分成一个个网格,可以任…

Java读取PDF后做知识库问答_SpringAI实现

​​​​​​​​​​​​​​ 核心思路: 简单来说,就是把PDF文件读取并向量化,然后放到向量存储里面,再通过大模型,来实现问答。 RAG(检索增强生成)介绍: 检索增强生成&#x…

UE5 猎户座漂浮小岛 02 模型 地形

UE5 猎户座漂浮小岛 02 模型 地形 1.模型 1.1 导入 1.2 统一模型比例 1.3 添加碰撞体 2.地形 2.1 地 2.2 山体 2.3 海洋 2.4 花草

特征提取:传统算法 vs 深度学习

特征提取:传统算法 vs 深度学习 特征点是图像中梯度变化较为剧烈的像素,比如:角点、边缘等。FAST(Features from Accelerated Segment Test)是一种高速的角点检测算法;而尺度不变特征变换SIFT&#xff08…

使用DataX同步hive数据到MySQL

目录 1、组件环境 2、安装datax 2.1、下载datax并解压 3、安装datax-web 3.0、下载datax-web的源码,进行编译 3.1、在MySQL中创建datax-web元数据 3.2、安装data-web 3.2.1执行install.sh命令解压部署 3.2.1、手动修改 datax-admin配置文件 3.2.2、手动修改…

【python实操】python小程序之文件操作的输出指定格式数据以及异常捕获

引言 python小程序之文件操作的输出指定格式数据以及异常捕获 文章目录 引言一、文件操作之输出指定格式JSON1.1 题目1.2 代码1.3 代码解释1.3.1 总结 二、异常2.1 概念2.1.1 基本语法2.1.1.1 try...except2.1.1.2 try...except...else2.1.1.3 try...except...finally2.1.1.4 t…

量化选股:原理与实战指南(二)

🌟作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~🍊个人主页:小高要坚强的博客🍓当前专栏:《Python之量化交易》🍎本文内容:量化选股:原理与实战指南(二)🌸作者“三要”格言:要坚强、要努力、要学习 目录 引言 一、价值类因子简介 …

position定位静态定位/绝对定位/相对定位

1.静态定位static&#xff1a;按照标准流进行布局 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>D…

基于springboot Vue3的两种图形验证码工具——vue3-puzzle-vcode纯前端防人机图形滑动验证码和kaptcha图片文字验证码

一.vue3-puzzle-vcode Vue 纯前端的拼图人机验证、右滑拼图验证 官网&#xff1a; vue3-puzzle-vcode - npm (npmjs.com)https://www.npmjs.com/package/vue3-puzzle-vcode 1.1基本使用步骤 安装 npm install vue-puzzle-vcode --save 简单例子 点击开始验证按钮弹出验证弹…

linux从入门到精通-从基础学起,逐步提升,探索linux奥秘(十一)--rpm管理和计划任务

linux从入门到精通-从基础学起&#xff0c;逐步提升&#xff0c;探索linux奥秘&#xff08;十一&#xff09;–rpm管理和计划任务 一、rpm管理&#xff08;重点&#xff09; 1、rpm管理 作用&#xff1a; rpm的作用类似于windows上的电脑管家中“软件管理”、安全卫士里面“…

【机器学习】集成学习|Boosting|随机森林|Adaboost|GBDT梯度提升树|XGBoost 极限梯度提升树 及案例实现

文章目录 集成学习集成学习思想概述集成学习分类Bagging 思想Boosting思想Bagging 和 Boosting 的对比 随机森林算法随机森林实现步骤随机森林算法apiAPI 代码实现 Adaboost 算法实现步骤整体过程实现 算法推导Adaboost 案例 葡萄酒数据 GBDT (梯度提升树)提升树 BDT (Boosting…

WPF 中的 StackPanel 详解

Windows Presentation Foundation&#xff08;WPF&#xff09;是微软开发的一种用于创建桌面客户端应用程序的用户界面框架。WPF 提供了一套丰富的控件和布局能力&#xff0c;使得开发者可以轻松构建出功能强大、视觉优美的用户界面。在 WPF 的布局系统中&#xff0c;StackPane…