linux下的服务,一种现代的方法吗?

时间:2015-10-30 16:23:21

标签: c++ multithreading c++11

情况:在套接字上侦听服务的一个小型新项目。

初步研究:此答案how to make a process daemon以及答案中的链接:http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html

好,一切都很好。
现在,对于听力部分我没有问题,但对于线程我开始观看C ++ 11规范。所以我包括:

#include <thread>

这很好,只需调用 std :: thread ,我可以在新连接上打开一个线程。

所以我只是想知道, fork 部分在C ++ 11中仍然很好吗?

是否有更新的方法来构建Linux服务,或者操作方法仍然不错?

2 个答案:

答案 0 :(得分:2)

fork()从来都不是任何C ++标准的一部分,我认为它永远不会成为它的一部分。作为多进程或多线程应用程序执行服务有一些好处和缺点。多进程的主要好处是resiliance - 一个服务处理程序中的崩溃不会影响另一个服务处理程序,而多线程应用程序中的崩溃将完全终止。另一方面,多线程应用程序有更多的方式(并且更快)与彼此进行通信,然后是多进程应用程序可用的方式。

选择是你的,但你不应该做的一件事是将叉子和线程混合在一起。

答案 1 :(得分:1)

fork适用于Linux上的任何语言。单独的进程与线程不同,但它们确实有一些共同点。

fork()制作了与当前流程完全相同的副本。包括它的所有文件句柄,内存映射,堆,堆栈等。但是,只有调用fork()的线程在子进程中运行。

新线程在同一进程中运行,并且可以访问其所有资源,包括堆,文件句柄,信号量等。这可能是一个争用问题,因为操纵相同资源的其他线程可能导致难以实现找到行为。

守护程序只不过是从终端分离的进程,因此可以在启动用户注销后继续运行。据推测,它可以自己编写错误(比如写入日志),感知输入,处理请求等等。