首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

深入Linux CC++ Timer定时器的实现核心原理

要不要用Timerfd? 开篇的表格里有提到,从Linux2.6.25开始,timerfd系列API,带来了一种全新的定时机制。把超时事件转换为了文件描述符,当超时发生后该文件描述符会变成可读。...如果未对timerfd设置阻塞,对其read操作会一直阻塞到超时发生。此外timerfd的精度达到了纳秒级。不考虑跨平台等因素,这是一个非常不错的选择。...每个超时事件独享一个timerfd 如果对于每一个超时事件都用timerfd_create()创建一个对应的fd,放到epoll中统一管理。这样的做法是不合适的。...所有超时事件共享一个timerfd libevent就是使用的这种方式。定时时间仍然使用最小堆来保存,每个event loop共享同一个timerfd。...; is.it_value.tv_nsec = tv->tv_usec * 1000; timerfd_settime(epollop->timerfd, 0, &is,

9.2K83

让事件飞 ——Linux eventfd 原理与实践

简而言之,就是eventfd用来触发事件通知,timerfd用来触发将来的事件通知。 开发者使用eventfd相关的系统调用,需要包含头文件;对于timerfd,则是。...timerfd 对于timerfd,有三个涉及的系统调用接口 1int timerfd_create(int clockid, int flags);int timerfd_settime(int fd...timerfd_gettime():返回当前timerfd对象的设置值到curr_value指针所指的对象。...timerfd对应实现 main函数和consumer线程实现几乎一致,而producer线程创建timerfd,并注册到事件循环中。...第三,对于timerfd,还有精准度和实现复杂度的巨大差异。由内核管理的timerfd底层是内核中的hrtimer(高精度时钟定时器),可以精确至纳秒(1e-9秒)级,完全胜任实时任务。

4.5K31

深入理解 Linux 的 epoll 机制

使用系统调用 eventfd 创建,这种文件 fd 无法传输数据,只用来传输事件,常常用于生产消费者模式的事件实现; timerfd:这是一种定时器 fd,使用 timerfd_create 创建,到时间点触发可读事件...; 小结一下: ext2,ext4,xfs 等这种真正的文件系统的 fd ,无法使用 epoll 管理; socket fd,eventfd,timerfd 这些实现了 poll 调用的可以放到 epoll...池进行管理; 其实,在 Linux 的模块划分中,eventfd,timerfd,epoll 池都是文件系统的一种模块实现。...处理提供了前提条件; epoll 全名 eventpoll,在 Linux 内核下以一个文件系统模块的形式实现,所以有人常说 epoll 其实本身就是文件系统也是对的; socketfd,eventfd,timerfd

7.3K124

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券