1. 程式人生 > >一、概念

一、概念

main mage 分配 單位 www. 創建線程 電腦 由於 並行

1、並發和並行

  並行:指兩個或多個時間在同一時刻發生(同時發生);

  並發:指兩個或多個事件在一個時間段內發生。

  

  技術分享圖片

  在操作系統中,安裝了多個程序,並發指的是在一段時間內宏觀上有多個程序同時運行,這在單 CPU 系統中,每一時刻只能有一道程序執行,即微觀上這些程序是分時的交替運行,只不過是給人的感覺是同時運行,那是因為分時交替運行的時間是非常短的。

  而在多個 CPU 系統中,則這些可以並發執行的程序便可以分配到多個處理器上(CPU),實現多任務並行執行,即利用每個處理器來處理一個可以並發執行的程序,這樣多個程序便可以同時執行。

  目前電腦市場上說的多核 CPU,便是多核處理器,核 越多,並行處理的程序越多,能大大的提高電腦運行的效率。

註意:單核處理器的計算機肯定不能並行的處理多個任務,只能是多個任務交替的在單個 CPU 上運行。

回到頂部

2、進程和線程

  進程:是指一個內存中運行的應用程序,每個進程都有一個獨立的內存空間,一個應用程序可以同時運行多個進程;進程也是程序的一次執行過程,是系統運行程序的基本單位;系統運行一個程序即是一個進程從創建、運行到消亡的過程。

  線程:進程內部的一個獨立執行單元;一個進程可以同時並發的運行多個線程,可以理解為一個進程便相當於一個單 CPU 操作系統,而線程便是這個系統中運行的多個任務。

我們可以再電腦底部任務欄,右鍵----->打開任務管理器,可以查看當前任務的進程和線程

  技術分享圖片

線程選項:

  技術分享圖片

回到頂部

3、進程與線程的區別

  進程:有獨立的內存空間,進程中的數據存放空間(堆空間和棧空間)是獨立的,至少有一個線程。

  線程:堆空間是共享的,棧空間是獨立的,線程消耗的資源比進程小的多。

註意:1、因為一個進程中的多個線程是並發運行的,那麽從微觀角度看也是有先後順序的,哪個線程執行完全取決於 CPU 的調度,程序員是幹涉不了的。而這也就造成的多線程的隨機性。

   2、Java 程序的進程裏面至少包含兩個線程,主進程也就是 main()方法線程,另外一個是垃圾回收機制線程。每當使用 java 命令執行一個類時,實際上都會啟動一個 JVM,每一個 JVM 實際上就是在操作系統中啟動了一個線程,java 本身具備了垃圾的收集機制,所以在 Java 運行時至少會啟動兩個線程。

   3、由於創建一個線程的開銷比創建一個進程的開銷小的多,那麽我們在開發多任務運行的時候,通常考慮創建多線程,而不是創建多進程。

回到頂部

4、多線程的優勢

  1、進程之間不能共享內存,而線程之間可以共享內存。

  2、系統創建進程需要為該進程重新分配系統資源,創建線程的代價則小的多,因此多任務並發時,多線程效率高。

  3、Java 語言本身內置多線程功能的支持,而不是單純作為底層系統的調度方式,從而簡化了多線程編程。

  註意:多線程是為了同步完成多個任務,不是為了提高程序運行效率,而是通過提高資源使用效率來提高系統的效率。

一、概念