Linux高并发服务器(webserver)

news2024/11/24 5:30:04

一.有限状态机

它的转移函数表示系统从一个状态转移到另一个状态的条件

二.EPOLL 

在内核中创建一个数据,这个数据有两个比较重要的数据,一个是需要检测的文件描述符的信息(红黑树),一个双向链表,存放检测到数据发生改变的文件描述符信息

大致流程

1.创建epoll实例                                                                        epoll_create

2.将监听的文件描述符相关的检测信息添加到epoll实例中       epoll_ctl

3.检测epoll实例中变化了的个数                                               epoll_wait

4.接受客户端的连接                                                                  accept

5.通信 

详细(313条消息) 服务器(epoll模式)_未央吖的博客-CSDN博客 

三.EPOLL水平触发(LT模式下)

假设委托内核检测读事件 -> 检测fd的读缓冲区

读缓冲区有数据 -> epoll检测到了会给用户通知

        1.用户不读数据,数据一直在缓冲区,epoll会一直通知

        2.用户只读了一部分数据,epoll会通知

        3.缓冲区数据读完了,不通知了

四.工作原理

HTPP请求/响应的步骤

1.客户端连接到Web服务器

一个HTTP客户端,与Web服务器的HTTP端口建立TCP套接字连接,例如http://www.baidu.com

2.发送HTTP请求

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行,请求头部,空行和请求数据4部分组成

 

 

3.服务器接受请求并返回HTTP响应

HTTP响应由客户端读取,一个响应应由状态行,响应头部,空行,响应数据组成

 

 

4.释放连接TCP连接

若connection为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection为keepalive,则该连接会保持一段时间,该时间可以继续接收请求

5.客户端浏览器解析HTML内容

例如:

1.浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立 TCP 连接;

3. 浏览器发出读取文件( URL 中域名后面部分对应的文件)的 HTTP 请求,该请求报文作为 TCP 三 次握手的第三个报文的数据发送给服务器;

4. 服务器对浏览器请求作出响应,并把对应的 HTML 文本发送给浏览器;

5. 释放 TCP 连接;

6. 浏览器将该 HTML 文本并显示内容。

 五.Proactor模式

1.主线程往epolll内核事件表中注册socket上的读就绪事件

2.主线程调用epoll_wait等待socket上有数据可读

3.当socket上有数据可读时,epoll_wait通知主线程,主线程从socket循环读取数据,直到没有更多数据可读,然后将读取到的数据封装成一个请求对象插入请求队列。

4.睡眠在请求队列上的某个工作线程被唤醒,它获得请求对象并处理客户请求,然后往epoll内核事件表中注册socket上的写就绪事件

5.主线程调用epoll_wait等待socket可写

6.当socket可写时,epoll_wai通知主线程。主线程往socket上写入服务器处理客户请求的结果

 

六.线程池 

现称此中线程的数量应该和CPU数量差不多,当有新任务到来时,主线程通过某种方式选择线程池的子线程为之服务

 线程池中的线程数量最直接的限制因素是中央处理器(CPU)的处理器(processors/cores)的数量 N :如果你的CPU是4-cores的,对于CPU密集型的任务(如视频剪辑等消耗CPU计算资源的任务)来 说,那线程池中的线程数量最好也设置为4(或者+1防止其他因素造成的线程阻塞);对于IO密集 型的任务,一般要多于CPU的核数,因为线程间竞争的不是CPU的计算资源而是IO,IO的处理一 般较慢,多于cores数的线程将为CPU争取更多的任务,不至在线程处理IO的过程造成CPU空闲导 致资源浪费。

 

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

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

相关文章

Java类加载机制介绍

类加载机制的简单介绍 类加载机制是指将.class字节码文件读入到内存中。在运行时数据区中的方法区保留类的数据结构,在堆中创建一个与之对应的Class对象。 类的生命周期主要经历7个阶段:加载、验证、准备、解析、初始化、使用、卸载 其中从加载到初始化…

如何通俗易懂的解释无线通信中的那些专业术语!

这是一篇来自网络的非常经典的一篇老文,原作者不详,但非常值得一读! 香农定理 类比:城市道路上的汽车的车速和什么有关系?和道路的宽度有关系,和自己车的动力有关系,也其他干扰因素有关系&…

Unity接SDK - 极光推送

2021.09.09记录,2023发布,如有不对,还请包含。发晚了 如果想看Android原生接入JPush - SDK,移步Android原生集成JPush SDK_jpush android sdk v4.7.2 极光推送 - 接入 版本: Unity 2020.3.10f1 JPush - Unity 3…

linux系统安全及应用

目录一、账号安全控制1.1基本安全措施1.1.1系统账号的清理1.1.1.1将非登录用户的Shell设为/sbin/nologin1.1.1.2锁定长期不使用的账号1.1.1.3删除无用账号1.1.1.4锁定账号文件passwd、shadow1.1.2密码安全控制1.1.2.1设置密码有效期1.1.2.2要求用户下次登录时修改密码1.1.3命令…

服务端开发之Java秋招面试11

努力了那么多年,回头一望,几乎全是漫长的挫折和煎熬。对于大多数人的一生来说,顺风顺水只是偶尔,挫折、不堪、焦虑和迷茫才是主旋律。我们登上并非我们所选择的舞台,演出并非我们所选择的剧本。继续加油吧! 目录 1.MySQL的多版本并发控制具体实现过程?…

目标检测YOLO系列-YOLOVX运行步骤(推理、训练全过程)

下载项目:点击下载 进入项目根目录(通过cd命令) apex的安装与下载 下载apex git clone https://github.com/NVIDIA/apex进入apex目录 cd apex执行安装命令 python setup.py install首先安装相关的类库: pip install -i https://p…

深入学习MongoDB---1---入门篇+基础重点篇

MongoDB入门 MongDB作为NoSQL数据库之一,主要关注:灵活性、扩展性、高可用灵活性:NoSQL的特点就是反范式理论,为数据的水平扩展和字段的组织提供了巨大的便利高可用:天生就伴随副本集(从节点)的…

计数排序的实现

计数排序是非比较排序的一种,是对哈希直接定址法的变形应用,其操作步骤如下: 1.统计相同元素出现的次数。 2.根据统计结果将序列回收到原来的序列中。 拿一组重复元素较多的数组来举例子: 10 11 10 15 14 15…

Disruptor-源码解读

前言 Disruptor的高性能,是多种技术结合以及本身架构的结果。本文主要讲源码,涉及到的相关知识点需要读者自行去了解,以下列出: 锁和CAS伪共享和缓存行volatile和内存屏障 原理 此节结合demo来看更容易理解:传送门…

数云融合|新手入门,5分钟秒懂开源

目录一、开源软件开源领域的两大组织:FSF和OSI二、开源许可证开源意味着免费吗?三、开源技术应用领域四、总结一、开源软件 开源即开放源代码,他的核心是源代码公开,任何人都可以查看、使用、修改和分发。与之相对的是闭源&#…

js排序算法

排序算法 - jsjs交换两个值的三种方法方式1:算术运算方式2:ES6解构方式3:数组的特性冒泡排序实现思路图解bubbleSort参考视频选择排序实现思路图解selectionSort参考视频插入排序实现思路图解insertionSort参考视频js交换两个值的三种方法 方…

javaSccript---call()、 bind()、 apply()的区别

call()、apply()、bind() 都是用来重定义 this 这个对象的 语法: function.apply(thisArg, [argsArray])//argsArray 是一个可选的数组 function.call(thisArg, arg1, arg2, ...)//arg1、arg2、... 是将传递给函数的参数列表 function.bind(thisArg, arg1, arg2, ..…

Webstorm是什么软件?你了解吗

WebStorm 是一款由 JetBrains 开发的集成开发环境(IDE),它是专门为开发 Web 应用程序而设计的。它提供了许多功能,例如代码自动完成、错误突出显示、重构、调试、版本控制等,可以帮助开发人员提高效率和代码质量。WebS…

Vector 高性能日志收集工具

文章目录Vector 简介相关概念事件Data modelEvent typesLog eventsMetric eventsTraces组件构成源转换接收器PipelineBuffersBackpressureRolesAgentDaemonSidecarAggregatorTopology分布式集中式基于流Vector 简介 Vector 是一种高性能的可观察性数据管道,可让组织…

天梯赛练习集-L1-031到L1-040–python - java

文章目录PythonL1-031 到底是不是太胖了L1-032 Left-padL1-033 出生年L1-034 点赞L1-035 情人节L1-036 A乘以BL1-037 A除以BL1-038 新世界L1-039 古风排版L1-040 最佳情侣身高差JavaL1-031 到底是不是太胖了L1-032 Left-padL1-033 出生年L1-034 点赞L1-035 情人节L1-036 A乘以B…

ChatGPT入门必知必会

2023年是真正意义上的AI之年,因为ChatGPT 2007年,iPhone开启了智能手机时代,2023年,我们迎来了人工智能时代,我们正处于历史的大转折点上,这也许是启蒙运动级别的思想和社会转折,工业革命级别的…

5万元内最经济双卡4090深度学习方案

深度学习双卡4090攒机方案 znsoft 一枚快乐的炼丹师 AMD 7950x 双4090方案 不到5万,目前最经济的双卡人工智能服务器方案 主板: 华硕 x670EA 吹雪 3000元 CPU: amd 7950x 3500元 内存: 32G4 128G DDR5 800x4 3200元 机箱: 追…

【eMMC学习记录】emmc相关名词解释和基础概念

名词解释 NAND Flash:半导体闪存 HDD:机械硬盘 FW:固件 Peak Power:峰值功率 Active Power:读写功耗 Idle Power:空闲功耗 standby/sleep Power Dev Sleep Power:SSD内部休眠功耗 RAM:掉电丢失数据 FGT:浮栅晶体管 FormFactor:尺寸标准件 AFA:全闪存整列…

线段树之延迟数组_20230410

线段树 之 延迟数组 前言 线段树是一类特殊的完全二叉树,其本质是对递归过程信息的再处理和再记忆,线段树构造完成后,可以脱离原始数组或线性表,直接对线段树进行查询或更新操作即可。线段树的储存结构和堆结构类似,…

springboot——集成elasticsearch进行搜索并高亮关键词

目录 1.elasticsearch概述 3.springboot集成elasticsearch 4.实现搜索并高亮关键词 1.elasticsearch概述 (1)是什么: Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。 Lucene 可以被认为是迄今为止最先进、性能最好的…