IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> EPOLL水平触发模式(EPOLLLT)和EPOLL边缘触发模式(EPOLLET) -> 正文阅读

[系统运维]EPOLL水平触发模式(EPOLLLT)和EPOLL边缘触发模式(EPOLLET)

epoll+线程池高并发服务器模型在测试的时候产生bug。

bug1:一个客户端连接,服务器却添加了多次业务。
bug2:很多消费者线程被占用 ,导致消费者线程扩容。

1、客户端一次请求,服务端却添加多次业务?

采用epoll监听socket的网络事件,某一时刻serverfd事件就绪 ,serverfd就会变成就绪态socket,需要处理serverfd上的事件,处理就绪的serverfd。clientfd就绪同理。无论是serverfd还是clientfd,变成就绪态的socket,我们一定要处理完就绪socket,serverfd处理就绪建立连接完成,clientfd处理就绪读取所有数据后处理业务完成。

epoll是主线程(生产者线程)调用去监听,serverfd就绪,主线程负责去添加一个业务,业务不是生产者线程处理的,而是消费者线程处理,主线程添加完业务开始第二轮监听,主线程生产者负责监听就绪,普通线程消费者负责处理完就绪,但是从任务投递到取出任务再到任务处理完毕,这之间是有一定的空白期,可以理解为sockfd就绪处理不及时。导致了这个bug。

epoll可以选择两种监听模式去监听socket上的事件
第一种水平触发模式监听
默认的监听模式,所有socket默认都是水平触发监听模式,监听是epoll做的 ,但是可以对不同的sockfd设置不同的监听模式,算是一个socket属性。

水平触发:启动epoll监听,当socket产生就绪后,epoll会不停的检查就绪事件处理情况,如果使用者没有将就绪事件处理完毕,就无法进行新一轮监听。就绪事件未处理完毕,第二轮监听epoll_wait不会阻塞,epoll_wait立即返回 ,返回未处理完的就绪事件数量。

水平触发模式最大限度的保证每一轮就绪事件都被处理完毕。水平触发模式,使用者必须将每一轮的就绪事件处理好,才可以进行新一轮监听。

水平触发模式的优势:
可以协助督促使用者及时处理完所有sock事件,保证就绪事件处理的及时性和有效性。
水平触发模式弊端:
系统开销较大,epoll不停轮询检测事件处理情况,并反复向上层发送处理通知。

2、为什么消费者线程被占用?
水平触发模式导致epoll误判断,造成需要多次连接请求的假象,多次业务被多个消费者拿走,但是多个业务其实都是建立连接的。第一个消费者调用 accept连接成功,第二个消费者去连接就会阻塞,accept默认阻塞,消费者线程被占用,管理者就会去扩容。

第二种边缘触发模式监听
将所有被监听的sockfd改成边缘触发模式监听就可以解决我们的bug。

当第一轮监听,监听到sockfd就绪后,epoll只向使用者发送一次处理通知, 也仅有一次, 后续使用者是否处理就绪与epoll无关 , 随时都可以调用epoll_wait进行新一轮监听。

边缘触发模式的优势:
epoll开销较小,因为监听到就绪只返回一次就绪,发送一次通知,不会持续检测就绪处理进度。
边缘触发模式的弊端:
因为边缘模式下的sockfd就绪,epoll只反馈一次通知, 需要使用者及时将事件或事件数据处理掉,否则事件处理不及时,可能会出现事件数据丢失问题。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:55:01  更:2021-12-24 18:56:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:24:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码