如何理解多線程

此內容爲轉載
每一個程序可以包含至少一個線程,而多個線程之間可以“併發”執行。
在介紹線程前先來用生活中最常見的一個小例子來理解什麼是線程:

   假如你去一家餐館吃飯,那家餐館只有一個服務員,所以這個唯一的服務員給你點菜的時候,別的去餐館吃飯的人就得等着。但是如果這個餐館有多個服務員的話,那麼在同一時刻就可以給多個去餐館吃飯的人點菜,這裏舉A、B兩個服務員,分別接待甲、乙兩個顧客,而每個顧客點了不同的三道菜。

   上面例子中的餐館可以理解成一個程序,而A、B兩個服務員可以理解成兩個線程,後廚做菜的廚師可以看做是CPU(假設只有一個CPU)。

    從A、B兩個服務員同時接待甲、乙兩個顧客這個表象來看線程是“同步”、“併發”執行的,但是在廚師做菜的過程中還是有先後之分的,只是廚師會把甲乙兩個顧客點的菜分開來做,做完甲的一道菜後立刻開始做乙的一道菜,這樣不停地切換着做甲乙兩個顧客點的菜。而在甲乙顧客看來他們桌上都有着菜吃,誤以爲他們的菜是同時做出來的。

    而計算機裏的多線程也是如此,cpu會分配給每一個線程只有極少的運行時間,時間一到就交出運行權,所有線程被快速的切換執行,因爲cpu的執行速度非常的快,所以在執行的過程中我們可以簡單的認爲這些線程是“併發”執行的。

    上面廚師做菜的原則是:不同的切換顧客們點的菜。假設廚師做菜的原則變了,是單顧客原則:給一位顧客做完所有的菜後再給別的顧客做菜,就是說先一下子把甲點的三道菜全做出來後再去做乙點的那三道菜,這樣的話如果廚師在做甲的某一道菜時發現甲點的那道菜的原料沒有了,那麼乙的菜就得一直等着。

     如果是在計算機中,單顧客原則執行線程的話,當一個惡性的線程運行不下去時,計算機就會出現死機的現象,這時候只能重啓。

     上面介紹的廚師做菜的兩種原則分別代表着計算機中線程的兩種調度形式:搶佔式調度和非搶佔式調度。應用中我們一般用搶佔式調度(即廚師的第一種做菜原則)。

   上面就是我對多線程在實際生活中的理解,希望能給剛剛接觸多線程的朋友一些幫助,這個比喻如果有不妥或者不到位之處還請留言指出。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章