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

深圳做二类医学学分的网站密云住房和城乡建设部网站首页

深圳做二类医学学分的网站,密云住房和城乡建设部网站首页,做网页和网站一样吗,网站建站公司多少钱注#xff1a;之前写过两篇关于epoll实现的文章#xff0c;但是感觉懂得了实现原理并不一定会使用#xff0c;所以又决定写这一系列文章#xff0c;希望能够对epoll有比较清楚的认识。是请大家转载务必注明出处#xff0c;算是对我劳动成果的一点点尊重吧。另外#xff0…注之前写过两篇关于epoll实现的文章但是感觉懂得了实现原理并不一定会使用所以又决定写这一系列文章希望能够对epoll有比较清楚的认识。是请大家转载务必注明出处算是对我劳动成果的一点点尊重吧。另外文中如果有不全面或者不正确的地方还请大家指出。也可以私信或者发邮件lvyilong316163.com 1. ET模式实现分析 1.1 ET和LT的实现区别 首先给出下面一张图这张图是从我之前的一篇博文——epoll实现分析中摘取并细化的。这张图对理解ET模式已经epoll的工作过程只管重要当然我自己总结出来后也感觉有的小成就在这里与大家分享。 注上图的poll不要理解成和select相似那个poll这是通过epoll_ctl调用的。 下面简要分析一下epoll的工作过程 (1) epoll_wait调用ep_poll当rdlist为空无就绪fd时挂起当前进程知道rdlist不空时进程才被唤醒。 (2) 文件fd状态改变buffer由不可读变为可读或由不可写变为可写导致相应fd上的回调函数ep_poll_callback()被调用。 (3) ep_poll_callback将相应fd对应epitem加入rdlist导致rdlist不空进程被唤醒epoll_wait得以继续执行。 (4) ep_events_transfer函数将rdlist中的epitem拷贝到txlist中并将rdlist清空。 (5) ep_send_events函数很关键它扫描txlist中的每个epitem调用其关联fd对用的poll方法图中蓝线。此时对poll的调用仅仅是取得fd上较新的events防止之前events被更新之后将取得的events和相应的fd发送到用户空间封装在struct epoll_event从epoll_wait返回。之后如果这个epitem对应的fd是LT模式监听且取得的events是用户所关心的则将其重新加入回rdlist图中蓝线否则ET模式不在加入rdlist。 具体代码 /* 扫描整个txlist链表... */ for (eventcnt  0, uevent  esed-events; !list_empty(head)  eventcnt  esed-maxevents;) { /* 取出第一个成员 */ epi  list_first_entry(head, struct epitem, rdllink); /* 然后从链表里面移除 */ list_del_init(epi-rdllink); /* 读取events,  * 注意events我们ep_poll_callback()里面已经取过一次了, 为啥还要再取? * 1. 我们当然希望能拿到此刻的最新数据, events是会变的~ * 2. 不是所有的poll实现, 都通过等待队列传递了events, 有可能某些驱动压根没传 * 必须主动去读取. */ revents  epi-ffd.file-f_op-poll(epi-ffd.file, NULL)  epi-event.events; if (revents) { /* 将当前的事件和用户传入的数据都copy给用户空间, * 就是epoll_wait()后应用程序能读到的那一堆数据. */ if (__put_user(revents, uevent-events) || __put_user(epi-event.data, uevent-data)) { /* 如果copy过程中发生错误, 会中断链表的扫描, * 并把当前发生错误的epitem重新插入到ready list. * 剩下的没处理的epitem也不会丢弃, 在ep_scan_ready_list() * 中它们也会被重新插入到ready list */ list_add(epi-rdllink, head); return eventcnt ? eventcnt : -EFAULT; } eventcnt; uevent; if (epi-event.events  EPOLLONESHOT) epi-event.events  EP_PRIVATE_BITS; else if (!(epi-event.events  EPOLLET)) { /* * If this file has been added with Level * Trigger mode, we need to insert back inside * the ready list, so that the next call to * epoll_wait() will check again the events * availability. At this point, noone can insert * into ep-rdllist besides us. The epoll_ctl() * callers are locked out by * ep_scan_ready_list() holding mtx and the * poll callback will queue them in ep-ovflist. */ /* 嘿嘿, EPOLLET和非ET的区别就在这一步之差呀~ * 如果是ET, epitem是不会再进入到readly list, * 除非fd再次发生了状态改变, ep_poll_callback被调用. * 如果是非ET, 不管你还有没有有效的事件或者数据, * 都会被重新插入到ready list, 再下一次epoll_wait * 时, 会立即返回, 并通知给用户空间. 当然如果这个 * 被监听的fds确实没事件也没数据了, epoll_wait会返回一个0, * 空转一次. */ list_add_tail(epi-rdllink, ep-rdllist); } } } 说明 l epoll_wait返回的条件是rdlist不空而使rdlist不空的途径有两个分别对应图中的红线和蓝线。 l ET和LT模式下的epitem都可以通过红线方式加入rdlist从而唤醒epoll_wait但LT模式下的epitem还可以通过蓝线方式重新加入rdlist唤醒epoll_wait。所以ET模式下fd就绪通过红线加入rdlist只会被通知一次而LT模式下只要满足相应读写条件就返回就绪通过蓝线加入rdlist。 l ET事件发生仅通知一次的原因是只被添加到rdlist中一次而LT可以有多次添加的机会。 1.2 两种加入rdlist途径的不同 下面我们来分析一下图中两种将epitem加入rdlist方式也就是红线和蓝线的区别。 l 红线fd状态改变是才会触发。那么什么情况会导致fd状态的改变呢 对于读取操作 (1) 当buffer由不可读状态变为可读的时候即由空变为不空的时候。 (2) 当有新数据到达时即buffer中的待读内容变多的时候。 对于写操作 (1) 当buffer由不可写变为可写的时候即由满状态变为不满状态的时候。 (2) 当有旧数据被发送走时即buffer中待写的内容变少得时候。 l 蓝线fd的events中有相应的时间位置1即会触发。那么什么情况下会改变events的相应位呢 对于读操作 (1) buffer中有数据可读的时候即buffer不空的时候fd的events的可读为就置1。 对于写操作 (1) buffer中有空间可写的时候即buffer不满的时候fd的events的可写位就置1。 说明红线是时间驱动被动触发蓝线是函数查询主动触发。
http://www.sadfv.cn/news/361618/

相关文章:

  • 旅游网站开发报价单眉山网站设计
  • 商城类网站能做响应式设计吗网址我的上网主页
  • 如何做链接淘宝客的网站在线获取颜色代码网站
  • 营口旅游网站开发万网空间存放两个网站
  • 网站像素大小教育培训机构管理系统
  • 网站空间如何搬家dedecms网站制作教程
  • 襄阳营销网站建设网站二级域名是什么
  • 网站域名备案变更郑州专门做网站的公司有哪些
  • 网站开发多久完成北京市工程建设交易中心
  • 建设部网站221号文件wordpress更改路径
  • 河南网站排名目前做的比较好的法律网站有哪些
  • 网站 默认页宁夏固原建设网站
  • 常州辉煌网络网站建设中铁二局深圳公司官网
  • 河北辛集住房和城乡建设厅网站南通e站网站建设
  • 广州网站设计企业企业网站建设维护
  • 如何查看网站的访问量重庆官网seo分析
  • saas系统是什么模式天津百度seo代理
  • 金华做网站的公司平台类网站有哪些
  • 网站的用户注册怎么做末年人免费观看网站
  • 商品网站建设实验报告网站建设的费用计入
  • 建设官方网站首页河北邯郸做网站
  • 海淘网站建设的目的昆山网站建设公司哪家好
  • 如何做自动交易网站现在pc端网站开发用的什么技术
  • 茶社网站开发与设计的开题报告合肥网络推广公司乐蜂
  • 杭州移动公司网站乐清本地网站
  • 网站备案完了怎么做wordpress显示分类
  • 西安专业网站排名优化苏州现在可以正常进入吗
  • 百度收录不到我的网站东莞网站优化多少钱
  • 公司设计网站需要多久wordpress关闭注册邮箱验证码
  • 鼠标放到一级导航时才显示网站二级导航 鼠标离开时不显示 怎么控制网站开发需要什么专业知识