免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3172 | 回复: 9
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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
2 [报告]
发表于 2008-06-16 17:10 |只看该作者
试试select。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2008-06-16 17:14 |只看该作者
你不会一秒一秒 sleep,然后每次都判断一下呀。晕。

论坛徽章:
0
4 [报告]
发表于 2008-06-16 17:22 |只看该作者
你不会一秒一秒 sleep,然后每次都判断一下呀。晕。

那多费CPU啊!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2008-06-16 17:27 |只看该作者
原帖由 lanying_wzw 于 2008-6-16 17:22 发表

那多费CPU啊!

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


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

论坛徽章:
0
6 [报告]
发表于 2008-06-16 17:36 |只看该作者
试试select。

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

论坛徽章:
0
7 [报告]
发表于 2008-06-16 17:38 |只看该作者
我看我还是好好研究下crond的代码吧

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2008-06-16 18:39 |只看该作者
越来越喜欢flw 了..

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

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP