0

我正在尝试编写一个连接到多个 IP/端口的应用程序,我遇到的问题是我不知道 IP 的数量,所以一个部门可以使用它连接到 2 个 ip,其他部门可以连接到 8 ,所以它必须在运行时可配置,我正在考虑在循环中使用线程或fork,但不确定哪个更适合这项工作,希望有人可以在这里指导我,我在Linux下使用C。

例如,一个可以这样运行它 a.out ip1 port1 ip2 port2 ip3 port3 而另一个可以这样运行它 a.out a.out ip1 port1

谢谢

4

1 回答 1

3

我在这里看到四种设计选择,每种都有优点和缺点。您的选择在很大程度上取决于您的应用程序究竟做了什么。

  1. 1 进程/套接字(fork):这样做的好处是一个进程中的致命错误(例如,SEGFAULT)不会影响其他进程。缺点包括该方法更耗费资源并且进程更难以协调(例如,如果您想进行动态负载平衡)。

  2. 1个线程/套接字(pthreads):它的优点是它很轻,线程很容易协调,因为它们共享一个公共的内存空间。缺点包括一个线程中的错误可能会使您的整个应用程序崩溃。

  3. 有限状态机:您可以在单个进程中使用单个线程,poll在所有套接字上执行大量操作,然后采取正确的(非阻塞)操作,即readwriteclose。我听说这在单处理器上非常快,但是,它没有利用多核架构,而且编程起来有点困难。

  4. 混合:选择以上三个中的任何一个并将它们组合起来。参见例如Apache 服务器

于 2012-06-27T16:07:04.640 回答