程序員必須清楚的進程和線程都在這裏了

進程

  • 當咱們打開咱們的電腦控制面板的時候就會看到進程的存在,咱們平常所用的軟件就是以進程的形式活動在咱們的電腦中,以下圖所示: 平常咱們看到的進程

爲何要有進程

  • 這裏須要對操做系統的歷史有所瞭解,在計算機發展的早期階段操做系統只能支持跑一個程序,隨着計算機的發展cpu的能力愈來愈強,內存愈來愈大能夠存放更多的運行程序。必然要在內存中裝入多個程序,如何處理呢?多個程序使用的數據如何辨別?當一個程序暫停後,隨後怎麼恢復到它以前執行的狀態呢?
  • 這時候,人們就發明了進程,用進程來對應一個程序,每一個進程來對應必定的內存地址空間,而且只能使用它本身的內存空間,各個進程之間互不干擾。進程同時也保存了程序每一個時刻的運行狀態,爲進程切換提供了可能。當進程暫停時,它會保存當前進程的狀態(進程標識,進程使用的資源等),在下一次切換回來時根據以前保存的狀態進行恢復,接着繼續執行。

進程的定義

狹義定義:進程就是一段程序的動態執行過程。 廣義定義:一個具備必定獨立功能的程序在一個數據結合的一次動態執行過程。它是操做系統動態執行的基本單元,在 傳統的操做系統中,進程既是基本的分配單元,也是基本的執行單元。

爲了更好的理解進程的概念,有必要對操做系統中的"進程"和"程序"這兩個概念作一個對比。 進程概念圖解算法

進程與程序的聯繫

  • 程序是產生進程的基礎併發

    • 這一點從進程的定義中就能夠得出進程是動態執行程序的過程。
  • 程序的每次運行構成不一樣的進程ide

    • 這一點你們可能會不明白,生活中咱們能夠在電腦上同時打開兩個qq或者其餘軟件。每次打開就有一個新的進程產生,對應的程序其實就一份。
  • 進程是程序的功能提現spa

    • 功能就是程序的執行結果或者效果,執行過程就是經過進程提現的。

進程與程序的區別

程序操作系統

  • 是一個靜態的概念,是指存儲在文件中的程序。如源程序,可執行程序等。
  • 是永久的,只要用戶不主動刪除一直存放在咱們磁盤中。

進程.net

  • 是一個動態的概念。一個進程就表明一個正在執行的程序。當用戶運行一個程序時系統就爲它創建一個進程,併爲該進程分配內存,Cpu和其餘資源。
  • 進程是暫時的,當程序結束運行時,爲該程序本次執行所創建的進程就消亡了。

生活中作菜(酸辣土豆絲)的例子: 菜譜(程序): 土豆、蔥薑蒜、花椒、乾紅辣椒、鹽、糖、醋 作菜人(Cpu) : 學長(這道菜仍是會作的) 炒菜(進程): 這裏須要注意進程是炒菜這個過程,而不是酸辣土豆絲這道菜。線程

因爲用戶使用計算機的主要方式就是執行程序,瞭解進程的基本概念將有助於更加清晰地瞭解程序執行過程當中發生的一些事情。 不存在的3d

線程

自從60年代提出進程的概念以來,在操做系統中一直都是以進程做爲獨立的基本單元,直到80年代人們又提出了更小的獨立運行的基本單位: 線程blog

爲何使用線程?

  • 迄今爲止咱們討論的進程概念都在暗示: 每一個進程都是有單一控制流,每一個進程只能幹一件事情,上述的作菜案例來講學長只能作菜,不能邊聽歌邊作菜。很顯然這和咱們目前所使用的相關軟件是不符的。咱們但願在一個進程中作多個事情。因而就有線程的概念提出。
  • 線程能夠知足在一個進程中處理多個事情。

什麼是線程?

wiki: 線程(英語:thread)是操做系統可以進行運算調度的最小單位。大部分狀況下,它被包含在進程之中,是進程中的實際運做單位。一條線程指的是進程中一個單一順序的控制流,一個進程中能夠併發多個線程,每條線程並行執行不一樣的任務。在Unix System V及SunOS中也被稱爲輕量進程(lightweight processes),但輕量進程更多指內核線程(kernel thread),而把用戶線程(user thread)稱爲線程。

如何理解操做系統可以運行運算的最小單位?進程

  • 由於在現代操做系統中,同時運行着多個應用程序,而CPU的資源是有限的。如何高效的運行應用程序,併爲其分配系統資源包括硬件資源和軟件資源等,就是操做系統的調度。經過操做系統的調度算法,可以提升資源的利用率。
  • 現代的操做系統包括了進程和線程這兩種調度單位。進程是指程序中正在運行的一個應用程序。線程是系統分配處理器時間資源的基本單位。對於操做系統而言,其調度單元是線程。一個進程至少包括一個線程,一般將該線程稱爲主線程。

經過下面兩張加深一下進程和線程的概念: 進程和線程

結尾

  • 學長雖然年齡上佔優,能力畢竟有限有理解不到位的地方。但願你們及時指出。歡迎在評論區留言討論。

參考資料

相關文章
相關標籤/搜索