C#套接字性能.Net 4.5 Async vs […] Async vs Begin […]

目前,根据我的研究,有三种方法可以异步使用套接字:

.Net 4.5异步示例:Using .Net 4.5 Async Feature for Socket Programming(第二篇文章)

[…]异步:http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx

开始[…]:http://msdn.microsoft.com/en-us/library/5w7b7x5f(v=vs.110).aspx

我对所有选项非常困惑.Net提供了使用异步套接字的方法.我为什么要使用其中一个?有数千个同时连接的性能有什么更好的选择?

解决方法

What better choice to have performance with thousands of simultaneous
connections?


A curiosity regarding the Begin[…]. If I have a MMORPG server where
one connection interacting with each other for position update,
animation,effects (basic MMORPG mechanism),in numbers,which would
be “heavily loaded servers”? 200~300 simultaneous connections?

在服务器端,使用任何异步套接字API(初始/结束式APM,基于事件的EAP或基于任务的TAP)都可能同样受益.这是因为与使用同步API相比,您将阻止更少的线程.因此,可以使用更多线程同时为服务器提供其他传入请求,从而提高其可伸缩性.

最有可能的是,您不会看到使用TAP套接字API而不是其APM或EAP类似物的任何性能优势.但是,与APM或EAP相比,TAP API模式更容易开发.与async / await一起使用时,它会生成更短,更易读和更少错误代码.您将获得自然的伪线性代码流,这是APM回调或EAP事件处理程序无法实现的.如果您无法找到适当的基于任务的套接字API,则始终可以使用Task.FromAsync从开始/结束APM API(或从EAP API,请参阅“A reusable pattern to convert event into task”)获取make one yourself.

对于客户端UI应用程序,可伸缩性并不重要,但TAP模式还有另一个好处.通过很少的努力,它有助于使您的UI响应,因为您不会阻止UI线程(通常在等待同步调用的结果时发生).这不是特定于基于任务的套接字API,它适用于任何基于任务的API,例如,Task.Delay()或Stream.ReadAsync().

有关C#中异步编程的一些好的阅读材料,请检查async / await标签wiki:

https://stackoverflow.com/tags/async-await/info

相关文章

C#项目进行IIS部署过程中报错及其一般解决方案_c#iis执行语句...
微信扫码登录PC端网站应用的案例(C#)_c# 微信扫码登录
原文地址:http://msdn.microsoft.com/en-us/magazine/cc163...
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采...
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下...
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Mic...