1.介紹 Program、Process、Thread 之間的關係:
當我們在把程式寫完並且把程式 Compiler 出來成可以執行的程式這個就會稱為 Program,例如是 javac test1.java 這個檔案會編譯成 test1.class 的檔案就是一個 Program,當我們執行了 test1.class 這個程式就會被稱為 Process,例如 java test1 的指令。java test1 的指令可以讓我們執行很多次,因此一個 Program 會可以有多個 Process。
在執行一個 Process 大概會有 Memory Space 和 Thread 這二個部份, Memory Space 用來進行變數的存取, Thread 就是屬於 CPU 運算的部份。Process 和 Process 之間的變數不能互相共享使用。一個 Process 可以啟動多個 Thread 的 CPU 資源,Thread 和 Thread 之間的變數可以互相共享使用,另外 Thread 又被稱為 Light Weight Process 輕量的 Process。
2.以下是拿多執行緒常做的事:
用來做 Service 使用:當有一個 Client 的 Request 連進來的時侯,就會在 Service 的 Process 上啟動一個 Thread,結束連線時就會把 Thread 關掉。
當遇到很多的 IO 處理時:例如要把一個很大的資料寫入到資料庫或是 File System 時,如果只用一個 main 程式去做的話,就會阻礙到後面程式的執行,所以應該要另外去開一個 Thread 去做寫入資料的動作,才能增加程式的執行效率。
3.Concurrent 和 Parallel 之間的差異:
Concurrent 和 Parallel 常常會讓人搞不太清礎,以下來簡單的介紹:
Concurrent:Concurrent 主要是一個 CPU 會去做多件事,但是同一個時間點之內只會做一件事,舉例來說一個人可能會去做 Job1、Job2、Job3這三件事,但是在一個時間點內只會做一個 Job,像是早上做 Job1、下午做 Job2、晚上做 Job3不斷的切換。Concurrent 的目標是希望能做更多的事。
Parallel: Parallel 主要是會有多個 CPU 在同一個時間點內會去做多件事,例如會有三個人同時分別在做 Job1、Job2、Job3 的事情。因此 Parallel 的目標是希望能把事情更快速的做完。