当前位置:网站首页>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
边栏推荐
- Pourquoi Li shufu a - t - il construit son téléphone portable?
- Five data structures of redis
- FMT开源自驾仪 | FMT中间件:一种高实时的分布式日志模块Mlog
- Compilation principle - top-down analysis and recursive descent analysis construction (notes)
- STM32+HC05串口蓝牙设计简易的蓝牙音箱
- 推荐好用的后台管理脚手架,人人开源
- Release of the sample chapter of "uncover the secrets of asp.net core 6 framework" [200 pages /5 chapters]
- 《ASP.NET Core 6框架揭秘》样章发布[200页/5章]
- 78 year old professor Huake has been chasing dreams for 40 years, and the domestic database reaches dreams to sprint for IPO
- Kivy tutorial: support Chinese in Kivy to build cross platform applications (tutorial includes source code)
猜你喜欢

The third season of Baidu online AI competition is coming in midsummer, looking for you who love AI!

Getting started with pytest ----- allow generate report

【Swoole系列2.1】先把Swoole跑起来

Compilation Principle -- C language implementation of prediction table

declval(指导函数返回值范例)

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

Coco2017 dataset usage (brief introduction)

Implementation of queue

Excellent open source fonts for programmers

阿里云国际版ECS云服务器无法登录宝塔面板控制台
随机推荐
Heavy! Ant open source trusted privacy computing framework "argot", flexible assembly of mainstream technologies, developer friendly layered design
Pytest learning ----- detailed explanation of the request for interface automation test
Declval (example of return value of guidance function)
面试突击62:group by 有哪些注意事项?
微信小程序中给event对象传递数据
当保存参数使用结构体时必备的开发技巧方式
node の SQLite
容器里用systemctl运行服务报错:Failed to get D-Bus connection: Operation not permitted(解决方法)
[Android] kotlin code writing standardization document
转载:基于深度学习的工业品组件缺陷检测技术
STM32+ESP8266+MQTT协议连接OneNet物联网平台
HMS Core 机器学习服务打造同传翻译新“声”态,AI让国际交流更顺畅
最新财报发布+天猫618双榜第一,耐克蓄力领跑下个50年
Fleet tutorial 13 basic introduction to listview's most commonly used scroll controls (tutorial includes source code)
Maixll dock camera usage
2019阿里集群数据集使用总结
Jerry's updated equipment resource document [chapter]
阿里云国际版ECS云服务器无法登录宝塔面板控制台
2022暑期项目实训(一)
d绑定函数