程序:一組指令的有效集合
進程:程序的執行就是進程。也可以把進程看成一個獨立的程序,在內存中有其對應的代碼空間和數據空間,一個進程所擁有的數據和代碼只屬於自己。進程是資源分配的基本單位,也是調度運行的基本單位。
線程:線程被人們認為是輕量級的進程,它是進程中單獨運行的一路程序。換句話說,就是一個進程可以包含多個線程,並且至少有一個主線程,同時同一進程的線程共享該進程的代碼和數據。於此同時,每一個線程又都有自己的堆棧,這些堆棧對於線程來說是私有的。線程是處理機調度的基本單位。
那為什麼要引入線程呢?
1、便於調度
2、線程可以共享進程的數據和代碼,從而比進程需要通過消息才能通信來得更加簡單。啟動和切換的速度也比進程快。
3、具有高並發性,可以啟動多個線程執行同程序的不同部分。
4、充分利用處理器的功能。讓每一個處理器上運行不同線程,從而實現應用程序的並發性。
程序和進程的區別
1、程序是靜態的,它知識一組冰冷的指令的集合,不具有任何的運行意義。而進程是程序運行在數據集上的動態過程,進程是一個動態實體,它應創建而產生,應調度執行,應等待資源或者是事件而處於等待狀態,應完成了任務而被撤銷,它有自己的生命周期,它反應了程序在數據集上運行的全部動態過程。
2、進程和程序並不是一一對應的關系,相同的程序運行在不同的數據集上就是不同的進程。
3、進程還具有並發性和交往性,而程序卻是封閉的。
進程和線程的區別
1、一個進程可以擁有多個線程,而一個線程同時只能被一個進程所擁有。
2、進程是資源分配的基本單位,線程是處理機調度的基本單位,所有的線程共享其所屬進程的所有資源與代碼。
3、線程執行過程之中很容易進行協作同步,而進程需要通過消息通信進行同步。
4、線程的劃分尺度更小,並發性更高。
5、線程共享進程的數據的同時,有自己私有的的堆棧。
6、線程不能單獨執行,但是每一個線程都有程序的入口、執行序列以及程序出口。它必須組成進程才能被執行。