1. 程式人生 > >56----程序執行緒的概念

56----程序執行緒的概念

程序

  一個程式執行起來的狀態就是一個程序(一個程式在一個數據集上的一次動態執行過程)

  最開始只有一個CPU時,無法做到同時執行多個程式,就通過快速切換來進行

  切換,就涉及到了狀態的儲存,狀態的恢復,加上程式A與程式B所需要的系統資源(記憶體,硬碟,鍵盤等等)是不一樣的。自然而然的就需要有一個東西去記錄程式A和程式B分別需要什麼資源,怎樣去識別程式A和程式B等等(比如讀書)。

  舉一例說明程序:   想象一位有一手好廚藝的電腦科學家正在為他的女兒烘製生日蛋糕。他有做生日蛋糕的食譜,廚房裡有所需的原料:麵粉、雞蛋、糖、香草汁等。在這個比喻中,做蛋糕的食譜就是程式(即用適當形式描述的演算法)電腦科學家就是處理器(cpu),而做蛋糕的各種原料就是輸入資料。程序就是廚師閱讀食譜、取來各種原料以及烘製蛋糕等一系列動作的總和。現在假設電腦科學家的兒子哭著跑了進來,說他的頭被一隻蜜蜂蟄了。電腦科學家就記錄下他照著食譜做到哪兒了(儲存程序的當前狀態),然後拿出一本急救手冊,按照其中的指示處理蟄傷。這裡,我們看到處理機從一個程序(做蛋糕)切換到另一個高優先順序的程序(實施醫療救治),每個程序擁有各自的程式(食譜和急救手冊)。當蜜蜂蟄傷處理完之後,這位電腦科學家又回來做蛋糕,從他離開時的那一步繼續做下去。

執行緒

  執行緒的出現是為了降低上下文切換的消耗,提高系統的併發性,並突破一個程序只能幹一樣事的缺陷,使到程序內併發成為可能。

  一個程式能處理多個任務,對於這一個程序就有了多個任務

  假設,一個文字程式,需要接受鍵盤輸入,將內容顯示在螢幕上,還需要儲存資訊到硬碟中。若只有一個程序,勢必造成同一時間只能幹一樣事的尷尬(當儲存時,就不能通過鍵盤輸入內容)。若有多個程序,每個程序負責一個任務,程序A負責接收鍵盤輸入的任務,程序B負責將內容顯示在螢幕上的任務,程序C負責儲存內容到硬碟中的任務。這裡程序A,B,C間的協作涉及到了程序通訊問題,而且有共同都需要擁有的東西——-文字內容,不停的切換造成效能上的損失。若有一種機制,可以使任務A,B,C共享資源,這樣上下文切換所需要儲存和恢復的內容就少了,同時又可以減少通訊所帶來的效能損耗,那就好了。這種機制就是執行緒。 

  程序下的執行緒都可以訪問程序下的所有資源(共用一塊資料集),就可以把文字編輯器做一個程序,ABC作為三個執行緒

程序執行緒的關係

 程序是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。或者說程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位。 執行緒則是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位。

  程序是一個最小的資源管理單元

  一個程序最少有一個執行緒來執行,就是主執行緒,執行緒是最小的執行單元

  

程序和執行緒的關係:

(1)一個執行緒只能屬於一個程序,而一個程序可以有多個執行緒,但至少有一個執行緒。 (2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。 (3)CPU分給執行緒,即真正在CPU上執行的是執行緒。

 程序執行緒的切換原則

  切換操作:作業系統

  原則:

    1.時間片   (在達到固定時間時進行切換)

    2.遇到IO操作  (自己停下來了就進行切換)

    3.優先順序切換  

並行併發

並行處理(Parallel Processing)是計算機系統中能同時執行兩個或更多個處理的一種計算方法。並行處理可同時工作於同一程式的不同方面。並行處理的主要目的是節省大型和複雜問題的解決時間。併發處理(concurrency Processing):指一個時間段中有幾個程式都處於已啟動執行到執行完畢之間,且這幾個程式都是在同一個處理機(CPU)上執行,但任一個時刻點上只有一個程式在處理機(CPU)上執行

併發的關鍵是你有處理多個任務的能力,不一定要同時。並行的關鍵是你有同時處理多個任務的能力。所以說,並行是併發的子集

同步和非同步

  在計算機領域,同步就是指一個程序在執行某個請求的時候,若該請求需要一段時間才能返回資訊,那麼這個程序將會一直等待下去,直到收到返回資訊才繼續執行下去;非同步是指程序不需要一直等下去,而是繼續執行下面的操作,不管其他程序的狀態。當有訊息返回時系統會通知程序進行處理,這樣可以提高執行的效率。舉個例子,打電話時就是同步通訊,發短息時就是非同步通訊。