c - 哪种是实现 TCP/UDP 服务器的最佳方式?在线程或进程中处理每个传入请求

标签 c multithreading sockets unix tcp

您好,我正在实现 TCP 服务器。请求是函数的名称。我需要执行运行服务器的某个库中存在的函数。库函数可能会导致段错误或浮点异常。我打算在一个单独的进程中实现函数调用操作。所以任何崩溃都会导致子进程死亡。

我的问题是在进程中执行这样的操作还是使用线程更好?

还有人请告诉我如何在崩溃时重新启动我的服务器应用程序。我写了 restart.conf 并保存在/etc/init/下,但它仅在系统重新启动时才重新启动,而不是在应用程序崩溃时重新启动。我不想在 do-while 中做这件事

最佳答案

大约 25 年前,当决定如何在 Web 服务器中实现 CGI 脚本时,提出了同样的设计问题。

当时的答案是为每个 cgi 脚本调用启动一个新进程。基本原理是一个有问题的 CGI 脚本不应该让整个网络服务器崩溃。

就性能而言,影响取决于您使用的操作系统。在基于 Linux/Unix 的系统(包括 mac/osx)中,创建一个新进程相当便宜,而在 Windows 中则相当昂贵。

如果您预计某些调用会使进程崩溃,那么您绝对应该为每个调用创建一个新进程。这样您的服务器将继续运行那些错误的调用。

关于c - 哪种是实现 TCP/UDP 服务器的最佳方式?在线程或进程中处理每个传入请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36566455/

相关文章:

c - 涉及静态局部变量的递归函数中的意外输出

c - 使用 char *array[] 字符串数组的正确方法是什么?

c - Windows 问题中的 Openssl

java - 多线程可见性和原子性

c++ - fork() 除了执行外部程序之外的用处

android - WebSockets 会损害 android 上的电池吗?

c - 有点在 C 中摆弄很多位

C++ 终止线程

javascript - nodejs、socket、https - Socket 不建立连接,仅断开连接

java - 为什么 nsIScriptableInputStream 不工作?