当前位置:网站首页>epoll()无论涉及wait队列分析
epoll()无论涉及wait队列分析
2022-07-06 10:20:00 【全栈程序员站长】
大家好,又见面了,我是全栈君。
事件1. epfd-file->eventpoll->wq:
struct eventpoll { … wait_queue_head_t wq; //用于epoll_pwait()事件的等待队列 情况1分析 struct list_head rdllist; //就绪的fd队列 ready list struct rb_root rbr; //红黑树根,epitem->rbn为红黑树结构的节点 struct file *file; //epoll文件系统中构建的虚拟文件 … }; 主要用于epoll_pwait()时候,判定epfd-file->eventpoll->rdlist(就绪fd)是否为空。假设为空而且epoll_pwait()为堵塞调用。那么将当前进程将被挂到epfd-file->eventpoll->wq中,而且当前进程进入堵塞等待,直到rdlist非空的时候唤起epfd-file->eventpoll->poll_wait链表中的进程(相互排斥唤起和非相互排斥唤起?)唤起的回调函数默觉得wake_up_interruptible或者wake_up
情况2.被监听的fd->poll_wait
将被监听套接字fd在epoll期间构建的epitem和eppoll_entry epitem{ struct rb_node rbn; //epitem挂在rbtree上的节点信息 struct list_head rdllink; //假设fd就绪,将挂入ready list struct eventpoll *ep; //所属主eventpoll(维护rbtree rdllist poll_wait队列…) struct epoll_event event; //fd上监听的事件 } struct eppoll_entry { struct list_head llink; struct epitem *base; //所属epitem wait_queue_t wait; //作为一元素挂入被监听fd的wait队列中 wait_queue_head_t *whead; //被监听fd的等待队列。假设fd为socket。那么whead为sock->sk_sleep }; eppoll_entry主要完毕epitem和epitem事件发生时的callback函数之间的关联。 首先将eppoll_entry的whead指向fd的设备等待队列(同select中的wait_address)。 然后初始化eppoll_entry的base变量指向epitem。 最后通过add_wait_queue将epoll_entry挂载到fd的设备等待队列上。 当在设备硬件数据到来时,硬件中断处理函数中会唤醒该等待队列上等待的进程时,会调用唤醒函数ep_poll_callback(ep_poll_callback: 当fd上出发事件后。将epitem中的rdllink节点增加到readlist中(epfd-file->eventpoll->rdlist))
对照:
1和2对照,主要是等待队列的回调函数用处不同,1的回调是为了唤起处于等待事件而处于休眠的进程,2的回调是为了将epitem中的rdllink结构增加到ready list中。
參考: http://www.cnblogs.com/apprentice89/archive/2013/05/09/3068274.html http://www.cnblogs.com/apprentice89/p/3234677.html
版权声明:本文博客原创文章。博客,未经同意,不得转载。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117402.html原文链接:https://javaforall.cn
边栏推荐
- Compilation Principle -- C language implementation of prediction table
- Interesting - questions about undefined
- 编译原理——自上而下分析与递归下降分析构造(笔记)
- 带你穿越古罗马,元宇宙巴士来啦 #Invisible Cities
- On time and parameter selection of asemi rectifier bridge db207
- IP, subnet mask, gateway, default gateway
- UDP protocol: simple because of good nature, it is inevitable to encounter "city can play"
- Excel usage record
- Getting started with pytest ----- test case rules
- RB157-ASEMI整流桥RB157
猜你喜欢

Distill knowledge from the interaction model! China University of science and Technology & meituan proposed virt, which combines the efficiency of the two tower model and the performance of the intera

Introduction to the usage of model view delegate principal-agent mechanism in QT

IP, subnet mask, gateway, default gateway

從交互模型中蒸餾知識!中科大&美團提出VIRT,兼具雙塔模型的效率和交互模型的性能,在文本匹配上實現性能和效率的平衡!...

TOP命令详解

Appium automated test scroll and drag_ and_ Drop slides according to element position

UDP protocol: simple because of good nature, it is inevitable to encounter "city can play"

从交互模型中蒸馏知识!中科大&美团提出VIRT,兼具双塔模型的效率和交互模型的性能,在文本匹配上实现性能和效率的平衡!...

带你穿越古罗马,元宇宙巴士来啦 #Invisible Cities

win10系统下插入U盘有声音提示却不显示盘符
随机推荐
STM32+MFRC522完成IC卡号读取、密码修改、数据读写
【Swoole系列2.1】先把Swoole跑起来
FMT open source self driving instrument | FMT middleware: a high real-time distributed log module Mlog
首先看K一个难看的数字
Heavy! Ant open source trusted privacy computing framework "argot", flexible assembly of mainstream technologies, developer friendly layered design
D binding function
F200 - UAV equipped with domestic open source flight control system based on Model Design
Pytest learning ----- detailed explanation of the request for interface automation test
第三季百度网盘AI大赛盛夏来袭,寻找热爱AI的你!
Transport layer congestion control - slow start and congestion avoidance, fast retransmission, fast recovery
递归的方式
Will openeuler last long
MSF horizontal MSF port forwarding + routing table +socks5+proxychains
使用block实现两个页面之间的传统价值观
2022暑期项目实训(三)
STM32按键状态机2——状态简化与增加长按功能
I want to say more about this communication failure
高精度运算
Distiller les connaissances du modèle interactif! L'Université de technologie de Chine & meituan propose Virt, qui a à la fois l'efficacité du modèle à deux tours et la performance du modèle interacti
测试123