讀書筆記:《深入理解計算機系統》 之 第十二章 併發編程

在現代系統中,進程是切換執行的。舉個例子,我們一邊聽音樂一邊瀏覽網站,看起來我們是同時執行的,其實是切換執行的,那爲什麼瀏覽網站的時候音樂還在播放呢,簡單的來說是因爲系統中緩衝了一些資源。

以上的舉例是建立在單處理器的基礎上,隨着科技的發展,現在我們的電腦一般都是多核處理器,也就是說可以真的做到併發執行。

再談一下並行與併發這兩個概念,併發與處理器的個數沒有關係,只要兩個邏輯控制流有重疊或者交錯就都是併發.並行是併發的一個特例.並行是指多個處理器同時執行。

 

但是併發不僅僅侷限於內核,它在應用程序中也可以扮演重要角色。使用應用級併發的應用程序成爲併發程序,現代操作系統提供了三種基本的構造基本併發程序的方法,分別是基於進程的併發編程,基於I/O多路複用的併發編程,基於線程的併發編程。

 

基於進程的併發編程,一個比較常見的方法是在父進程中接受客戶端的連接請求,然後創建一個新的子進程爲每個客戶端提供服務。

而基於I/O多路複用的併發編程,基本的思路是使用一個select函數,要求內核掛起進程,只有在一個或多個I/O事件發生後,纔將控制返回給應用程序。是一種事件驅動設計。

而基於線程的併發編程,是上面兩種方法的混合。基於線程的邏輯流結合了基於進程和基於I/O多路複用的流的特性。同進程一樣,線程由內核自動調度,並且內核通過一個整數ID來識別線程。同基於I/O多路複用的流一樣,多個線程運行在單一進程的上下文中,因此共享這個進程虛擬空間的所有內容,包括它的代碼,數據,堆,共享庫和打開的文件。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章