我在网关上有一个网络应用程序。它接收和发送数据包。对于他们中的大多数人来说,我的网关充当路由器,但在某些情况下,它也可以接收数据包。
我应该有:
- 只有一个主线程
- 一个主线程 + 一个调度线程,负责将其提供给正确的流处理程序
- 与流一样多的线程
- 别的东西。
?
我在网关上有一个网络应用程序。它接收和发送数据包。对于他们中的大多数人来说,我的网关充当路由器,但在某些情况下,它也可以接收数据包。
我应该有:
?
您的案例听起来很像典型的 Unix 服务守护进程。解决您的问题的流行解决方案不是使用线程,而是使用分叉。
这个想法是您的程序侦听套接字并等待连接。一旦连接到达,它就会分叉。然后子进程继续处理连接。父进程本身只是继续循环并等待传入的连接。
相对于线程的优点:
缺点:
您可以在线找到许多代码示例。
我对网络应用了解不多,但我认为是这样的:
我个人的偏好是每个连接使用一个主线程和一个工作线程。没有任何上限。我假设您的服务器将像 HTTP 服务器一样是无状态的。
对于有状态的服务器,您必须想办法控制线程数。