c++ - 编写 linux 守护进程的最佳方式

标签 c++ linux daemon

<分区>

为了工作,我需要编写一个 tcp 守护进程来响应我们的客户端软件,并且想知道是否有人对解决此问题的最佳方法有任何建议。

我是否应该像通常使用线程那样为每个新连接创建分支?

最佳答案

这取决于您的应用。线程和 fork 都是完全有效的方法,也是单线程事件驱动模型的第三种选择。如果您能详细解释一下您正在写的内容,这将有助于提供建议。

就其值(value)而言,这里有一些一般准则:

  • 如果您没有共享状态,请使用 fork 。
  • 如果您有共享状态,请使用线程或事件驱动系统。
  • 如果您需要在大量连接下实现高性能,请避免 fork ,因为它会产生更高的开销(尤其是内存使用)。相反,使用线程、事件循环或多个事件循环线程(通常每个 CPU 一个)。

通常, fork 是最容易实现的,因为一旦 fork ,您基本上可以忽略所有其他连接;由于额外的同步要求,线程次之;由于需要将您的处理变成状态机,事件循环更加困难;多线程运行事件循环是其中最困难的(由于结合其他因素)。

关于c++ - 编写 linux 守护进程的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1210623/

相关文章:

c++ - 如何在包含char和pair<int,string>的map中按键删除元素

c++ - 如果只有主应用程序是用 clang 编译的,是否可以使用 clang Address Sanitizer?

c++ - Boost cpp_dec_float 支持模运算

c++ - 如何在 QLineEdit 中使用 std::string?

linux - Linux 内核线程的调度或抢占是如何工作的?

python - 在 Linux 中使用 SWIG for Python 转换字符串

linux - 在嵌入式 Linux 系统上将 SDL 应用程序作为守护进程运行

mysql - 如何在Windows后台运行apache的httpd守护进程?

docker - 我如何查看某些 docker 守护程序配置的设置?

c++ - Eigen 为函数的就地版本和非就地版本给出不同的结果