当前位置: 首页 > news >正文

Linux高阶——1123—

1、服务器版本介绍及实现

1、单进程单任务服务器(阻塞IO)

单进程模型,阻塞IO冲突,等待连接时无法读取数据,读取数据时无法连接

比较适合处理单任务,排队处理业务

伪代码

while(true)
{addrlen=sizeof(clientaddr);client_sock=accept(sock,&clientaddr,&addrlen);printf("显示连接信息");/*存储sock*//*IO处理*/while(RECV(buf)){//根据读取的数据,判定如何处理SEND(buf);//响应}
}

2、单进程多任务服务器(非阻塞IO)

代码

#include<sock.c>
#define server_ip "192.168.5.133"
#define server_port 9090int main()
{struct sockaddr_in client_addr;int server_sock;int client_sock;server_sock=net_initializer(NULL,server_port,128);socklen_t addrlen;printf("TCP IO Servers Running...\n");char cip[16];ssize_t len;client_info cf; char buf[1500];char* msg="Please try again\n";char tm[1024];int client_array[8000];for(int i=0;i<8000;i++)client_array[i]=-1;int flag;flag=fcntl(server_sock,F_GETFL);flag|=O_NONBLOCK;fcntl(server_sock,F_SETFL,flag);while(1){   addrlen=sizeof(client_addr);if((client_sock=ACCEPT(server_sock,(struct sockaddr*)&client_addr,&addrlen))>0){cf.sockfd=client_sock;inet_ntop(AF_INET,&client_addr.sin_addr.s_addr,cf.ip,16);cf.port=ntohs(client_addr.sin_port);first_response(cf);for(int i=0;i<8000;i++){if(client_array[i]==-1){client_array[i]=client_sock;break;}}}for(int i=0;i<8000;i++){if(client_array[i]!=-1){while((len=RECV(client_sock,buf,sizeof(buf),0))>0){if((strcmp(buf,"time\n"))==0){get_time(tm);SEND(client_sock,tm,strlen(tm),MSG_NOSIGNAL);bzero(tm,sizeof(tm));}else{SEND(client_sock,msg,strlen(msg),MSG_NOSIGNAL);}bzero(buf,sizeof(buf));}if(len==0){printf("client exit\n");close(client_sock);client_array[i]=-1;}}}}close(server_sock);printf("server done\n");return 0;
}

3、多进程多任务服务器(阻塞IO)

1、多进程模型流程

为了让服务端有更好的处理能力,单进程无法满足需求,所以要提升处理单元的数量,为每个客户端分配一个处理单元(Process),让客户端与处理单元绑定,有一个比较好的处理效果

避免阻塞冲突,因为每个处理进程都会分配一个客户端,相互之间没有影响

多进程模型优点

1、可以得到更多的系统时间片,提升服务器处理性能

2、具备并发性,某个进程阻塞,不会影响其他进程,不会导致服务器无法响应

3、即使某些进程放弃cpu,根据就近原则,服务器的其他进程也可以继续使用,cpu使用效率更高

多进程模型处理缺点

1、进程有庞大的内存开销与调度开销,并发数量取决于进程数量导致高并发

2、会出现大量创建销毁进程的开销,当客户端连接后再创建服务进程,不能及时响应

多进程设计思路

客户端调用connect函数连接服务端

服务端的父进程P只做连接,调用accept函数,accept函数返回值为一个新的套接字new_sock

连接成功,表示有新用户,此时父进程调用fork函数创建子进程,创建出了一个处理单元C

此时的子进程继承了父进程的new_sock,并且使用此套接字与客户端进行通信

多进程多任务的难点

回收,避免产生僵尸

只有父进程可以回收子进程,但如果父进程回收子进程,则会与连接操作产生冲突

因此,将父进程分为多个线程,主线程负责连接,普通线程负责回收

使用被动回收策略,父进程执行自身任务,子进程退出后,通知父进程,父进程再进行回收

将捕捉函数,改为回收函数,不按信号数量回收,应当将当前可回收的子进程全部回收释放,避免回收漏掉的问题

多进程模型的回收策略

多个线程,信号行为共享,但是屏蔽字不共享,每个线程拥有自己的屏蔽字

当进程调用函数陷入阻塞,如果在阻塞过程中,产生信号,系统会执行捕捉函数,阻塞函数会被中断

普通线程先设置捕捉,再解除屏蔽

相关文章:

Linux高阶——1123—

1、服务器版本介绍及实现 1、单进程单任务服务器&#xff08;阻塞IO&#xff09; 单进程模型&#xff0c;阻塞IO冲突&#xff0c;等待连接时无法读取数据&#xff0c;读取数据时无法连接 比较适合处理单任务&#xff0c;排队处理业务 伪代码 while(true) {addrlensizeof(c…...

VOLO实战:使用VOLO实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…...

【kafka02】消息队列与微服务之Kafka部署

Kafka 部署 Kafka 部署说明 kafka 版本选择 kafka 基于scala语言实现,所以使用kafka需要指定scala的相应的版本.kafka 为多个版本的Scala构建。这仅在使用 Scala 时才重要&#xff0c;并且希望为使用的相同 Scala 版本构建一个版本。否则&#xff0c;任何版本都可以 kafka下…...

MySQL系列之数据类型(Numeric)

导览 前言一、数值类型综述二、数值类型详解1. NUMERIC1.1 UNSIGNED或SIGNED1.2 数据类型划分 2. Integer类型取值和存储要求3. Fixed-Point类型取值和存储要求4. Floating-Point类型取值和存储要求 结语精彩回放 前言 MySQL系列最近三篇均关注了和我们日常工作或学习密切相关…...

BERT简单理解;双向编码器优势

目录 BERT简单理解 一、BERT模型简单理解 二、BERT模型使用举例 三、BERT模型的优势 双向编码器优势 BERT简单理解 (Bidirectional Encoder Representations from Transformers)模型是一种预训练的自然语言处理(NLP)模型,由Google于2018年推出。以下是对BERT模型的简…...

LLamafactory 批量推理与异步 API 调用效率对比实测

背景 在阅读 LLamafactory 的文档时候&#xff0c;发现它支持批量推理: 推理.https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/inference.html 。 于是便想测试一下&#xff0c;它的批量推理速度有多快。本文实现了 下述两种的大模型推理&#xff0c;并对…...

spf算法、三类LSA、区间防环路机制/规则、虚连接

1.构建spf树&#xff1a; 路由器将自己作为最短路经树的树根根据Router-LSA和Network-LSA中的拓扑信息,依次将Cost值最小的路由器添加到SPF树中。路由器以Router ID或者DR标识。广播网络中DR和其所连接路由器的Cost值为0。SPF树中只有单向的最短路径,保证了OSPF区域内路由计管不…...

C语言学习 12(指针学习1)

一.内存和地址 1.内存 在讲内存和地址之前&#xff0c;我们想有个⽣活中的案例&#xff1a; 假设有⼀栋宿舍楼&#xff0c;把你放在楼⾥&#xff0c;楼上有100个房间&#xff0c;但是房间没有编号&#xff0c;你的⼀个朋友来找你玩&#xff0c;如果想找到你&#xff0c;就得挨…...

TypeError: issubclass() arg 1 must be a class

TypeError: issubclass() arg 1 must be a class 报错代码&#xff1a; import spacy 原因&#xff1a; 库版本错误&#xff0c; 解决方法&#xff1a; pip install typing-inspect0.8.0 typing_extensions4.5.0 感谢作者&#xff1a; langchain TypeError: issubclass() …...

Java面试题、八股文学习之JVM篇

1.对象一定分配在堆中吗&#xff1f;有没有了解逃逸分析技术&#xff1f; 对象不一定总是分配在堆中。在Java等一些高级编程语言中&#xff0c;对象的分配位置可以通过编译器或运行时系统的优化来决定。其中&#xff0c;逃逸分析&#xff08;Escape Analysis&#xff09;是用于…...

【eNSP】动态路由协议RIP和OSPF

动态路由RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;和OSPF&#xff08;Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;是两种常见的动态路由协议&#xff0c;它们各自具有不同的特点和使用场景。本篇会对这两种协…...

春秋云境 CVE 复现

CVE-2022-4230 靶标介绍 WP Statistics WordPress 插件13.2.9之前的版本不会转义参数&#xff0c;这可能允许经过身份验证的用户执行 SQL 注入攻击。默认情况下&#xff0c;具有管理选项功能 (admin) 的用户可以使用受影响的功能&#xff0c;但是该插件有一个设置允许低权限用…...

Linux入门攻坚——39、Nginx入门

Nginx&#xff1a;engine X Tengine&#xff1a;淘宝改进维护的版本 Registry&#xff1a; 使用了libevent库&#xff1a;高性能的网络库 epoll()函数 Nginx特性&#xff1a; 模块化设计、较好的扩展性&#xff1b;&#xff08;但不支持动态加载模块功能&#…...

计算机网络的类型

目录 按覆盖范围分类 个人区域网&#xff08;PAN&#xff09; 局域网&#xff08;LAN&#xff09; 城域网&#xff08;MAN&#xff09; 4. 广域网&#xff08;WAN&#xff09; 按使用场景和性质分类 公网&#xff08;全球网络&#xff09; 外网 内网&#xff08;私有网…...

解决 MySQL 5.7 安装中的常见问题及解决方案

目录 前言1. 安装MySQL 5.7时的常见错误分析1.1 错误原因及表现1.2 错误的根源 2. 解决方案2.1 修改YUM仓库配置2.2 重新尝试安装2.3 处理GPG密钥错误2.4 解决依赖包问题 3. 安装成功后的配置3.1 启动MySQL服务3.2 获取临时密码3.3 修改root密码 4. 结语 前言 在Linux服务器上…...

VITE+VUE3+TS环境搭建

前言&#xff08;与搭建项目无关&#xff09;&#xff1a; 可以安装一个node管理工具&#xff0c;比如nvm&#xff0c;这样可以顺畅的切换vue2和vue3项目&#xff0c;以免出现项目跑不起来的窘境。我使用的nvm&#xff0c;当前node 22.11.0 目录 搭建项目 添加状态管理库&…...

【设计模式】【创建型模式(Creational Patterns)】之原型模式(Prototype Pattern)

1. 设计模式原理说明 原型模式&#xff08;Prototype Pattern&#xff09; 是一种创建型设计模式&#xff0c;它允许你通过复制现有对象来创建新对象&#xff0c;而无需通过构造函数来创建。这种方式可以提高性能&#xff0c;尤其是在对象初始化需要消耗大量资源或耗时较长的情…...

黄仁勋:人形机器人在内,仅有三种机器人有望实现大规模生产

11月23日&#xff0c;芯片巨头、AI时代“卖铲人”和最大受益者、全球市值最高【英伟达】创始人兼CEO黄仁勋在香港科技大学被授予工程学荣誉博士学位&#xff1b;并与香港科技大学校董会主席沈向洋展开深刻对话&#xff0c;涉及人工智能&#xff08;AI&#xff09;、计算力、领导…...

【C语言】宏定义详解

C语言中的宏定义&#xff08;#define&#xff09;详细解析 在C语言中&#xff0c;宏定义是一种预处理指令&#xff0c;使用 #define 关键字定义。它由预处理器&#xff08;Preprocessor&#xff09;在编译前处理&#xff0c;用于定义常量、代码片段或函数样式的代码替换。宏是…...

LangChain——多向量检索器

每个文档存储多个向量通常是有益的。在许多用例中&#xff0c;这是有益的。 LangChain 有一个基础 MultiVectorRetriever &#xff0c;这使得查询此类设置变得容易。很多复杂性在于如何为每个文档创建多个向量。本笔记本涵盖了创建这些向量和使用 MultiVectorRetriever 的一些常…...

《岩石学报》

本刊主要报道有关岩石学基础理论的岩石学领域各学科包括岩浆岩石学、变质岩石学、沉积岩石学、岩石大地构造学、岩石同位素年代学和同位素地球化学、岩石成矿学、造岩矿物学等方面的重要基础理论和应用研究成果&#xff0c;同时也刊载综述性文章、问题讨论、学术动态以及书评等…...

数据结构 (12)串的存储实现

一、顺序存储结构 顺序存储结构是用一组连续的存储单元来存储串中的字符序列。这种存储方式类似于线性表的顺序存储结构&#xff0c;但串的存储对象仅限于字符。顺序存储结构又可以分为定长顺序存储和堆分配存储两种方式。 定长顺序存储&#xff1a; 使用静态数组存储&#xff…...

职场发展陷阱

一、只有执行&#xff0c;没有思考 二、只有过程&#xff0c;没有结果 三、只有重复&#xff0c;没有精进 四、不懂向上管理 五、定期汇报 六、不要憋大招 七、多同步信息...

Xcode15(iOS17.4)打包的项目在 iOS12 系统上启动崩溃

0x00 启动崩溃 崩溃日志&#xff0c;只有 2 行&#xff0c;看不出啥来。 0x01 默认配置 由于我开发时&#xff0c;使用的 Xcode 14.1&#xff0c;打包在另外一台电脑 Xcode 15.3 Xcode 14.1 Build Settings -> Asset Catalog Compliter - Options Xcode 15.3 Build S…...

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【二】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...

PVE相关名词通俗表述方式———多处细节实验(方便理解)

PVE设置初期&#xff0c;对CIDR、 网关、 LinuxBridge、VLAN等很有困惑的朋友一定很需要一篇能够全面通俗易懂的方式去理解PVE 中Linux网桥的工作方式&#xff0c;就像操作一个英雄&#xff0c;多个技能&#xff0c;还是需要一点点去学习理解的&#xff0c;如果你上来就对着别人…...

Ansible--自动化运维工具

Ansible自动化运维工具介绍 1.Ansible介绍 Ansible是一款自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、cfengine、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令等功能。…...

微信小程序学习指南从入门到精通

&#x1f5fd;微信小程序学习指南从入门到精通&#x1f5fd; &#x1f51d;微信小程序学习指南从入门到精通&#x1f51d;✍前言✍&#x1f4bb;微信小程序学习指南前言&#x1f4bb;一、&#x1f680;文章列表&#x1f680;二、&#x1f52f;教程文章的好处&#x1f52f;1. ✅…...

微服务篇-深入了解使用 RestTemplate 远程调用、Nacos 注册中心基本原理与使用、OpenFeign 的基本使用

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 认识微服务 1.1 单体架构 1.2 微服务 1.3 SpringCloud 框架 2.0 服务调用 2.1 RestTemplate 远程调用 3.0 服务注册和发现 3.1 注册中心原理 3.2 Nacos 注册中心 …...

使用 Django 构建支持 Kubernetes API 测试连接的 POST 接口

文章目录 使用 Django 构建支持 Kubernetes API 测试连接的 POST 接口功能需求使用 kubectl 获取 Token命令解析输出示例 完整代码实现Kubernetes API 客户端类功能说明 Django 接口视图关键点解析 路由配置 接口测试请求示例响应结果成功错误 优化建议1. 安全性2. 错误处理3. …...

珠海网站外包/二级不死域名购买

本文介绍Spring框架如何解析外部资源文件&#xff0c;仅参考官方文档《第7章 Resources》。 ***************************以下是正文的部分*************************** 通过Spring框架提供的对象可以获取诸如Http&#xff0c;Ftp&#xff0c;File&#xff0c;InputStream&…...

中国响应式网站案例/站长工具源码

数据分析--单因子选股策略、多因子选股策略&#xff08;选股&#xff09; 一、单因子选股策略--小市值策略 二、多因子选股策略--市值ROE&#xff08;净资产收益率&#xff09;选股策略 一、单因子选股策略--小市值策略 因子选股策略 因子&#xff1a;选择股票的某种标准 增长…...

公司建网站会计分录/优秀营销软文范例100字

linux删除用户的方法&#xff1a;首先进入系统创建一个用户&#xff1b;然后对该用户一些信息目录查看&#xff1b;最后正确删除用户&#xff0c;代码为【[rootlocalhost /]# userdel -r haha】。本教程操作环境&#xff1a;linux5.9.8&#xff0c;DELL G3电脑。linux删除用户的…...

可以免费做商业网站的cms/网上怎么发布广告

混迹网络并且喜欢在线视频的朋友&#xff0c;作为一名“豆粉”&#xff0c;相信对“土豆网”的视频播客不会陌生&#xff0c;尽管在线观看非常方便&#xff0c;但也不得不面临播放不够流畅、视频短片上传分享比较麻烦、想把片子的对白提取出来随时收听困难等问题&#xff0c;其…...

南昌做网站多少钱/西安网站建设推广优化

1. 编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积. 实现思路及关键代码&#xff1a;1) 编写一个圆类Circle,该类拥有&#xff1a;a) 一个成员变量,radius(私有,浮点型);//存放圆的半径b) 两个构造方法(无参、有参…...

做soho的网站/国际新闻热点事件

在日常办公室中如何添加本地打印机&#xff0c;打印机是必不可少的设备&#xff0c;但是有时将打印机连接到计算机时会遇到很多问题. 连接本地打印机对于我们的工作效率非常重要. 让我们看一下如何添加打印机.无法将打印机添加到win10系统&#xff0c;如下所示:添加打印机时&am…...