首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步等待对ThreadPool和MultiThreading在高性能套接字上(C10k解决方案?)

异步等待对ThreadPool和MultiThreading在高性能套接字上(C10k解决方案?)
EN

Stack Overflow用户
提问于 2015-03-13 12:27:36
回答 2查看 14.2K关注 0票数 14

我真的对async-awaits、pools和threads感到困惑。主要的问题是:“当我必须处理10k套接字I/O时,我能做什么?”(又名C10k问题)。

  • 首先,我尝试使用使用一个主Queue和多个Thread来处理所有传入数据的线程创建一个自定义池体系结构。在理解thread-safetymulti-threading方面,这是一次很好的体验,但是现在threadasync-await来说是个过头。
  • 后来,我用async-await实现了一个简单的体系结构,但我不明白为什么“异步和等待关键字不会导致创建额外的线程”(来自MSDN)?我认为一定有一些thread来做像BackgroundWorker这样的工作。
  • 最后,我用ThreadPool实现了另一个体系结构,它看起来像我的第一个自定义池。

现在,我认为应该有其他人和我混淆了处理C10k的问题。我的项目是我的游戏项目的专用(中央)服务器,它是一个中心/大厅服务器,如MCSG的大厅或COD的匹配服务器。我将进行登录操作、游戏服务器命令的执行/查询和信息服务(比如版本、补丁)。

最后一部分可能更具体我的项目,但我真的需要一些好的建议,就现实世界的解决方案,多(沉重)数据处理。

(也是的,1k-10k-100 k连接处理取决于服务器硬件,但这是一个一般性问题)

关键点:任务并行库和ThreadPool之间的选择 (MSDN博客)

附加的好(基本)读物谁想要理解我们在说什么:

  1. 线程
  2. 异步,等待
  3. ThreadPool
  4. BackgroundWorker
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-13 12:46:00

async/await大致类似于参考文章中的“为每个线程服务多个客户端,并使用异步I/O和完成通知”方法。

虽然asyncawait本身不会导致任何额外的线程,但如果async方法在线程池上下文上恢复,它们将使用线程池线程。请注意,asyncThreadPool的交互是高度优化的;您是否可以使用ThreadThreadPool获得相同的性能(有合理的开发时间)是非常值得怀疑的。

如果可以的话,我建议使用现有的协议,例如SignalR。这将大大简化您的代码,因为编写自己的TCP/IP协议有许多(许多)缺陷。SignalR可以是自托管的,也可以是托管在ASP.NET上的。

票数 4
EN

Stack Overflow用户

发布于 2016-01-28 08:58:43

不是的。如果我们使用.NET在4.5中引入的异步编程模式,那么在大多数情况下,我们不需要创建手动线程。编译器执行开发人员过去所做的困难工作。创建一个新线程成本很高,需要时间。除非我们需要控制线程,否则“基于任务的异步模式(TAP)”和“任务并行库(TPL)”足以用于异步和并行编程。TAP和TPL使用任务。通常,任务使用ThreadPool中的线程(线程池是.NET框架已经创建和维护的线程的集合)。如果我们使用Task,大多数情况下我们不需要直接使用线程池。线程可以做更多有用的事情。您可以阅读更多关于线程池的信息。

通过使用异步编程,可以避免性能瓶颈,并增强应用程序的总体响应能力。异步对于可能阻塞的活动是必不可少的,例如当应用程序访问web时。对web资源的访问有时是缓慢的或延迟的。如果此类活动在同步进程中被阻塞,则整个应用程序必须等待。在异步进程中,应用程序可以继续执行其他不依赖于web资源的工作,直到潜在的阻塞任务完成。

“等待”是专为处理需要时间的事情而设计的,最典型的是I/O请求。这通常是在I/O请求完成时使用回调完成的。编写依赖于这些回调的代码相当困难,等待大大简化它。等待只是处理延迟,否则它不会做线程所做的任何事情。等待表达式,什么是在等待关键字的右边,是什么使工作完成。可以将异步与任何返回任务的方法一起使用。XxxxAsync()方法只是.NET框架中的预煮方法,用于花费时间的公共操作。比如从web服务器下载数据。

我建议你读异步和等待异步编程

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29032265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档