簡體   English   中英

Parallel.ForEach,Task.Factory和N個線程

[英]Parallel.ForEach, Task.Factory and N threads

我知道之前已經有人問過這個問題,但我仍然不知道在這種情況下該使用什么。

我需要針對一個我知道一次可以處理16個請求的Web服務進行100次調用(不是,如果獲得更多請求,它將失敗)

我認為Parallel.ForEach適用於更底層的CPU密集型調用-它將決定最適合多少線程。 Task.Factory使用線程池,因此線程數可能少於16(更多)

當然,我可以編寫自己的線程池,但是在這種情況下沒有更明顯的選擇嗎?

我會用Parallel.ForEach但指定ParallelOptionsMaxDegreeOfParallelism設置為16,你給你想要的並行度的非常明確地表明這種方式。

如果您使用Task.Factory我認為可以假設您獲得16個以上的並發任務,盡管如果您使用異步IO,則無論如何都不需要16個並發線程

您可能想看一下TPL數據流 -我沒有專門研究如何輕松划分使用者,但是由於它直接針對生產者/消費者方案,因此如果您無法創建16個使用者,我會感到驚訝。只需撥打100個電話。

或者,當然,您可以創建全部使用相同BlockingCollection 16個線程,其中包含100個調用的數據。 這樣可以保證並行度。

請注意,為了實際在同一時間對同一HTTP主機同時進行16個調用,您可能需要調整app.config的<connectionManagement>部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM