[1]進程基礎知識

舉例說明什么是進程

一個計算機科學家的女兒即將過生日。科學家在廚房中,使用面粉、雞蛋、奶油等食材按照制作蛋糕的食譜,制作蛋糕。突然,他聽到兒子凄慘的哭聲。沖出廚房,他發現兒子玩小刀割破了手指。科學家記錄下制作蛋糕的當前步驟,找出急救箱和急救手冊,按照急救說明幫兒子處理傷口。處理完畢之后,科學家回到廚房,找到之前記下的蛋糕制作筆記,接著之前的進度繼續制作蛋糕。

這個例子中,存在兩個進程。第一個進程是,科學家、蛋糕食譜、制作蛋糕的原料。第二個進程是,科學家、急救手冊和急救箱。

進程的科學定義

進程(process)就是一個運行中的程序實例。科學家記錄下的制作蛋糕的當前步驟,就是“上下文”。從制作蛋糕轉換到包扎傷口,是“上下文切換”。

進程造成的兩個假象

進程提供了兩個關鍵抽象。一個獨立的邏輯控制流,它讓我們覺得我們的程序獨占一個處理器。一個私有的地址空間,它讓我們覺得我們的程序獨占使用一個存儲器系統。

與進程相關的概念

線程

線程(thread)是運行在進程中的一個邏輯控制流。它與進程的區別是,與其他線程共享地址空間。

在進程之外,再創造“線程”的概念,有三點原因。

  1. 不必考慮中斷、定時器和上下文切換,只需考察并行進程。同一個進程的線程之間能共享同一個地址空間和所有可用數據。

  2. 線程比進程更輕量級,比進程更容易創建和撤銷。

  3. 多線程能提升I/O密集型應用程序。(?)

  4. 充分發揮多CPU系統的價值。

并發

任何邏輯流在第一條指令開始執行的時間和最后一條指令結束執行的時間的時間段內和其他邏輯流有重疊,這些有重疊的進程被稱為并發進程(concurrent process)。這種一般現象,叫做并發性

進程與線程相關的應用

Apache服務器使用多進程方式,IIS使用多線程方式,Nginx使用多進程和異步機制提供Web服務。

參考資料

《深入理解計算機系統》

進程:P508-8.2

線程:P744-13.3

并發:P510-8.2.1、P732-

《現代操作系統(第3版)》

進程:P47-2.1

線程:P53-2.2

《Nginx高性能Web服務器詳解》

處理并發請求的方式:P54-3.2

CPU-bound(計算密集型) 和I/O bound(I/O密集型)

進程基礎知識

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 又來到了一個老生常談的問題,應用層軟件開發的程序員要不要了解和深入學習操作系統呢? 今天就這個問題開始,來談談操...
    tangsl閱讀 4,172評論 0 23
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • 《在難搞的日子笑出來》 大鵬 “驟然臨之而不驚,無故加之而不怒。” “有夢想不代表有能力,如果誤解這一點,就會很痛...
    桑尼同學Sunny閱讀 587評論 0 0