观察器

  1. IO
    ev_io_init (ev_io *, callback, int fd, int events) ev_io_set (ev_io *, int fd, int events)

    I/O watchers check whether a file descriptor is readable or writable in each iteration of the event loop, or, more precisely, when reading would not block the process and writing would at least be able to write some data.
    NOTE :

  • 触发方式:level-triggering(水平触发 LT)
  • 每个fd可以注册尽可能多的watchers, fd要尽可能设置为NOBLOCKING

ps: 什么叫水平触发和边缘触发?

水平触发(level-triggered,也被称为条件触发)LT: 只要满足条件,就触发一个事件(只要有数据没有被获取,内核就不断通知你)
边缘触发(edge-triggered)ET: 每当状态变化时,触发一个事件。
“举个读socket的例子,假定经过长时间的沉默后,现在来了100个字节,这时无论边缘触发和条件触发都会产生一个read ready notification通知应用程序可读。应用程序读了50个字节,然后重新调用api等待io事件。这时条件触发的api会因为还有50个字节可读,从而> 立即返回用户一个read ready notification。而边缘触发的api会因为可读这个状态没有发生变化而陷入长期等待。因此在使用边缘触发的api时,要注意每次都要读到socket返回EWOULDBLOCK为止,否则这个socket就算废了。而使用条件触发的api 时,如果应用程序不需> 要写就不要关注socket可写的事件,否则就会无限次的立即返回一个write ready notification。大家常用的select就是属于条件触发这一类,长期关注socket写事件会出现CPU 100%的毛病。

最新文章

  1. Ruby Gem命令详解
  2. android studio 导入项目太慢(卡条)
  3. NYOJ 743
  4. C#网络编程之---TCP协议的同步通信(二)
  5. 浅析Spring中的注解
  6. Objective-C 一些概念
  7. UNIX 信号基本概念
  8. tomcat启动
  9. Codeforces Round #479 (Div. 3) A. Wrong Subtraction
  10. Java数组的复制全解
  11. bzoj 4565 状压区间dp
  12. 超时导致的Galera节点加入集群失败
  13. asp.net mvc 多文件上传
  14. 基于CentOS搭建基于 ZIPKIN 的数据追踪系统
  15. 如何知道我 的python是32位还是64位的?
  16. [原] eclipse 无法找到 run as junit
  17. C语言发送邮件
  18. 深入理解JAVA虚拟机阅读笔记6——线程安全与锁优化
  19. 【10.5校内测试】【DP】【概率】
  20. Doing Homework---hdu1074(状态压缩&&记忆化搜索)

热门文章

  1. Jmeter创建一个简单的http接口用例
  2. java反射技术实例
  3. html5--5-15 绘制阴影
  4. 【错误信息】springMVC No mapping found for HTTP request with URI
  5. configure: error: APR not found. Please read the documentation
  6. Spring 事务管理高级应用难点剖析: 第 1 部分
  7. [SHOI 2007] 善意的投票
  8. c++再探string之eager-copy、COW和SSO方案
  9. cf 424
  10. JS实现获取汉字首字母拼音、全拼音及混拼音的方法