2016-09-14 56 views
0

我知道.net know to use multiple threads对于多个请求。因此,如果可能我们的服务不会获得比我们的服务器可以产生的线程数量更多的请求(它看起来像一个巨大的数字),我可以看到使用异步的唯一原因是在单个请求上执行多个阻塞操作,可以并行完成。当我们有足够的线程时异步等待优势

我对不对?

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

(注:没有UI在我们的服务中存在(我看到有这个单一线程,但它是不相关))

的感谢!

回答

1

对吗?

没有,做多个独立阻截行动,是并发的API的工作呢(尽管有时他们需要同步(如锁,互斥),以保持对象的状态,并避免竞争条件),但异步等待的用法是安排IO操作,像File Read/Write, call a remote service or Database Read/Write,这并不需要一个线程,因为它们在硬件队列称为IO完成端口排队。

优势异步等待的:

  1. 不上一个单独的线程开始IO操作,因为线程是一个昂贵的资源,在内存方面和资源分配,并会做的比等珍贵的小为IO电话回来。单独的线程应用于计算绑定操作,无IO绑定。
  2. 腾出UI /程序线程使之完全响应执行其他任务/操作
  3. 这是异步编程模型的演变(BeginXX,EndXX),这是相当复杂的理解和实施

另一个优势是服务于多个请求与同一个线程是成本比使用多个线程。这种差异有多重要?

其根据其种类从来电者的要求,如果他们是计算绑定更好地调用并行API并完成他们快一个很好的策略,IO势必有异步等待,只能用多线程问题是需要考虑的资源分配和上下文切换,但是另一方面,它有效地利用当今系统中相当不足的处理器核心,正如您将看到大多数时间处理器处于空闲状态

+0

通过“阻止操作”我的意思是“IO操作”... – arielorvits

+0

好吧,如果IO操作,那么是一个单线程可以调用多个Async-Await调用,这使用IO完成端口 –