根本區別:進程是操做系統資源分配的基本單位,線程是任務調度和執行的基本單位。spa
在開銷方面:每一個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程能夠看作輕量級的進程,同一類線程共享代碼和數據空間,每一個線程都有本身獨立的運行棧和程序計數器(PC),線程之間切換的開銷小。操作系統
所處環境:在操做系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(經過CPU調度,在每一個時間片中只有一個線程執行)線程
內存分配方面:系統在運行的時候會爲每一個進程分配不一樣的內存空間;而對線程而言,除了CPU外,系統不會爲線程分配內存(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源。隊列
包含關係:進程至少有一,若是一個進程內有多個線程,則執行過程不是一條線的,而是多條線(線程)共同完成的;線程是進程的一部分,因此線程也被稱爲輕權進程或者輕量級進程。進程
進程之間的通訊方式:一般有管道(包括無名管道和命名管道)、消息隊列、信號量、共享存儲、Socket、Streams等。其中 Socket和Streams支持不一樣主機上的兩個進程通訊。內存
線程之間的通訊方式:能夠直接經過共享變量或者管道、鎖機制資源