使用TCPListener类的单线程还是多线程?

alc*_*cal 2 c# sockets tcp

我们正在创建需要通过TCP/IP套接字与另一个系统通信的ac#app.我们希望每秒接收大约1-2个传入事务,每条消息的平均大小约为10k(文本和1个图像).

然后我们将进行一些处理(可能需要100毫秒到3秒,具体取决于几个变量),然后发送大约1k的响应.

在我看过的例子中,有些是多线程的.对于这个应用程序,将其设置为单线程还是多线程会更好吗?如果建议使用多线程,那么大致不同的线程会做什么?

gah*_*ooa 5

(不是特定于C#)

完成两种方式(极端性能不是决定因素),我更喜欢每线程1线程的方法.

监听器线程
此线程的作用是在套接字上侦听传入连接,接受它们,并生成一个新的连接线程(给它连接的套接字).

连接线程
这些线程(每个连接一个)处理与连接套接字的所有通信.如果请求是同步的,它们也可以处理请求的处理(您需要查看特定应用程序的请求).

当连接死亡时,该线程也会死亡.

管理线程
如果需要执行清理或定期维护,这些都可以在自己的线程中运行.

请记住锁定(显然): 连接需要共享多少数据?访问时确保所有资源都已正确锁定,并且您没有任何死锁或竞争条件.然而,这更像是一个"通用线程"主题.

  • 考虑使用线程池而不是每个请求生成一个新线程.创建新线程可能很昂贵,并为DOS攻击提供了很好的机会. (3认同)