線程、進程與程序+並行與併發

線程:併發性好、資源消耗少;資源管理和保護不太適合,由於資源是共享的。多線程

進程:方便資源管理和回收;併發性不如線程,資源消耗大。併發

 

線程:cpu 調度基本單位。比進程更小的獨立運行單位,同一進程中可有多個線程併發執行。函數

進程:cpu 分配資源基本單位。線程

 

並行:兩個或多個事件,在同一時刻發生。進程

併發:兩個或多個事件,在同一時間間隔發生。事件

 

各個線程能夠共享進程資源(內存地址、文件 Io),也能夠獨立調度。線程是 CPU 調度的基本單位。內存

 

進程是具備必定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位。資源

  線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。同步

  進程和線程的關係:多進程

  (1)一個線程只能屬於一個進程,而一個進程能夠有多個線程,但至少有一個線程。

  (2)資源分配給進程,同一進程的全部線程共享該進程的全部資源。

  (3)處理機分給線程,即真正在處理機上運行的是線程。

  (4)線程在執行過程當中,須要協做同步。不一樣進程的線程間要利用消息通訊的辦法實現同步。

  進程與線程的區別:

  (1)調度:線程做爲調度和分配的基本單位,進程做爲擁有資源的基本單位

  (2)併發性:不只進程之間能夠併發執行,同一個進程的多個線程之間也可併發執行

  (3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但能夠訪問隸屬於進程的資源.

  (4) 系統開銷:在建立或撤消進程時,因爲系統都要爲之分配和回收資源,致使系統的開銷明顯大於建立或撤消線程時的開銷。可是進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不一樣執行路徑。線程有本身的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個進程死掉就等於全部的線程死掉,因此多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些

  結論:

  (1)線程是進程的一部分

  (2)CPU調度的是線程

  (3)系統爲進程分配資源,不對線程分配資源

 

同一進程間的線程究竟共享哪些資源呢,而又各自獨享哪些資源呢?

共享的資源有
a. 堆  因爲堆是在進程空間中開闢出來的,因此它是理所固然地被共享的;所以new出來的都是共享的(16位平臺上分全局堆和局部堆,局部堆是獨享的)
b. 全局變量 它是與具體某一函數無關的,因此也與特定線程無關;所以也是共享的
c. 靜態變量 雖然對於局部變量來講,它在代碼中是「放」在某一函數中的,可是其存放位置和全局變量同樣,存於堆中開闢的.bss和.data段,是共享的
d. 文件等公用資源  這個是共享的,使用這些公共資源的線程必須同步。Win32 提供了幾種同步資源的方式,包括信號、臨界區、事件和互斥體。
獨享的資源有
a. 棧 棧是獨享的
b. 寄存器  這個可能會誤解,由於電腦的寄存器是物理的,每一個線程去取值難道不同嗎?其實線程裏存放的是副本,包括程序計數器PC
相關文章
相關標籤/搜索