编写linux守护进程的最佳方法

Lod*_*dle 4 c++ linux daemon

为了工作,我需要编写一个tcp守护进程来响应我们的客户端软件,并想知道是否有任何人有关于最佳方式的任何提示.

我应该为每个新连接分叉,因为我会使用线程吗?

bdo*_*lan 9

这取决于您的应用程序.线程和分叉都可以是完全有效的方法,也是单线程事件驱动模型的第三种选择.如果你能更准确地解释一下你正在写什么,那么在提供建议时会有所帮助.

对于它的价值,这里有一些一般指导方针:

  • 如果您没有共享状态,请使用分叉.
  • 如果您有共享状态,请使用线程或事件驱动的系统.
  • 如果在非常大量的连接下需要高性能,请避免分叉,因为它具有更高的开销(特别是内存使用).相反,使用线程,事件循环或几个事件循环线程(通常每个CPU一个).

通常分叉是最容易实现的,因为一旦你分叉就可以基本上忽略所有其他连接; 由于额外的同步要求,下一个线程最难; 由于需要将处理转换为状态机,事件循环更加困难; 并且运行事件的多个线程循环最困难(由于结合其他因素).