每乙個程式可以包含至少乙個執行緒,而多個執行緒之間可以「併發」執行。
在介紹執行緒前先來用生活中最常見的乙個小例子來理解什麼是執行緒:
假如你去一家餐館吃飯,那家餐館只有乙個服務員,所以這個唯一的服務員給你點菜的時候,別的去餐館吃飯的人就得等著。但是如果這個餐館有多個服務員的話,那麼在同一時刻就可以給多個去餐館吃飯的人點菜,這裡舉a、b兩個服務員,分別接待甲、乙兩個顧客,而每個顧客點了不同的三道菜。
上面例子中的餐館可以理解成乙個程式,而a、b兩個服務員可以理解成兩個執行緒,後廚做菜的廚師可以看做是cpu(假設只有乙個cpu)。
從a、b兩個服務員同時接待甲、乙兩個顧客這個表象來看執行緒是「同步」、「併發」執行的,但是在廚師做菜的過程中還是有先後之分的,只是廚師會把甲乙兩個顧客點的菜分開來做,做完甲的一道菜後立刻開始做乙的一道菜,這樣不停地切換著做甲乙兩個顧客點的菜。而在甲乙顧客看來他們桌上都有著菜吃,誤以為他們的菜是同時做出來的。
而計算機裡的多執行緒也是如此,cpu會分配給每乙個執行緒只有極少的執行時間,時間一到就交出執行權,所有執行緒被快速的切換執行,因為cpu的執行速度非常的快,所以在執行的過程中我們可以簡單的認為這些執行緒是「併發」執行的。
上面廚師做菜的原則是:不同的切換顧客們點的菜。假設廚師做菜的原則變了,是單顧客原則:給一位顧客做完所有的菜後再給別的顧客做菜,就是說先一下子把甲點的三道菜全做出來後再去做乙點的那三道菜,這樣的話如果廚師在做甲的某一道菜時發現甲點的那道菜的原料沒有了,那麼乙的菜就得一直等著。
如果是在計算機中,單顧客原則執行執行緒的話,當乙個惡性的執行緒執行不下去時,計算機就會出現宕機的現象,這時候只能重啟。
上面介紹的廚師做菜的兩種原則分別代表著計算機中線程的兩種排程形式:搶占式排程和非搶占式排程。
應用中我們一般用搶占式排程(即廚師的第一種做菜原則)。
python 多執行緒就這樣
講執行緒之前,先扯一下程序。程式並不能單獨執行,只有將程式裝載到記憶體中,系統為它分配資源才能執行,而這種執行的程式就稱之為程序。程式和程序的區別就在於 在多道程式設計中,我們允許多個程式同時載入到記憶體中,在作業系統的排程下,可以實現併發地執行。這是這樣的設計,大大提高了cpu的利用率。程序的出現...
多執行緒 理解多執行緒(一)
程序 程序是cpu分配資源的基本單位 執行緒 執行緒是cpu排程的基本單位 資源分配給程序,所有執行緒共享該程序的資源 當執行緒數大於cpu的數量,會出現時間片的輪詢。cpu時間片是直接分配給執行緒的,執行緒拿到cpu時間片就能執行了 cpu時間片不是先分給程序然後再由程序分給程序下的執行緒的。所有...
多執行緒理解
本文介紹我對於多執行緒的理解。一 概念 1.作業系統下的多程序場景 但其實上面的情景是屬於作業系統下的多程序,不是單個程式內的多程序,這種多程序跟我們在單個程式內的多執行緒沒有什麼可以比較的。2.執行緒 舉個最簡單例子 我們的任務需要兩個計算型操作 a b 每個操作耗時10秒,如果是單執行緒,這時我...