免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2980 | 回复: 9

如何实现精确定时? [复制链接]

论坛徽章:
0
发表于 2008-06-16 17:06 |显示全部楼层
如何实现精确定时?
有个类似cron的程序,每到固定的点和固定的时间间隔执行一个程序,程序的基本框架是,判断各个任务是否到执行时间,然后睡眠到下一分钟开始(时间是以分钟为最小单位),睡眠用的是sleep()函数,但是经过实际运行发现:
在AIX系统上,sleep()睡眠一直都比较精确,但是在HP机器上,睡眠极不精确,经常会超过预定的时间,导致有的时候过了任务执行的点,而且在HP系统上,每隔大概2个多小时,睡眠时间会比实际时间多一秒,这个APUE上也说了,不过多一秒倒是没关系,反正只有别超过这分钟就行,但是有的时候甚至是多59秒,这就没法接受了,而且CPU这时候也并不是很忙,通过查看手册,HP系统的sleep()使用alarm实现的,是不是alarm的定时器非常不精确呢?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2008-06-16 17:10 |显示全部楼层
试试select。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2008-06-16 17:14 |显示全部楼层
你不会一秒一秒 sleep,然后每次都判断一下呀。晕。

论坛徽章:
0
发表于 2008-06-16 17:22 |显示全部楼层
你不会一秒一秒 sleep,然后每次都判断一下呀。晕。

那多费CPU啊!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2008-06-16 17:27 |显示全部楼层
原帖由 lanying_wzw 于 2008-6-16 17:22 发表

那多费CPU啊!

不费。CPU 就像河里的水,你不用,它也会流的。它没有水龙头,你无法关掉它。
虽说现在有一些所谓的 StepSpeed 的技术,但主要用在笔记本上,服务器不用考虑它。


[ 本帖最后由 flw 于 2008-6-16 17:29 编辑 ]

论坛徽章:
0
发表于 2008-06-16 17:36 |显示全部楼层
试试select。

考虑过select(),但是有的系统会重起被信号中断的系统调用,而我还要在睡眠过程中处理子进程退出的SIGCHLD信号,以及重读配置文件信号SIGHUP和退出信号SIGTERM,怕中断不了...

论坛徽章:
0
发表于 2008-06-16 17:38 |显示全部楼层
我看我还是好好研究下crond的代码吧

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2008-06-16 18:39 |显示全部楼层
越来越喜欢flw 了..

论坛徽章:
0
发表于 2008-06-16 19:11 |显示全部楼层
又研究了下程序运行的机器,发现HP PA-RISC机器确实存在有很大的“睡过头”的问题,但是HP IA64的机器却没有这个问题,谁能告诉我这是为嘛啊?

论坛徽章:
0
发表于 2008-09-19 22:44 |显示全部楼层
呵呵,问题解决了,在HP-RISC上跑32位的程序确实有睡眠不准的问题,但64位的很精确,但为什么会这样呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP