個人理解是進程是指在系統中正在運行的一個應用程序;程序一旦運行就是進程,或者更專業化來講:進程是指程序執行時的一個實例,線程是進程的一個實體。 |
進程——資源分配的最小單位,線程——程序執行的最小單位。
安全
線程進程的區別體如今幾個方面:服務器
0:由於進程擁有獨立的堆棧空間和數據段,因此每當啓動一個新的進程必須分配給它獨立的地址空間,創建衆多的數據表來維護它的代碼段、堆棧段和數據段,這對於多進程來講十分「奢侈」,系統開銷比較大,而線程不同,線程擁有獨立的堆棧空間,可是共享數據段,它們彼此之間使用相同的地址空間,共享大部分數據,比進程更節儉,開銷比較小,切換速度也比進程快,效率高,可是正因爲進程之間獨立的特色,使得進程安全性比較高,也由於進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不一樣執行路徑。一個線程死掉就等於整個進程死掉。多線程
1:體如今通訊機制上面,正由於進程之間互不干擾,相互獨立,進程的通訊機制相對很複雜,譬如管道,信號,消息隊列,共享內存,套接字等通訊機制,而線程因爲共享數據段因此通訊機制很方便。併發
2:屬於同一個進程的全部線程共享該進程的全部資源,包括文件描述符。而不一樣的進程相互獨立。線程
3:線程又稱爲輕量級進程,進程有進程控制塊,線程有線程控制塊;blog
4:線程一定也只能屬於一個進程,而進程能夠擁有多個線程並且至少擁有一個線程;隊列
5:體如今程序結構上,舉一個簡明易懂的列子:當咱們使用進程的時候,咱們不自主的使用if else嵌套來判斷pid,使得程序結構繁瑣,可是當咱們使用線程的時候,基本上能夠甩掉它,固然程序內部執行功能單元須要使用的時候仍是要使用,因此線程對程序結構的改善有很大幫助。進程
進程與線程的選擇取決如下幾點:內存
0:須要頻繁建立銷燬的優先使用線程;由於對進程來講建立和銷燬一個進程代價是很大的。資源
1:線程的切換速度快,因此在須要大量計算,切換頻繁時用線程,還有耗時的操做使用線程可提升應用程序的響應
2:由於對CPU系統的效率使用上線程更佔優,因此可能要發展到多機分佈的用進程,多核分佈用線程;
3:並行操做時使用線程,如C/S 的服務器端併發線程響應用戶的請求;
4:須要更穩定安全時,適合選擇進程;須要速度時,選擇線程更好。