1. 程式人生 > >關於多執行緒的一些感想

關於多執行緒的一些感想

以前的疑惑

    接觸多執行緒也有段時間,實話說,自己其實根本沒理解,Java的併發程式設計書籍也看了幾本了,什麼多執行緒設計模式,併發工具,執行緒池原始碼也都有所瞭解,一直還自我感覺還不錯,但我在想一個問題,多執行緒是如何提升效能的?cpu同一時刻不是隻能執行一個執行緒嗎?如果是在單核的情況下,加上執行緒上下文切換的時間,那豈不是多執行緒比單執行緒還耗時,這些我一直沒想通,直到今天得以解惑.

解惑

    讓我得以解惑的重點,是關於執行任務的型別,分為CPU密集型和IO密集型.
其實我並不是今天才知道這個分類,相反,我很早就知道了,在上學校作業系統課程時就知道了,但這個知道,僅僅限於知道.
CPU密集型就是程式內容多是計算任務,IO密集型就是程式內容多是IO操作.
可以這麼說,如果執行任務是純粹的CPU密集型,單個執行緒的執行過程中沒有任何阻塞,那麼上面疑惑中的最後一問其實是對的,單核系統的這種情況下,多執行緒確實比單執行緒耗時多(理論上是,我還沒測試,會盡快補上),但現實確不存在這樣的情況,哪裡有純粹的CPU密集型程式,相反,很多程式中,IO操作會更多一些,耗時也佔總程式的大部分,線上程執行時,IO操作勢必會阻塞,這時,如果是單執行緒,整個CPU就只能等待,但是在多執行緒的情況下,就會切換到別的執行緒,這樣省下等待的時間,多執行緒的效率就上來了.