1. 程式人生 > >多執行緒不能不知道的之單執行緒和多執行緒的比較

多執行緒不能不知道的之單執行緒和多執行緒的比較

早期的計算硬體十分複雜,但是作業系統執行的功能確十分的簡單。那個時候的作業系統在任一時間點只能執行一個任務,也就是同一時間只能執行一個程式。多個任務的執行必須得輪流執行,在系統裡面進行排隊等候。

栗子君有話說

例子1,你正在通過你的web瀏覽器檢視一些精彩的文章,你需要把好的文章給下載下來,可能有些非常精彩的文章你需要收藏起來,你就用你的印表機列印這些線上的文章。在這裡,瀏覽器一邊下載HTML格式的文章,一邊還要列印文章。這就是一個程式同時執行多個任務,每個任務分配一個執行緒來完成。

例子2,大家是否有在食堂吃飯的經歷,尤其是學校裡面的食堂。學生有訪問高峰,這就需要賣飯的大媽,身手矯健,要記下學生點的飯,之後一邊做飯,一邊裝飯。如果生意實在太好,可以多僱人手,一起幫著賣飯。

一個食堂大媽就是程序,記選單,做飯,裝飯這些動作就是程序中執行緒。如果想要快速完成這些動作,食堂大媽就要在記選單,做飯,裝飯之間不停的切換,這個就是多執行緒。如果增加人手這個就相當於計算機增加cpu核心,他們都可以獨立執行執行緒,這也是多執行緒。

執行緒建立原理

作業系統建立了程序後,會建立一個執行緒執行程序中的程式碼,這也就是主執行緒。主執行緒在執行過程中,可能會建立其他執行緒(輔助執行緒),這些建立的執行緒又可以建立其他執行緒,這樣就使得多個執行緒在同一個程序中執行。每個執行緒都獨立執行,共享程序提供的各種資源,如程式碼、資料、虛擬地址空間等,每個執行緒可以執行程序中的不同程式碼,程序中的同一段程式碼也可以由多個執行緒執行(可以同時被多個執行緒訪問的程式碼、資料等資源就是臨界資源)。

執行緒就是程式中的一個執行路徑,它在程序上下文中執行,有一定的生命週期。

執行緒是這樣一種機制,它允許在程式中併發執行多個指令流,每個指令流都稱為一個執行緒,彼此間互相獨立。執行緒又稱為輕量級程序,它和程序一樣擁有獨立的執行控制,由作業系統負責排程,區別在於執行緒沒有獨立的儲存空間,而是和所屬程序中的其它執行緒共享一個儲存空間,這使得執行緒間的通訊遠較程序簡單。

多個執行緒的執行是併發的,也就是在邏輯上“同時”,而不管是否是物理上的“同時”。如果系統只有一個CPU,那麼真正的“同時”是不可能的,但是由於CPU的速度非常快,使用者感覺不到其中的區別,因此我們也不用關心它,只需要設想各個執行緒是同時執行即可。

單執行緒和多執行緒的比較

多執行緒和傳統的單執行緒在程式設計上最大的區別在於,由於各個執行緒的控制流彼此獨立,使得各個執行緒之間的程式碼是亂序執行的,由此帶來的執行緒排程,同步等問題

      單執行緒和多執行緒執行效率,有時往往是因為執行緒中斷,多執行緒可以執行其他的無關的執行緒,提高cpu的利用率。整體來看的話,是多執行緒對資源的利用率高,所有才會覺得多執行緒執行時間比單執行緒短

多執行緒的缺點

      上面說了很多基本上都是多執行緒帶來的優點,這裡說點它的缺點。如果一個程式有很多的執行緒,那麼其他程式的執行緒必然只能佔用更少的CPU時間;而且大量的CPU時間是用於執行緒排程的;作業系統也需要足夠的記憶體空間來維護每個執行緒的上下文資訊;因此,大量的執行緒會降低系統的執行效率。

關於多執行緒這一塊還得再寫個demo,後面會分享,歡迎大家閱讀!