Vala中的高效守护进程

时间:2012-09-24 08:54:21

标签: performance daemon vala

我想在Vala中创建一个守护进程,每隔X秒执行一次任务。 我想知道哪种方式最好:

  1. Thread.usleep()或Posix.sleep()
  2. GLib.MainLoop + GLib.Timeout
  3. 其他?
  4. 我不希望它在什么都不做的时候吃太多资源..

2 个答案:

答案 0 :(得分:6)

如果您在系统调用中花费时间,那么从性能角度来看,不会有任何明显差异。也就是说,使用MainLoop方法可能有两个原因:

  1. 您将需要设置信号处理程序,以便您的守护程序在给予SIGTERM时可以立即死亡。如果您通过quit通过SIGTERM绑定Posix.signal来调用主循环上的{{1}},那么可能会比检查睡眠成功更可读代码。

    < / LI>
  2. 如果您决定增加复杂性,MainLoop将使其更加直接。

答案 1 :(得分:0)

您可以通过以下方式使用GLib.Timeout.add_seconds

Timeout.add_seconds (5000, () => {
  /* Do what you want here */

  // Continue this "loop" every 5000 ms
  return Source.CONTINUE;

  // Or remove it
  return Source.REMOVE;
}, Priority.LOW);

注意:超时设置为Priority.LOW,因为它在后台运行,应优先考虑其他任务。