【问题标题】:best approach for multithreaded server on .net?.net 上多线程服务器的最佳方法?
【发布时间】:2011-01-14 00:29:27
【问题描述】:

我想开发一个服务器,它将侦听某些特定端口以接收来自设备的请求。在处理请求时,请遵循以下步骤。

  1. 从套接字流中读取数据(从设备发送)
  2. 将字节数据解析为业务对象
  3. 通过 ado.net 层使用数据库使用业务对象处理请求
  4. 以二进制形式向设备发送响应

上述所有步骤都需要不到一秒钟的时间来处理。

目前我正在使用线程池使服务器多线程。

我的目标是制作一个每秒可以处理最大请求数的服务器。

我应该用什么方法来开发最高效的服务器,然后测试这个服务器 请求处理能力进行验证。

谢谢

【问题讨论】:

  • 不是一个完整的答案,所以我把它作为评论,但你可能想查看“I/O Completion Ports”而不是显式使用线程池。请注意,这是一个更大的话题,但可能值得考虑,即花时间进入。例如,WCF 使用它们而不是简单的线程池来实现更高的并发性,而无需在池中产生/拥有大量线程。

标签: .net multithreading .net-3.5 sockets


【解决方案1】:

我喜欢你对线程池所做的事情。我唯一的建议是限制池,因为它默认为池中的 50 个线程,这比我读过的任何建议都多得多。使用这么多线程进行上下文切换可能会变得很荒谬。将其限制为服务器中核心数的 3-5 倍。

测试它相当简单。如果您只是添加该行来更改线程数,则添加一个精确计时器。一旦你编写了另一个小应用程序来触发一堆服务器请求,看看有多少线程是最快的。如果您更改的代码比这更多,请在机器上安装一个 SVN 服务器,并使用您的各种版本分支代码,并使用上述测试应用程序和计时器进行测试。

【讨论】:

  • 我认为我不应该在线程池本身上保留线程配置。正如你所指定的,我已经开发了一个发送请求的测试设备模拟器。但我无法增加其发送超过一次有数百个请求。在场景中可能会收到数以千计的请求。我只是想知道有什么方法可以提高服务器的性能。我想一种方法是使用 NetworkSocket 的异步方法。
猜你喜欢
  • 2014-11-25
  • 2018-03-24
  • 2020-12-01
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
相关资源
最近更新 更多