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

1.6 epoll实战使用

文章目录

  • 1、连接池
  • 2、epoll两种工作模式
    • 2.1、LT模式
    • 2.2、ET模式
  • 3、后端开发面试题
  • 4、epoll验证

1、连接池

在这里插入图片描述

将每一个套接字和一块内存进行绑定,连接池就是一个结构体数组,通过链表来维护一个空闲连接。
1、ngx_get_connection(int fd)从空闲链表取一个空闲连接,然后指向头的指针指向后面一个元素,然后将sock对应给到这个空闲连接中,然后返回这个结构体指针。
2、ngx_epoll_add_event将监听套接字,添加到红黑树上,

3、ngx_epoll_process_events内容:
事件驱动:通过获取到的事件,调用适当的函数,让整个程序干活

2、epoll两种工作模式

2.1、LT模式

LT也叫水平触发,这种工作模式是,低速模式(效率差)–默认缺省用次模式,来一个事件,不处理的话,就会一直触发(也就是循环调epoll_wait的时候每次都会有这个事件),能保证不会丢失事件,因为内核会反复通知。

2.2、ET模式

ET边沿触发,这种工作模式是,高速模式(效率高),只能对非阻塞套接字用,来一个事件,内核只通知一次(不管是否处理,内核都不在通知你)只需要增加EPOLLET(epl_ev.events)

事件驱动框架
在这里插入图片描述

就是由一些事件源(三次握手内核通知,事件发生源就是客户端),通过事件收集器和事件分发器(调用函数处理)【事件收集器:epoll_wait()】【accept() read()都属于事件处理函数】,

3、后端开发面试题

问题:使用epoll模型,水平触发模式,当socket可写时,会不停的触发可写事件,怎么处理?
1、需要向socket中写的时候才把socket加入红黑树中,等待可写事件,接受可写事件之后调用write()函数,写完之后,将socket移除红黑树。
2、开始不把socket加入epoll,需要写数据的时候,直接调用write函数,如果返回EAGAIN把socket加入epoll中,全部数据写完移除epoll。

4、epoll验证

将套接字设置为非阻塞,然后将epoll_wait设置为阻塞,会阻塞在那里等有事件来才会往下走,如果是水平触发,要是没有处理就有一直触发

#include <unistd.h>
#include <sys/wait.h>
#include <strings.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <sys/time.h>
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/select.h>
#include <poll.h>
#include <sys/epoll.h>
#include <sys/ioctl.h>
#define OPEN_MAX 1024void epollTest()
{// 1、创建socketint fd = socket(AF_INET,SOCK_STREAM,0);if(fd<0){printf("socket err\n");return;}// 设置TIME_WAIT状态导致bind失败int reuseaddr = 1;if(setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(const void*)&reuseaddr,sizeof(reuseaddr)) == -1){printf("setsockopt err\n");return;}// 设置为非阻塞int nb=1; //0:清除,1:设置  if(ioctl(fd, FIONBIO, &nb) == -1){printf("ioctl err\n");return;}// bind listenstruct sockaddr_in serv_addr;bzero(&serv_addr,sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(9999);serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);if(bind(fd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0){printf("bind err\n");return;}listen(fd,128);// 创建红黑树int epoll_fd = epoll_create(OPEN_MAX);if(epoll_fd == -1){printf("epoll_create err");return;}// 添加到红黑树种struct epoll_event epl_ev;epl_ev.events = EPOLLIN;epl_ev.data.fd = fd;if(epoll_ctl(epoll_fd,EPOLL_CTL_ADD,fd,&epl_ev) == -1){printf("epoll_ctl err");return;}// 等待事件struct epoll_event ep[OPEN_MAX];while(true){int nready = epoll_wait(epoll_fd,ep,OPEN_MAX,5000);printf("nready:%d\n",nready);for(int i=0;i<nready;i++){if(!(ep[i].events & EPOLLIN))   // 不是读事件{continue;}else{if(ep[i].data.fd == fd){printf("连接事件\n");}}}}}int main()
{epollTest();return 0;
}

相关文章:

1.6 epoll实战使用

文章目录1、连接池2、epoll两种工作模式2.1、LT模式2.2、ET模式3、后端开发面试题4、epoll验证1、连接池 将每一个套接字和一块内存进行绑定&#xff0c;连接池就是一个结构体数组&#xff0c;通过链表来维护一个空闲连接。 1、ngx_get_connection(int fd)从空闲链表取一个空闲…...

JDK定时、Spring定时、时间轮定时小结

Timer使用一个线程&#xff0c;一个小根堆。线程执行根上的任务&#xff0c;小根堆会根据执行时间戳重新调整&#xff0c;根上的任务是下一个执行的任务。 DelayedQueue维护一个优先级队列&#xff0c;本质也是一个数组方式的堆。任务生成时也有时间戳&#xff0c;只提供存储。…...

关于cFosSpeed如何配置

cFosSpeed配置一、检查Calibration Done情况二、优化Ping时间和线路校准三、测网速四、cFosSpeed控制台五、配置参数一、检查Calibration Done情况 安装完毕&#xff0c;激活成功后。 右键------>选项------>设置&#xff0c; 打开适配器信息&#xff0c;查看Calibra…...

YOLOV5输出的txt里面有什么猫腻(用于图像分类竞赛中提升图像信息密度)

背景概括&#xff1a; kaggle最近举办了一场医学乳腺癌检测的比赛&#xff08;图像分类&#xff09; 比赛官网地址 给的数据是dcm的专业的医学格式&#xff0c;自己通过DICOM库转为png后&#xff0c;发现该图像胸部不同的患者乳腺大小不一&#xff0c;简言之乳腺的CT有效图在…...

vue+axios常用操作

vueaxios常用操作vue2axios请求拦截依赖项http.jsvue2axios设置请求头依赖项http.js获取并设置请求头api.jsa.vuevue2axios请求拦截 依赖项 “vue”: “^2.6.11” “axios”: “^0.21.0” “element-ui”: “^2.13.2”(做弹窗提示&#xff0c;可以不用) http.js // 引入axi…...

Xshell连接阿里云服务器搭建网站

一、建设一个网站的基本要求 申请一个独立的域名申请一台云服务器ECS在服务器上安装网站环境&#xff0c;如&#xff1a;Apache发布网站内容至云服务器将第一步注册的域解析至云服务器的外网IP地址进行ICP备案 二、用户访问网站的过程 在浏览器上输入域名浏览器自动调用DNS&…...

嵌入式ARM设计编程(三) 处理器工作模式

文章和代码已归档至【Github仓库&#xff1a;hardware-tutorial】&#xff0c;需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 一、实验目的 &#xff08;1&#xff09; 通过实验掌握学会使用msr/mrs 指令实现ARM 处理器工作模式的切换&#xff0c;观察不…...

jenkins构建报错:.java:16: error: package javafx.util does not exist

1、报错 jenkins构建报错 package javafx.util does not exist2、报错原因 代码发现使用了javafx类&#xff0c;该类仅存在OracleJDK中&#xff0c;OpenJDK中没有该类。 jenkins服务器安装的是openjdk 3、卸载OpenJDK 具体不概述了 4、离线安装OracleJDK 1&#xff09;…...

【第三天】策略模式

前言 策略模式是针对不同算法给出不同实现的方式&#xff0c;解耦代码&#xff0c;减少代码中if.....else代码书写量。 一、策略模式UNL类图 对象角色Context 上下文对象&#xff0c;依赖Strategy接口&#xff0c;一般像Context传入Strategy实现对象&#xff0c;执行策略方法…...

以应用为导向,看声纹识别中的音频伪造问题

声纹识别&#xff0c;又称说话人识别&#xff0c;是根据语音信号中的声纹特征来识别话者身份的过程&#xff0c;也是一种重要的生物认证手段。历经几十年的研究&#xff0c;当前声纹识别系统已取得了令人满意的性能表现&#xff0c;并在安防、司法、金融、家居等诸多领域中完成…...

RocketMQ源码分析之CommitLog消息存储机制

1、消息存储分析 1.1 DefaultMessageStore 概要 其核心属性如下&#xff1a; messageStoreConfig 存储相关的配置&#xff0c;例如存储路径、commitLog文件大小&#xff0c;刷盘频次等等。CommitLog commitLog comitLog 的核心处理类&#xff0c;消息存储在 commitlog 文件中…...

亿级高并发电商项目-- 实战篇 --万达商城项目 九(广告服务、安装Redis优化用户缓存、广告服务实现类等开发)

专栏&#xff1a;高并发---分布式项目 亿级高并发电商项目-- 实战篇 --万达商城项目搭建 一 &#xff08;商家端与用户端功能介绍、项目技术架构、数据库表结构等设计&#xff09; 亿级高并发电商项目-- 实战篇 --万达商城项目搭建 一 &#xff08;商家端与用户端功能介绍、项…...

FreeMarker生成word文档,固定word模板

该方法也就是通过freemarker生成固定的word文档&#xff0c;动态的word模板布局不能用该方法。 也就是必须有一个固定的模板文档是.ftl类型 如果初始文件为 需要手动改为&#xff1a; 也就是所有需要替换的地方&#xff0c;都需要有${XX}替换。 主要步骤为&#xff1a; 将 w…...

前端必学的CSS制作Switch动画开关按钮演示

目录 前言 CSS 制作的 Switch 动画开关按钮 1.Html构建 2.CSS编写 3.完整代码 index.html文件 style.css文件 总结 前言 随着前端技术的不断发展与进步&#xff0c;界面交互的样式要求和美感也越来越高&#xff0c;很多网页的交互都加上了css动画,这里作者给大家分享一…...

C语言运算符(左值右值,基本运算符)

一.数据对象&#xff0c;左值&#xff0c;右值&#xff0c;运算符 数据对象&#xff1a;用于存储值的数据存储区域统称&#xff0c;而使用变量名是标识对象的一种方法&#xff08;还有指针&#xff0c;后面会教的&#xff09; 左值&#xff1a;用于标识特定数据对象的名称或表…...

【自学Python】一文读懂Python字符串是否是数字

Python字符串是否是数字 Python字符串是否是数字教程 在开发过程中&#xff0c;有时候我们需要判断一个 字符串 是否是 数字 形式&#xff0c;在 Python 中&#xff0c;判断字符串是否只由数字组成的函数为 isnumeric() 。 isnumeric() 函数只能判断 unicode 字符串&#xf…...

【PTA Advanced】1146 Topological Order(C++)

目录 题目 Input Specification: Output Specification: Sample Input: Sample Output: 思路 C 知识UP 代码 题目 This is a problem given in the Graduate Entrance Exam in 2018: Which of the following is NOT a topological order obtained from the given dire…...

基于stm32mp157的嵌入式linux+qt项目实战物联网毕业设计选题之智慧医疗项目

stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器&#xff0c;集成2个Cortex-A7核和1个Cortex-M4 核&#xff0c;A7核上可以跑Linux操作系统&#xff0c;M4核上可以跑FreeRT…...

Java实现邮件发送功能

确定发件人邮箱和密码某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”) 对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码) 确认发件人邮箱的 SMTP 服务器地址发件人邮箱的 SMTP 服务器地址, 必须…...

springboot+vue简单对接支付宝完整流程

源码 前端 vue-demo https://www.aliyundrive.com/s/dmnY8G6N6RM 点击链接保存&#xff0c;或者复制本段内容&#xff0c;打开「阿里云盘」APP &#xff0c;无需下载极速在线查看&#xff0c;视频原画倍速播放。 后端 aliPay https://www.aliyundrive.com/s/H2JFBjGWuf2 …...

利用快马平台快速构建高清乱码生成器:编码错误可视化原型开发指南

最近在调试一个多语言网站时&#xff0c;遇到了各种编码问题导致的乱码现象。为了更直观地理解不同编码错误的表现形式&#xff0c;我尝试用InsCode(快马)平台快速搭建了一个高清乱码生成器&#xff0c;效果出乎意料地好。下面分享下这个项目的实现思路和具体操作&#xff1a; …...

HUNYUAN-MT企业级Java集成指南:构建高并发翻译微服务

HUNYUAN-MT企业级Java集成指南&#xff1a;构建高并发翻译微服务 1. 引言 想象一下&#xff0c;你负责的电商平台刚刚接到一个来自海外的百万级订单&#xff0c;但商品详情、用户手册全是中文。市场团队急等着把上万页的产品资料翻译成十几种语言&#xff0c;时间窗口只有短短…...

美军“转正”美科技公司AI系统,专家解读

来源&#xff1a;环球时报【环球时报报道 记者 刘扬】据路透社等外媒近日报道&#xff0c;五角大楼将把美国科技公司Palantir的人工智能&#xff08;AI&#xff09;系统Maven列为“正式在编项目”&#xff0c;使美军多军种将该公司的相关技术用于军事领域。五角大楼强调&#x…...

Win11Debloat系统优化工具:从问题诊断到长效维护的完整实践指南

Win11Debloat系统优化工具&#xff1a;从问题诊断到长效维护的完整实践指南 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改…...

PyTorch 2.8 + CUDA 12.4镜像实战教程:适配10核CPU+120GB内存的完整配置

PyTorch 2.8 CUDA 12.4镜像实战教程&#xff1a;适配10核CPU120GB内存的完整配置 1. 镜像概述与环境准备 1.1 核心特性介绍 这个深度优化镜像基于RTX 4090D 24GB显卡和CUDA 12.4驱动构建&#xff0c;专为高性能深度学习任务设计。主要特点包括&#xff1a; 硬件适配&#…...

BFR算法实战:如何高效处理大规模数据聚类

1. BFR算法&#xff1a;大数据时代的聚类利器 第一次接触BFR算法是在处理一个电商平台的用户行为数据集时。当时我们遇到了一个棘手的问题&#xff1a;服务器内存只有32GB&#xff0c;但需要处理的用户行为日志却超过了200GB。传统的K-means算法完全无法应对这种规模的数据&…...

ICML 2023亚马逊论文速览:自适应计算与差分隐私

机器学习 某机构在ICML 2023会议论文速览 在一系列主题中&#xff0c;某机构的研究融合了理论与实践的探索。 会议 ICML 2023 在今年的国际机器学习大会&#xff08;ICML&#xff09;上&#xff0c;某机构的研究人员发表了多篇关于赌博机问题和差分隐私的论文&#xff0c;这两个…...

CAD工程师必看:如何用De Boor算法优化B样条曲线设计(附NURBS对比)

CAD工程师必看&#xff1a;如何用De Boor算法优化B样条曲线设计&#xff08;附NURBS对比&#xff09; 在工业设计领域&#xff0c;曲线建模的精度与效率直接决定了产品从概念到成品的转化质量。作为CAD工程师&#xff0c;我们常常需要在设计自由度和计算效率之间寻找平衡点——…...

Cadence原理图库‘幽灵版本’冲突全解析:从ORDBLL-1125报错看Cache机制与避坑指南

Cadence原理图库‘幽灵版本’冲突全解析&#xff1a;从ORDBLL-1125报错看Cache机制与避坑指南 在电子设计自动化&#xff08;EDA&#xff09;领域&#xff0c;Cadence作为行业标杆工具链&#xff0c;其原理图设计模块被广泛应用于各类复杂电路开发。然而&#xff0c;许多资深用…...

EcomGPT-中英文-7B电商模型与数据库课程设计:构建智能电商问答知识库

EcomGPT-中英文-7B电商模型与数据库课程设计&#xff1a;构建智能电商问答知识库 电商平台每天要处理海量的用户咨询&#xff1a;“这件衣服有M码吗&#xff1f;”、“这个手机和昨天看的那个有什么区别&#xff1f;”、“帮我推荐几款适合送长辈的茶叶”。传统客服要么忙不过…...