1. 程式人生 > >[Other]面試復習筆記:線程與進程復習

[Other]面試復習筆記:線程與進程復習

處理機 sse 進程上下文 提高 關系 數據查詢 優點 con 計數器

基本概念

1. 進程的基本概念

線程(thread)是進程(processes)中某個單一順序的控制流,也被稱為輕量進程(lightweight processes)。
進程是表示資源分配的基本單位,又是調度運行的基本單位。

比如: 用戶運行自己的程序,系統就創建一個進程,並為它分配資源,包含各種表格、內存空間、磁盤空間、I/O設備等。

然後,把該進程放人進程的就緒隊列。

進程調度程序選中它,為它分配CPU以及其他有關資源,該進程才真正運行。 所以,進程是系統中的並發運行的單位。

2. 線程的基本概念

在Mac、Windows NT等採用微內核結構的操作系統中,進程的功能發生了變化:它僅僅是資源分配的單位,而不再是調度運行的單位。 在微內核系統中,真正調度運行的基本單位是線程。因此,實現並發功能的單位是線程。 線程是進程中運行運算的最小單位,也就是運行處理機調度的基本單位。 如果把進程理解為在邏輯上操作系統所完畢的任務,那麽線程表示完畢該任務的很多可能的子任務之中的一個。

比如: 如果用戶啟動了一個窗體中的數據庫應用程序。操作系統就將對數據庫的調用表示為一個進程。 如果用戶要從數據庫中產生一份工資單報表,並傳到一個文件裏,這是一個子任務。 在產生工資單報表的過程中。用戶又能夠輸人數據庫查詢請求,這又是一個子任務。 這樣,操作系統則把每一個請求――工資單報表和新輸人的數據查詢表示為數據庫進程中的獨立的線程。 線程能夠在處理器上獨立調度運行。這樣。在多處理器環境下就同意幾個線程各自在單獨處理器上進行。 操作系統提供線程就是為了方便而有效地實現這樣的並發性

引入線程的優點 1. 易於調度。

2. 提高並發性。通過線程可方便有效地實現並發性。進程可創建多個線程來運行同一程序的不同部分。 3. 開銷少。創建線程比創建進程要快,所需開銷非常少。。

4. 利於充分發揮多處理器的功能。

通過創建多線程進程。每一個線程在一個處理器上運行。從而實現應用程序的並發性。使每一個處理器都得到充分運行。

3. 線程的基本狀態

就緒:調用線程的start方法後線程進入就緒狀態
堵塞:線程調度系統將就緒狀態的線程轉為運行狀態
運行:遇到synchronized語句時,由運行狀態轉為堵塞
結束:當線程關聯的代碼運行完後,線程變為結束狀態

4. 線程與進程的差別

線程與進程的差別能夠歸納為下面4點: 1)地址空間:進程間相互獨立,同一進程的各線程間共享。某進程內的線程在其他進程不可見。
2)通信方式:進程間通信IPC,線程間能夠直接讀寫進程數據段(如全局變量)來進行通信。

須要進程同步和相互排斥手段的輔助,以保證數據的一致性。
3)調度切換:線程上下文切換比進程上下文切換要快得多。
4)二者均可並發運行,在多線程OS中,進程不是一個可運行的實體。

簡而言之。一個程序至少有一個進程,一個進程至少有一個線程。

線程的劃分尺度小於進程。使得多線程程序的並發性高。 另外,進程在運行過程中擁有獨立的內存單元,而多個線程共享內存。從而極大地提高了程序的運行效率。 線程在運行過程中與進程還是有差別的。每一個獨立的線程有一個程序運行的入口、順序運行序列和程序的出口。 可是線程不能夠獨立運行。必須依存在應用程序中,由應用程序提供多個線程運行控制。

從邏輯角度來看。多線程的意義在於一個應用程序中,有多個運行部分能夠同一時候運行。 但操作系統並沒有將多個線程看做多個獨立的應用。來實現進程的調度和管理以及資源分配。這就是進程和線程的重要差別。

進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動。進程是系統進行資源分配和調度的一個獨立單位。 線程是進程的一個實體,是CPU調度和分派的基本單位。它是比進程更小的能獨立運行的基本單位。

線程自己基本上不擁有系統資源。僅僅擁有一點在運行中不可缺少的資源(如程序計數器。一組寄存器和棧), 可是它可與同屬一個進程的其他的線程共享進程所擁有的所有資源。 一個線程能夠創建和撤銷還有一個線程;同一個進程中的多個線程之間能夠並發運行。

5. 多線程有幾種實現方法

多線程有兩種實現方法。

一種是繼承Thread類,一種是實現Runnable接口。
同步有兩種方法。

一種同步方法,一種同步代碼。各自是synchronized,wait與notify

6. 多線程同步和相互排斥異同

線程同步是指線程之間所具有的一種制約關系,一個線程的運行依賴還有一個線程的消息。當它沒有得到還有一個線程的消息時應等待,直到消息到達時才被喚醒。 線程相互排斥是指對於共享的進程系統資源,在各單個線程訪問時的排它性。 當有若幹個線程都要使用某一共享資源時,不論什麽時刻最多僅僅同意一個線程去使用。 其他要使用該資源的線程必須等待,直到占用資源者釋放該資源。線程相互排斥能夠看成是一種特殊的線程同步。

[Other]面試復習筆記:線程與進程復習