單核多線程與多核多線程的區別---總結

在單核時代,多線程就有很廣泛的應用,這時候多線程大多用於降低阻塞(意思是類似於

while(1)

{

if(flag==1)

break;

sleep(1);

}

這樣的代碼)帶來的CPU資源閒置,注意這裏沒有浪費CPU資源,去掉sleep(1)就是純浪費了。

阻塞在什麼時候發生呢?一般是等待IO操作(磁盤,數據庫,網絡等等)。此時如果單線程,CPU會幹轉不幹實事(與本程序無關的事情都算不幹實事,因爲執行其他程序對我來說沒意義),效率低下(針對這個程序而言),例如一個IO操作要耗時10毫秒,CPU就會被阻塞接近10毫秒,這是何等的浪費啊!要知道CPU是數着納秒過日子的。

所以這種耗時的IO操作就用一個線程Thread去代爲執行,創建這個線程的函數(代碼)部分不會被IO操作阻塞,繼續幹這個程序中其他的事情,而不是乾等待(或者去執行其他程序)。

同樣在這個單核時代,多線程的這個消除阻塞的作用還可以叫做“併發”,這和並行是有着本質的不同的。併發是“僞並行”,看似並行,而實際上還是一個CPU在執行一切事物,只是切換的太快,我們沒法察覺罷了。例如基於UI的程序(俗話說就是圖形界面),如果你點一個按鈕觸發的事件需要執行10秒鐘,那麼這個程序就會假死,因爲程序在忙着執行,沒空搭理用戶的其他操作;而如果你把這個按鈕觸發的函數賦給一個線程,然後啓動線程去執行,那麼程序就不會假死,繼續相應用戶的其他操作。但是,隨之而來的就是線程的互斥和同步、死鎖等問題,詳細見有關文獻

http://blog.csdn.net/delacroix_xu/article/details/5928121

發佈了27 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章