我正在用c++开发一个程序,我必须实现一个cron。出于不同的原因,这个cron应该每小时和每24小时执行一次。我的第一个想法是创建一个独立的pthread,并在每次1小时内将其睡眠。这是正确的吗?我的意思是,让一个线程休眠而不是唤醒真的很有效吗?让线程休眠的不便之处是什么?
发布于 2010-09-20 19:13:07
我倾向于让这样的任务通过cron/scheduler运行,因为它是以预定的时间间隔运行的,而不是响应某些环境事件。因此,程序应该只“做”它需要做的任何事情,然后根据需要由操作系统执行。这也使得更改执行频率变得很容易-只需更改调度,而不需要重新构建应用程序或公开额外的可配置性。
也就是说,如果你真的真的想这样做,你可能不会睡上一整小时;你会在较小的时间范围内(可能是五分钟,或者任何看起来合适的时间段)的几倍时间内睡眠,并有一个变量来保存“最后一次运行”的时间,这样你就知道什么时候再跑一次。
Sleep()调用通常不会特别准确,因为线程最终休眠的时间;这取决于其他哪些线程有任务在等待,等等。
发布于 2010-09-20 19:36:13
让线程长时间休眠不会对性能产生影响,只是它会占用一些内存,而不会做任何有用的事情。也许如果你为成千上万的线程做这件事,操作系统对线程的管理会有一些减慢,但看起来你并不打算这么做。
让线程长时间休眠的一个实际缺点是,你不能对它做任何事情。例如,如果您想要告诉线程它应该停止,因为应用程序想要关闭,那么线程只能在休眠之后获得此消息。因此,您的应用程序要么需要很长时间才能关闭,要么需要强制停止线程。
发布于 2010-09-20 19:15:54
我的第一个想法是创建一个独立的pthread,并在每次1小时内将其休眠。
。
我看不出有问题。
这是正确的吗?我的意思是,让一个线程休眠而不是唤醒真的很有效吗?
只要线程处于休眠状态,不会被唤醒,OS甚至不会为它的存在而烦恼。
不过,如果线程大部分时间都在休眠,为什么还要有一个专用的线程呢?为什么其他线程(例如主线程)不能查看时间,并启动一个线程来执行cron作业?
让线程休眠有什么不便之处?
没有。但是休眠线程不能被容易地解锁。如果需要适当地关闭应用程序,这是一个值得关注的问题。这就是为什么让另一个(繁忙)线程来检查时间并在需要时启动cron作业是一个更好的主意。
https://stackoverflow.com/questions/3750812
复制相似问题