2012-03-07 22 views
1

我正在開發應用程序與幾個線程(每個正在處理它的隊列)和並行任務(Parallel.For或只是Thread.StartNew)。Threading.Thread和Threading.Task在相同的應用程序,任務考慮到這一點?

我的問題是,如果在最新版本的線程(如線程池,任務等)中引入的MS線程組件知道其他線程時,我們在新線程上執行操作時手動定義了其他線程。例如:如果我有4個CPU和1個線程在一個隊列上工作(線程不總是工作,它使用重置事件等),並且我有10個並行操作在其任務上運行(每個)。這是否意味着3個任務將與我的應用程序一起運行,而其他任務等待它們(任務)完成?當線程進入睡眠狀態時(會執行任務操作將在線程所在的cpu上運行嗎?如果發生這種情況,當我的線程需要立即運行並且花費CPU時間的任務掛起時會發生什麼? ?豈不是我的線程也不會運行,或在某些時候,我會看到上下文切換?)

大量的和問題很多的...希望有人會耐心等待,並有我一個答案:)

謝謝, Tzahi

回答

1

ThreadPool/TPL基礎結構不知道「手動」創建的線程,它只會盡最大努力調整自己以使用可用的CPU資源。從那裏開始你就依靠操作系統來完成它的工作,並將線程安排在彼此之間。例如,如果您的手動線程阻塞等待對象,它不會佔用資源,操作系統會調度另一個可用線程(可能來自ThreadPool/TPL)。如果你仔細想想,這與在OS上運行的多個應用程序沒有什麼不同。他們對彼此一無所知,但操作系統盡最大努力讓每個人都高興,並獲得可用資源的票價份額。

相關問題