【发布时间】:2015-05-18 08:06:32
【问题描述】:
我正在使用带有 .NET Framework 4.5 的 C#。我正在编写一个服务器应用程序,它应该能够一次连接到任意多个客户端。所以我有一个线程会监听连接,然后它将连接发送到后台线程以进入等待消息的循环。由于可支持的客户端连接数应该非常高,因此为每个连接生成一个新线程是行不通的。相反,我需要的是一个线程池。但是,我不想使用系统线程池,因为这些线程基本上会在调用Socket.Select 时被无限期地阻塞,或者至少在它们托管的连接的生命周期内被阻塞。
所以我认为我需要一个自定义的 ThreadPool,我可以明确地将连接轮询到。如何在 C# 中实现这一点?
【问题讨论】:
-
这里有一点 XY 问题。您有一个要求并制定了一个解决方案,并且正在询问该特定解决方案而不是问题本身。您不希望线程与不执行任何操作的单个连接相关联是正确的。线程不是轻量级对象。这个概念类似于带有调度程序的 Stackless Python 小任务。我认为新的 TPL 东西可以实现这个想法,它有线程池和“阻塞 IO”线程池的概念,可能值得研究一下,也许使用 TPL DataFlow。
标签: c# multithreading sockets