進程(Process)的官方解釋,是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操做系統結構的基礎。
相對於程序而言,進程是一個動態的概念。可能有人不能理解動態的內涵,因此讓咱們來舉個栗子:工具
一個母親想給她的女兒烹飪一個蛋糕,因而她找來一本烹飪書籍,上面記載着作蛋糕的食譜:須要麪粉、雞蛋、蜂蜜等等原料。因而她來到廚房,準備好食材和器皿、烤箱等製做工具,開始執行作蛋糕這個活動。操作系統
在這個比喻裏,這位母親就象徵着CPU,烹飪書籍上對製做蛋糕的流程,就是保存在內存裏靜態的程序。而那些食材,則表明程序所需的數據。而進程,則表示整個製做蛋糕的過程。線程
對於單核處理器而言,一個CPU在一個時間點只能處理一個進程。每當一個進程在CPU裏被執行時,其餘的進程都處於等待狀態。code
沿用上面的例子,母親在作蛋糕的過程當中,她的兒子忽然跑過來,告訴她本身被蜜蜂蜇了,這時這位母親判斷了事情的輕重緩急後,暫停了製做蛋糕的流程(暫停優先級低的進程),並記住了本身作到了哪一個環節(好比剛打完雞蛋),開始處理兒子頭上的傷口(開始執行新進程)。她找來一本《家用急救指南》(新進程中的程序),按照書上記載的流程,給兒子包紮。處理完兒子的這個緊急事件以後,這位母親又回到作蛋糕的流程裏,她回憶起本身剛纔正在打雞蛋,因而從以前暫停的步驟開始(取出內存中記載的狀態),繼續執行作蛋糕任務。進程
總而言之,進程表明的是一系列動做的執行,包括程序的運行、輸出、輸出和狀態的記錄。事件
線程(Thread)是創建在進程的基礎上的一次程序運行單位,是cpu調度的最小單位
在一些文獻中,線程又被稱爲微進程(miniprocess),這意味着,線程在不少方面和進程是相似的,惟一不一樣的,是線程之間共享了相同的內存空間(相對於一個進程而言),而進程與進程之間,則擁有各自獨立的內存空間。換句話說,一個進程裏能夠有一個或多個線程,這些線程共享着內存爲進程分配的空間。ip
咱們爲何須要線程?內存
讓咱們來考慮一個文字處理器的例子。在文字處理器打開的一篇文檔中,一共有800頁。假如文檔做者此時刪除了第一頁的某段內容,而後他但願跳轉到第600頁查看該頁對應的篇幅。對於文字處理器而言,因爲第一頁的文字有了改動,它並不知道此時第600都有哪些文字,所以須要對600頁以前的文字從新排版計算,而後獲得第600頁的內容。這樣一來,當用戶敲下直達第600頁的命令後,須要等好一下子才能看到內容,這顯然不是咱們但願的。而線程此時就可以派上用場。假設此時有兩個線程,一個負責用戶交互,另外一個負責排版。當用戶在第一時刻更改了文檔內容後,負責用戶交互的線程會通知排版線程,告訴它刪掉了哪些東西,排版線程獲得信息後,開始在後臺瘋狂地計算,這樣一來,在用戶下達跳轉至600頁的命令以前,排版線程極可能已經計算出第600頁要展現的是哪些內容了。資源
總結一下進程和線程的概念,主要有如下幾點須要瞭解:
1.CPU裏一個時刻只能執行一個任務,即進程
2.每一個進程之間的內存空間是獨立的
3.每一個進程裏包含至少一個線程,而且線程之間共享着這個進程的內存空間文檔
本篇文章引用瞭如下文獻的內容:
Modern Operating Systems——by Andrew S. Tanenbaum / Herbert Bos