我對單線程和多線程編程之間的差異存在誤解,所以我想要回答下面的問題以使一切都清楚。誤解單線程和多線程編程之間的差異
假設有9個獨立的任務,我想用一個單線程程序和一個多線程程序完成它們。基本上,它會是這樣的:
單線程:
- Execute task 1
- Execute task 2
- Execute task 3
- Execute task 4
- Execute task 5
- Execute task 6
- Execute task 7
- Execute task 8
- Execute task 9
多線程:
線程1:
- Execute task 1
- Execute task 2
- Execute task 3
線程2:
- Execute task 4
- Execute task 5
- Execute task 6
Thread3:
- Execute task 7
- Execute task 8
- Execute task 9
據我所知,只有ONE線程在同一時間(讓CPU)來執行,一旦量子結束後,線程調度會給另一個線程提供CPU時間。
那麼,哪個程序會早些完成?它是多線程程序(邏輯上)?或者它是單線程程序(因爲多線程有很多上下文切換需要一些時間)?爲什麼?我需要一個很好的解釋:)
'哪個程序會早點完成?答案:它取決於 – 2012-04-11 17:10:12
即使在單個CPU上也會異步發生許多事情:內存讀取,磁盤I/O,網絡I/O ......在「強制超時」期間,上下文切換通常會優先發生。無論如何,現在誰真的只有一個CPU? – 2012-04-11 17:10:47
這個問題目前的形式是無法回答的。這些任務是相互獨立的,還是依賴於早期任務的結果?有多少個CPU /內核可用?任務處理器是綁定的還是I/O綁定的?在並行性(多CPU /內核,處理器綁定,獨立任務)的理想情況下,多線程版本可能會更快。但也許不是。 – dlev 2012-04-11 17:12:04