我目前正在尝试决定TCP服务器的设计,其中服务器将提供的服务包括执行同步I / O(大量数据库查询 - 现有代码!)
该服务器将成为其中一部分的系统拥有数百个客户端,这些客户端通常都是同时连接并保持连接数小时。
基本上所有客户端请求都是人为交互的结果,因此频率较低但响应时间应尽可能快。
正如我所说,服务实现必须执行同步I / O,因此基于完全事件的服务器显然是不可能的。
线程似乎是序列化阻塞IO的自然选择,但你会看到不使用比CPU内核更多线程的建议。
目前我倾向于使用一个线程池,其线程数实际上高于核心数,因为线程无论如何都会阻塞。
这样的设计会合理吗?具有这些要求的服务器有哪些替代方案?
答案 0 :(得分:0)
看起来,(是的,再次,来自我的帖子,而不是我的直接经验),200个.NET托管线程“导致了各种各样的问题”。在Windows / Linux上,200个非托管线程不是一个大问题。
然而,200个持久数据库连接似乎很多!您可能希望将它们池化,或使用线程池进行数据库访问,并使用适当的线程间通信。