【发布时间】:2011-05-27 12:32:20
【问题描述】:
我正在用 C# 编写一个应用程序,我想在其中维护大量打开的套接字连接 (tcp),并能够响应来自所有这些连接的数据。现在,通常要做的事情(afaik)是在所有这些上调用 BeginRead,但据我所知 BeginRead 会产生一个线程并坐下来等待该线程中的数据,而且我读过线程不会当使用大量它们时,往往会很好地扩展。虽然我可能对此有误,但如果是这样,请告诉我。
这可能听起来很愚蠢,但我想要的是能够维持尽可能多的开放套接字连接(在我的机器/操作系统允许的情况下),同时仍然能够对来自其中任何一个的数据做出反应尽可能快,并尽可能少地使用系统资源。
我的想法是将它们全部放在某种列表中,然后在它们上运行一个循环的线程检查新数据并处理新数据(如果有的话),尽管我'会认为这样的循环最终会炸毁我的cpu(因为循环中没有任何东西会阻塞)。有什么方法(简单与否,我不介意使用一些更复杂的算法来解决这个问题)可以实现这一目标吗?任何帮助将不胜感激。
【问题讨论】:
标签: c# performance sockets concurrency