c# – 同步异步插座在.NET中的性能
我在.NET中看到的关于socket的一切都表明,异步模式提供了更好的性能(特别是使用新的SocketAsyncEventArgs来节省分配).
我认为这是有道理的,如果我们在谈论一个服务器有许多客户端连接,其中不可能每个连接分配一个线程.然后我可以看到使用ThreadPool线程并获得异步回调的优点. 但在我的应用程序中,我是客户端,我只需要听一个服务器通过一个tcp连接发送市场滴答数据.现在,我创建一个线程,将优先级设置为Highest,并调用Socket.Receive().一旦新数据到达,我的线程将阻塞该呼叫并唤醒. 如果我要将其切换到异步模式,以便在有新数据时得到回调,我会看到两个问题 >线程池线程将具有默认优先级,所以看起来它们将比我自己的具有最高优先级的线程更严格. 我在想这个错了吗?是否有理由在一个客户端连接到一个服务器的特定情况下使用Async模式? 更新: 所以我认为我在上面(2)中误解了异步模式.当有数据可用时,我会在一个工作线程上得到一个回调.然后我将开始另一个异步接收并获得另一个回调等.我不会同时得到N个回调. 问题还是一样的.有什么原因,我的特定情况下,回调会更好,只连接到一个服务器. 解决方法
您应用程序中最慢的部分将是网络通信.一个线程,一个连接客户端通过调整这样的事情,几乎没有什么不同的性能.网络通信本身将减少对处理或上下文切换时间的所有其他贡献.
为什么会发生?如果您有一个套接字,您可以开始一个操作来接收数据,完成之后就会得到一个回调.然后,您决定是否进行其他操作.这听起来像是你过度的夸张,但也许我对你想要做什么过于简单. 总之,我会说:选择最简单的编程模型,让你得到你想要的东西;考虑到您的场景中可用的选择,他们不太可能对性能产生任何明显的影响,无论您使用哪一种.使用阻挡模型,您正在“浪费”一个线程,可能正在做一些真正的工作,但嘿…也许你没有任何真正的工作要做. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |