我正在尝试编写一个连接到多个IP /端口的应用程序,我遇到的问题是我的IP数量是未知的,因此一个部门可以使用它连接到2个ips和其他部门可能连接到8,所以它必须在运行时可配置,我正在考虑使用线程或fork内部循环,但不确定哪一个更适合这项工作,希望有人可以指导我在这里,我在Linux下使用C 。
例如 一个人可以像这样运行它a.out ip1 port1 ip2 port2 ip3 port3 另一个可以像a.out a.out ip1 port1
那样运行它由于
答案 0 :(得分:3)
我在这里看到四种设计选择,每种设计都有优点和缺点。您的选择很大程度上取决于您的应用程序的确切功能。
1进程/套接字(fork):这具有以下优点:一个进程(例如,SEGFAULT)中的致命错误不会影响其他进程。缺点包括这种方法需要更多的资源,并且流程更难协调(例如,如果您想进行动态负载平衡)。
1个线程/套接字(pthreads):这样做的优点是它很轻,线程很容易协调,因为它们共享一个公共存储空间。缺点包括一个线程中的错误可能会导致整个应用程序崩溃。
有限状态机:您可以在单个进程中使用单个线程,在所有套接字上执行巨大的poll
,然后执行正确的(非阻塞)操作,即{ {1}},read
或write
。我听说在单处理器上这是非常快的,但它没有利用多核架构,而且编程起来有点困难。
混合:选择上面三个中的任何一个并将它们组合起来。例如,请参阅Apache server。