我有一个不断执行的程序,我需要每分钟保存一次数据。

程序处理数据,并且每分钟我都想保存一个变量的值并进行一些统计操作以了解该变量的变化。

我以为我可以用信号,SIGALRM和警报器(60)做到这一点。我的子问题是,我可以将类方法用作SIGALRM的最终方法吗?

还有其他想法可以执行一种方法来保存数据并每分钟执行一些操作吗?

该程序用C++编写,在Linux上运行,是一个单核处理器。

最佳答案

您使用alarm的解决方案将起作用,openwrite都是异步信号安全的。尽管您必须知道alarmsleep之间的交互是未定义的,所以不要在同一程序中使用它们。

另一种解决方案,尤其是在您已经使用epoll的情况下,将是让timerfd触发epoll。这样可以避免可能发生的不确定的交互。

至于实际的节省,请考虑 fork 。这是我从redis中学到的一种技术(也许是其他人发明的,但这就是我从中学习的地方),我认为这很酷。关键在于, fork 的过程可能需要花费宇宙中的所有时间才能完成写入所需数量的磁盘数据。它可以在派生时访问快照,而其他进程保持运行并修改数据。并且由于内核中执行了页面魔术,它仍然可以无缝运行,而没有损坏的风险,没有停滞的迹象,也不需要研究异步IO之类的东西,这很棒。

关于c++ - 在执行期间定期保存数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5597337/

10-09 07:24
查看更多