情况:一个小型的新项目服务监听套接字。
初步研究:这个答案how to make a process daemon和答案中的链接:http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html
很好一切都很好。
现在,对于侦听部分,我没有问题,但是对于线程,我开始看C++11规范。所以我包括:
#include <thread>这很好,只需调用std::线程,我就可以在新连接上打开一个线程。
所以我只是想知道,叉部分在C++11中还好吗?
是否有一种较新的方法来构建Linux服务,或者如何-仍然是好的?
发布于 2015-10-30 16:30:13
fork在Linux上的任何语言中都能很好地工作。单独的进程与线程不同,但它们确实有一些共同之处。
fork()对当前进程进行了几乎相同的复制。包括它的所有文件句柄、内存映射、堆、堆栈等等。但是,只有名为fork()的线程在子线程中运行。
一个新线程运行在同一个进程中,并可能访问它的所有资源,包括堆、文件句柄、信号量等。这可能是一个争用问题,因为操作相同资源的其他线程可能会导致难以查找的行为。
守护进程只不过是一个已脱离终端的进程,因此可以在启动用户注销后继续运行。据推测,它为编写错误(比如写入日志)、感知输入、处理请求等做出了自己的安排。
发布于 2015-10-30 18:00:27
叉子()从来不是任何C++标准的一部分,我也不认为它会成为它的一部分。将您的服务作为多进程或多线程应用程序进行服务有一些好处和缺点。多进程的主要好处是弹性--一个服务处理程序中的崩溃不会影响另一个服务处理程序,而多线程应用程序中的崩溃将根本不起作用。另一方面,与多进程应用程序相比,多线程应用程序之间有更多的通信方式(而且这些方式更快)。
选择是你的,但你永远不想做的一件事就是把叉和线混在一起。
https://stackoverflow.com/questions/33440578
复制相似问题