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

做图赚钱的网站旅游时政热点新闻

做图赚钱的网站,旅游时政热点新闻,合肥网络公司 网站建设,网络营销模式有几种本篇是多路复用的第五篇#xff0c;主要来讲解epoll的水平触发和边缘触发是怎么回事。一、概念介绍EPOLL事件有两种模型#xff0c;水平出发和边缘触发#xff0c;如下所示#xff1a;1. Level Triggered (LT) 水平触发1. socket接收缓冲区不为空 有数据可读 读事件一直触发… 本篇是多路复用的第五篇主要来讲解epoll的水平触发和边缘触发是怎么回事。一、概念介绍EPOLL事件有两种模型水平出发和边缘触发如下所示1. Level Triggered (LT) 水平触发1. socket接收缓冲区不为空 有数据可读 读事件一直触发2. socket发送缓冲区不满 可以继续写入数据 写事件一直触发备注符合思维习惯epoll_wait返回的事件就是socket的状态例子介绍1. accept一个连接添加到epoll中监听EPOLLIN事件2. 当EPOLLIN事件到达时read fd中的数据并处理3. 当需要写出数据时把数据write到fd中如果数据较大无法一次性写出那么在epoll中监听EPOLLOUT事件4. 当EPOLLOUT事件到达时继续把数据write到fd中如果数据写出完毕那么在epoll中关闭EPOLLOUT事件2. Edge Triggered (ET) 边沿触发1. socket的接收缓冲区状态变化时触发读事件即空的接收缓冲区刚接收到数据时触发读事件2. socket的发送缓冲区状态变化时触发写事件即满的缓冲区刚空出空间时触发读事件备注仅在状态变化时触发事件例子介绍1. accept一个一个连接添加到epoll中监听EPOLLIN|EPOLLOUT事件2. 当EPOLLIN事件到达时read fd中的数据并处理read需要一直读直到返回EAGAIN为止3. 当需要写出数据时把数据write到fd中直到数据全部写完或者write返回EAGAIN4. 当EPOLLOUT事件到达时继续把数据write到fd中直到数据全部写完或者write返回EAGAIN3.LT和ET两者比较1. 从ET的处理过程中可以看到ET的要求是需要一直读写直到返回EAGAIN否则就会遗漏事件。ET的编程可以做到更加简洁某些场景下更加高效但另一方面容易遗漏事件容易产生bug。2. LT的处理过程中直到返回EAGAIN不是硬性要求但通常的处理过程都会读写直到返回EAGAIN但LT比ET多了一个开关EPOLLOUT事件的步骤。LT的编程与poll/select接近符合一直以来的习惯不易出错。二 、内核调度实现方式在epoll_wait的时候阻塞等待事件发生 事件发生时通过回调挂到ready list链表中epoll_wait返回 处理ready list, 返回事件给调用者此时ET模式已经将事件从ready list中删除LT模式中还存在此时假设应用程序处理完了事件 再次epoll_wait.  ET模式继续阻塞LT模式由于ready list中依然存在事件则不会阻塞 对这些socket调用poll方法获取最新的事件信息如果确认没事件了才会删除。三、 水平触发和边缘触发的常见问题1. 水平触发的问题不必要的唤醒内核收到一个新建连接的请求内核由于 “惊群效应” 唤醒两个正在 epoll_wait() 的线程 A 和线程 B线程Aepoll_wait() 返回线程Bepoll_wait() 返回线程A执行 accept() 并且成功线程B执行 accept() 失败accept() 返回 EAGAIN2. 边缘触发的问题不必要的唤醒以及饥饿1)不必要的唤醒1.内核收到第一个连接请求。线程 A 和 线程 B 两个线程都在 epoll_wait() 上等待。由于采用边缘触发模式所以只有一个线程会收到通知。这里假定线程 A 收到通知2.线程Aepoll_wait() 返回3.线程A调用 accpet() 并且成功4.内核此时 accept queue 为空所以将边缘触发的 socket 的状态从可读置成不可读5.内核收到第二个建连请求6.内核此时由于线程 A 还在执行 accept() 处理只剩下线程 B 在等待 epoll_wait()于是唤醒线程 B。7.线程A继续执行 accept() 直到返回 EAGAIN8.线程B执行 accept()并返回 EAGAIN此时线程 B 可能有点困惑(“明明通知我有事件结果却返回 EAGAIN”)9.线程A再次执行 accept()这次终于返回 EAGAIN2)饥饿1.内核接收到两个建连请求。线程 A 和 线程 B 两个线程都在等在 epoll_wait()。由于采用边缘触发模式只有一个线程会被唤醒我们这里假定线程 A 先被唤醒2.线程Aepoll_wait() 返回3.线程A调用 accpet() 并且成功4.内核收到第三个建连请求。由于线程 A 还没有处理完(没有返回 EAGAIN)当前 socket 还处于可读的状态由于是边缘触发模式所有不会产生新的事件5.线程A继续执行 accept() 希望返回 EAGAIN 再进入 epoll_wait() 等待然而它又 accept() 成功并处理了一个新连接6.内核又收到了第四个建连请求7.线程A又继续执行 accept()结果又返回成功参考文档https://blog.csdn.net/dongfuye/article/details/50880251https://www.zhihu.com/question/20502870https://blog.lucode.net/linux/epoll-tutorial.htmlhttps://plantegg.github.io/2019/12/09/epoll%E7%9A%84LT%E5%92%8CET/
http://wiki.neutronadmin.com/news/245217/

相关文章:

  • 重庆企业建站系统模板阿里云网站商城建设
  • 景区网站建设材料云主机建网站
  • 关于网站建设广告词重庆网站推广公司电话
  • 网站开发角色分类腾讯建设网站视频视频
  • 衡水seo网站建设优化排名东莞企业网站搭建制作
  • 做网站推广怎样才能省钱五华网站开发
  • 三合一企业网站模板app 推广
  • 天津 公司网站建设用python网站开发
  • 电商网站设计模板自己买服务器做网站
  • 网站项目策划书模板淘宝客网站虚拟主机
  • 浙江省住房和城乡建设局网站一个网站同时做百度和360 百度商桥都可以接收客户信息吗
  • 湖南网站建设策划室内空间设计网站推荐
  • 做网站的叫什么微网站 下载
  • 做安全题目是哪个网站营销词汇100个
  • 网站开发逻辑图如何开公众号微信公众平台
  • 想做一个网站个人业务网站建设
  • 做网站的素材包含哪些响应式品牌网站
  • 征求网站建设意见的通知如何做好网站推广
  • 郑州网站设计推荐南京高端网站建设公司哪家好
  • 怎么上传网站到空间用帝国cms做的网站首页
  • 上海明鹏建设集团有限公司网站网络文化有限公司网站建设策划书
  • 企业建立网站的优势企业vi设计欣赏
  • 手机网站打不开的解决方法WordPress的footer文件
  • 深圳网站优化技巧网站建设源码开发
  • 哪家微网站做的好北京的制作网站的公司有哪些
  • 淮北建网站网站访客
  • 网站模板 电器智能展厅设计公司
  • 湖南省邵阳建设局网站琳琅秀网站建设
  • 自己可以做网站推广吗孵化器网站平台建设
  • 焦作建设银行门户网站网站界面是什么做的