1、timerfd

timerfd是定时器描述符,通过timerfd_create()来创建它,timerfd_settime()来设置定时器时间,当时间到期定时器文件描述符就可读,所以能够在select/poll/epoll场景下使用。

2、eventfd

eventfd是事件描述符,使用eventfd()来创建它,可以把它当做一个文件描述符,对它做read、write、select/poll/epoll、close操作,因为它有8个字节的读、写缓冲区。比如使用write()向事件描述符写入8个字节的数据来通知事件,使用read()来等待事件。所以其实它类似一个pipe管道,但它比管道更精简,因为它主要用来线程间通信。

比如对于epoll程序,我们在A线程里通过epoll_ctl将连接socket加入到epoll监听,而epoll_wait是在B线程里,虽然epoll函数是线程安全的,但通用或者说是更保险的做法是不在A线程里epoll_ctl,而是通过一个eventfd将epoll_wait唤醒(将eventfd加入epoll监听其可读,A线程往eventfd里写),在B线程里进行epoll_ctl。

待确认的两个问题:

在write之后没有read,但是又write新的数据,那么再read到的是这两次的8个字节的和?

如果read到的长度小于8字节会返回EINVAL错误?

最新文章

  1. KMP算法分析
  2. php使用正则过滤js脚本代码实例
  3. 高可用与负载均衡(6)之聊聊LVS的三种模式
  4. Xml序列化、反序列化帮助类
  5. Java IO 技术之基本流类
  6. Oracle的GUID:Raw(16)
  7. BFC探秘
  8. ZOJ1463
  9. Weblogic的集群
  10. 【翻译】了解ASP.NET MVC中的Ajax助手
  11. lnmp环境里安装mssql及mssql的php扩展
  12. 校园wifi
  13. jtable时间编辑器
  14. mybatis 多个接口参数的注解使用方式(@Param)
  15. maven配置之:<distributionManagement>snapshot快照库和release发布库
  16. JPA 菜鸟教程 15 继承-一个表-SINGLE_TABLE
  17. dispatch_group_async 使用详解
  18. IDA 7.0在Mojava更新后打不开的问题
  19. 数据集 过滤时 RecordCount 属性
  20. java读取网页图片路径并下载到本地

热门文章

  1. python中if not x: 和 if x is not None: 和 if not x is None的使用和区别
  2. GridView和DataFormatString 日期格式 精确小数点后位数
  3. SQL删除重复数据只保留一条数据
  4. js 箭头函数
  5. C# 出现base-64 字符数组的无效长度的解决办法
  6. PAT 1001 害死人不偿命的(3n+1)猜想 (15)(C++&JAVA&Python)
  7. hdu 3368 曾经下过的棋
  8. spring boot (一): Hello World
  9. bloomfilter 以及count min sketch
  10. 杭电1518 Square(构成正方形) 搜索