linux定时器

【时间子系统】四、低精度定时器

我的梦境 提交于 2019-12-01 16:06:59
  通过定时器,我们可以控制计算机在将来指定的某个时刻执行特定的动作。传统的定时器,以时钟滴答(jiffy)作为计时单位,因此它的精度较低(例如HZ=1000时,精度为1毫秒),我们也称之为低精度定时器。 1. 初始化定时器   我们在概述中介绍过,内核中通过init_timer对定时器进行初始化,定时器中最关键的三个信息是:到期时间、到期处理函数、到期处理函数的参数。init_timer宏及定时器结构struct timer_list(取名struct timer可能更合适)的定义如下: linux/include/linux/timer.h: #define init_timer(timer) __init_timer((timer), 0) #define __init_timer(_timer, _flags) init_timer_key((_timer), (_flags), NULL, NULL) struct timer_list { /* * All fields that change during normal runtime grouped to the * same cacheline */ struct list_head entry; /*用于将当前定时器挂到CPU的tvec_base链表中*/ unsigned long expires; /

【时间子系统】四、低精度定时器

故事扮演 提交于 2019-12-01 16:02:11
  通过定时器,我们可以控制计算机在将来指定的某个时刻执行特定的动作。传统的定时器,以时钟滴答(jiffy)作为计时单位,因此它的精度较低(例如HZ=1000时,精度为1毫秒),我们也称之为低精度定时器。 1. 初始化定时器   我们在概述中介绍过,内核中通过init_timer对定时器进行初始化,定时器中最关键的三个信息是:到期时间、到期处理函数、到期处理函数的参数。init_timer宏及定时器结构struct timer_list(取名struct timer可能更合适)的定义如下: linux/include/linux/timer.h: #define init_timer(timer) __init_timer((timer), 0) #define __init_timer(_timer, _flags) init_timer_key((_timer), (_flags), NULL, NULL) struct timer_list { /* * All fields that change during normal runtime grouped to the * same cacheline */ struct list_head entry; /*用于将当前定时器挂到CPU的tvec_base链表中*/ unsigned long expires; /

swoole定时器

眉间皱痕 提交于 2019-11-30 03:01:32
linux中的计划任务,最小的单位只能到分钟级别,如有业务在秒级单位的计划,crontab将无法完成。而 swoole_timer是基于timerfd+epoll实现的异步毫秒定时器,为我们实际提示了很好的解决方案。 一次性定时器 <?php // 5秒后输出 hello world swoole_timer_after(3*1000,function (){ echo "hello world\n"; }); 效果: 周期性定时器 <?php // 每隔3秒输出 hello world swoole_timer_tick(3*1000,function (){ echo "hello world\n"; }); 来源: https://www.cnblogs.com/qiguaideta/p/11548851.html

高精度计时器,windows,linux,voworks

余生长醉 提交于 2019-11-28 12:23:56
本文主要介绍 Linux 下高精度时间函数,及相关的具有超时机制的函数,对定时器也进行简单的介绍。 在linux下通常可用的精度最高的时间接口是gettimeofday,它返回一个timeval结构,其精度为us,即10-6 秒,大多数情况这个精度已经够用了。不过有时为了更高的精度,比如纳秒级的时间精度,我们需求探索Linux为我们提供的时间调用。 首先介绍struct timespec结构,这个结构体有两个成员,一个是秒,一个是纳秒。 在librt库中,提供了高精度的时间函数,分别是: long clock_gettime(clockid_t ,struct timespec*) 获取特定时钟的时间,时间通过fp结构传回,目前定义了6种时钟,分别是 CLOCK_REALTIME 系统当前时间,从1970年1.1日算起 CLOCK_MONOTONIC 系统的启动时间,不能被设置 CLOCK_PROCESS_CPUTIME_ID 进程运行时间 CLOCK_THREAD_CPUTIME_ID 线程运行时间 CLOCK_REALTIME_HR CLOCK_REALTIME的高精度版本 CLOCK_MONOTONIC_HR CLOCK_MONOTONIC的高精度版本 获取特定时钟的时间精度: long clock_getres(clockid_t ) 设置特定时钟的时间: long