舉例說明什么是進程
一個計算機科學家的女兒即將過生日。科學家在廚房中,使用面粉、雞蛋、奶油等食材按照制作蛋糕的食譜,制作蛋糕。突然,他聽到兒子凄慘的哭聲。沖出廚房,他發現兒子玩小刀割破了手指。科學家記錄下制作蛋糕的當前步驟,找出急救箱和急救手冊,按照急救說明幫兒子處理傷口。處理完畢之后,科學家回到廚房,找到之前記下的蛋糕制作筆記,接著之前的進度繼續制作蛋糕。
這個例子中,存在兩個進程。第一個進程是,科學家、蛋糕食譜、制作蛋糕的原料。第二個進程是,科學家、急救手冊和急救箱。
進程的科學定義
進程(process)就是一個運行中的程序實例。科學家記錄下的制作蛋糕的當前步驟,就是“上下文”。從制作蛋糕轉換到包扎傷口,是“上下文切換”。
進程造成的兩個假象
進程提供了兩個關鍵抽象。一個獨立的邏輯控制流,它讓我們覺得我們的程序獨占一個處理器。一個私有的地址空間,它讓我們覺得我們的程序獨占使用一個存儲器系統。
與進程相關的概念
線程
線程(thread)是運行在進程中的一個邏輯控制流。它與進程的區別是,與其他線程共享地址空間。
在進程之外,再創造“線程”的概念,有三點原因。
不必考慮中斷、定時器和上下文切換,只需考察并行進程。同一個進程的線程之間能共享同一個地址空間和所有可用數據。
線程比進程更輕量級,比進程更容易創建和撤銷。
多線程能提升I/O密集型應用程序。(?)
充分發揮多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