進程是執行著的應用程序,而線程是進程內部的一個執行序列。一個進程可以包含多個線程,線程又叫做輕量級進程。
進程與線程的區別歸納:
a.地址空間和其他資源:進程間相互獨立,擁有獨立內存,進程是資源分配的基本單位;線程隸屬于某一進程,且同一進程的各線程間共享內存(資源),線程是cpu調度的基本單位。某進程內的線程在其他進程中不可見。
b.通信:進程間相互獨立,通信困難,通信IPC方法有:管道,信號,套接字,共享內存,消息隊列等,線程間可以直接讀寫進程數據段(如全局變量)來進行通信--需要進程同步和互斥手段的輔助,以保證數據的一致性。
c.調度與切換:線程上下文切換比進程上下文切換要快的多。進程間切換要保存上下文,加載另一個進程;而線程則共享了進程的上下文環境,切換更快。
d.在多線程os中,進程不是一個可執行的實體
(待補充)
其他論點:
進程是資源分配的單元,線程是獨立運行和調度的基本單位;進程是運行中的程序,線程是進程內部的一個執行序列;進程擁有的資源多,線程擁有的資源少;多個線程共享進程的資源;進程間切換代價大,線程間切換代價小
進程和線程的主要差別在于它們是不同的操作系統資源管理的方式。進程擁有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其他進程產生影響;線程只是一個進程中的不同執行路徑,線程有自己的堆棧和局部變量(在運行中必不可少的資源),但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉。所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對于一些要求同時進行并且又要共享某些變量的并發操作,只能用線程,不能用進程???
進程間通信(IPC,interProcess Communication):是指在不同進程之間傳播或交換信息。IPC的方式通常有管道(包括無名管道和命名管道),消息隊列,信號量,共享存儲,Socket,Streams等,其中Socket和Streams支持不同主機上的兩個進程IPC。