当我们有足够的线程时,async等待优势

时间:2016-09-14 22:35:13

标签: asp.net multithreading async-await

我理解.net know to use multiple threads用于多个请求。

所以,如果我们的服务可能不会得到比我们的服务器可以产生的线程数量更多的请求(它看起来像是巨大的数字),我可以看到使用异步的唯一原因是单个请求执行多个阻塞操作,这可以并行完成。

我是对的吗?

另一个优点可能是,使用相同线程提供多个请求比使用多个线程更便宜。这种差异有多重要?

(注意:我们的服务中没有用户界面(我看到有这样的单线程,但不相关))

谢谢!

1 个答案:

答案 0 :(得分:1)

  

我是对的吗?

,执行多个独立的阻塞操作,无论如何都是Concurrent API的工作(尽管有时它们需要同步(如 lock,mutex )来维护对象状态和避免竞争条件),但 Async-Await 的使用是安排 IO操作,如File Read / Write, call a remote service or Database Read / Write,它不需要线程,因为它们在名为 IO完成端口的硬件中排队。

Async-Await的好处:

  1. 不会在单独的线程上启动IO操作,因为在内存和资源分配方面,线程是一种代价高昂的资源,并且比等待IO调用回来更没有价值。单独的线程应该用于计算绑定操作,没有IO绑定。
  2. 释放用户界面/来电者线程,使其完全响应以执行其他任务/操作
  3. 这是异步编程模型(BeginXX,EndXX)的演变,理解和实现相当复杂
  4.   

    另一个优点可能是,使用相同线程提供多个请求比使用多个线程更便宜。这种差异有多重要?

    这是一个很好的策略,取决于来自调用者的请求类型,如果他们是计算绑定更好地调用并行API 并快速完成它们,IO绑定那里异步 - 等待,只有多个线程的问题是资源分配和上下文切换,需要将其考虑在内,但另一方面它有效地利用了处理器核心,这些核心在当前系统中得不到充分利用,就像你想的那样看大多数时候处理器处于闲置状态