進程是包含程序指令和相關資源的集合。每個進程和其他進程一起參與調度,競爭CPU,內存等系統資源。
每次進程切換,都存在進程資源的保存和恢復動作,這稱爲上下文切換。
進程的引入可以解決支持多用戶的問題,但是多進程系統也在如下方面產生了新的問題:進程頻繁切換引起的額外開銷可能會嚴重影響系統性能。
進程間通信要求複雜的系統級實現。在程序功能日趨複雜的情況下,上述缺陷也就凸現出來。比如,一個簡單的GUI程序,爲了有更好的交互性,通常用一個任務支持界面交互,另一個任務支持後臺運算。如果每個任務均由一個進程來實現,那會相當低效。對每個進程來說,系統資源看上去都是其獨佔的。比如內存空間,每個進程認爲自己的內存空間是獨有的。一次切換,這些獨立資源都需要切換。由此就演化出了利用分配給同一個進程的資源,儘量實現多個任務的方法。這也就引入了線程的概念。同一個進程內部的多個線程,共享的是同一個進程的所有資源。比如,與每個進程獨有自己的內存空間不同,同屬一個進程的多個線程共享該進程的內存空間。例如在進程地址空間中有一個全局變量globalVar,若A線程將其賦值爲1,則另一線程B可以看到該變量值爲1。兩個線程看到的全局變量globalVar是同一個變量通過線程可以支持同一個應用程序內部的併發,免去了進程頻繁切換的開銷,另外併發任務間通信也更簡單。