我正在用C#编写服务器。 msdn.microsoft.com上的异步示例建议以下内容。
在这一点上,似乎有4个独立的线程,从我的观点(可能是幼稚的)来看,实际上只需要2个。服务器可以继续监听; 1个需要与客户端进行对话。为什么我与客户端的对话需要3个线程,因为我必须等待答复才能发送,而在等待接收来自客户端的数据时我将不做任何其他事情?
干杯
最佳答案
BeginAccept
不启动新线程。它将处理程序附加到OS级别 Hook 。没有线程可以完成此操作的工作。 BeginReceive
和BeginSend
也是如此。这些都没有启动新线程。
当他们添加处理程序的事件实际触发时,就会创建一个线程池线程来响应发生的操作。此处完成的CPU限制工作通常应该很少。您将在这里看到很多请求的线程池线程,但是它们所完成的工作很少,因此它们很快就会发送回池中。
线程池是为此类型的使用而设计的。与其为每个事件响应创建完整的线程(这将是昂贵的),不如创建仅1-2个线程并连续重复使用它们来依次响应所有这些事件。池将仅创建所需数量的线程,以跟上足够小的积压。