1. 程式人生 > >多執行緒——從生活中理解什麼是多執行緒

多執行緒——從生活中理解什麼是多執行緒

     每一個程式可以包含至少一個執行緒,而多個執行緒之間可以“併發”執行。

       在介紹執行緒前先來用生活中最常見的一個小例子來理解什麼是執行緒:

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

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

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

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

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

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

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

       上面就是我對多執行緒在實際生活中的理解,希望能給剛剛接觸多執行緒的朋友一些幫助,這個比喻如果有不妥或者不到位之處還請留言指出。

轉自:https://blog.csdn.net/yhc0322/article/details/6801074