使用异步方法调用是否可以提高.net线程的性能

时间:2012-03-02 04:21:57

标签: .net multithreading asynchronous methods pool

我在这里阅读相互矛盾的意见。我是对的,虽然异步方法调用也由用户看不到的线程池处理,这可能会节省资源,因为底层操作系统能够在IO调用挂起时挂起这些线程吗?

3 个答案:

答案 0 :(得分:1)

你是完全正确的。 IO线程不仅被暂停,它们在不需要时也会被淘汰。但异步IO不是所有问题的通用解决方案,这就是原因:

  • 异步算法难以编码。异步代码比同步变量
  • 更复杂,更容易出错
  • IO完成回调在特殊的IO线程中工作,程序员必须尽可能地保持这些线程的空闲;否则系统将显着减速。因此,如果您转到异步IO准备实现Producer-Consumer模式以进行实际数据处理
  • 如果您需要少于150个并行连接并且应用程序在PC机上运行,​​那么同步实施将是一个悬而未决的成果,同时提供简便的编程和令人满意的性能

答案 1 :(得分:0)

理想情况下,如果可能,您将使用.net 4.0 System.Threading.Tasks.Parallel类。它将利用多核处理器。

这很简单。

答案 2 :(得分:0)

'异步方法调用也由用户不可见的线程池处理' - 是的,必须要做I / O!

'这可能会节省资源,因为底层操作系统能够暂停这些线程而IO调用正在等待' - 操作系统能够在I / O挂起时暂停用户线程。

在高性能应用程序中,异步获胜是因为更多的工作被推送到可以更好地进行线程管理的内核中。这确实减少了上下文切换,也避免了大量数据复制。