1. 程式人生 > >深入理解計算機系統 第十二章 並發編程

深入理解計算機系統 第十二章 並發編程

處理器 三種 上進 線程 情況 文件 虛擬地址 邏輯 描述符

如果邏輯控制流在時間上重疊,那麽它們就是並發的(concurrent)

這種常見的現象稱為並發(concurrency),出現在計算機系統的許多不同層面上。

並發不僅僅局限於內核,它也可以在應用程序中扮演重要角色。

應用級並發在以下情況中都是很有用的:

1、訪問慢速 I/O 設備

當一個應用正在等待來自慢速 I/O 設備(例如磁盤)的數據到達時,內核會運行其它進程,使 CPU 保持繁忙。每個應用都可以按照類似的方式,通過交替執行 I/O 請求和其他有用的工作來利用並發。

2、與人交互

和計算機交互的人要求計算機有同時執行多個任務的能力

3、通過推遲工作來降低延遲

4、服務多個網絡客戶端

一個並發服務器,可以為每個客戶端創建一個單獨的邏輯控制流。這就允許服務器同時為多個客戶端服務,並且也避免了慢速客戶端獨占服務器

5、在多核機器上進行並行計算

被劃分成並發流的應用程序通常在多核機器上比在單處理器機器上運行得快,因為這些流會並行執行,而不是交錯執行

使用應用級並發的應用程序稱為並發程序,現代操作系統提供了三種基本的構造並發程序的方法:

1、進程。

用這種方法,每個邏輯控制流都是一個進程,由內核來調度和維護。因為進程有獨立的虛擬地址空間,想要和其他流通信,控制流必須使用某種顯示的進程間通信(interprocess communication,IPC)機制

2、I/O 多路復用

在這種形式的並發編程中,應用程序在一個進程的上下文中顯示地調用它們自己的邏輯流。邏輯流被模型化為狀態機,數據到達文件描述符後,主程序顯示地從一個狀態轉換到另一個狀態。因為程序是一個單獨的進程,所以所有的流都共享同一個地址空間

3、線程

線程是運行在一個單一進程上下文中的邏輯流,由內核進行調度。可以把線程看成是其他兩種方式的混合體,像進程流一樣由內核進行調度,而像 I/O 多路復用一樣共享一樣共享同一個虛擬地址空間

深入理解計算機系統 第十二章 並發編程