2016-09-14 54 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完成端口 –