当前位置: 首页 > 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 的一些常…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...