進程與線程的區別及其通信方式
進程與線程的區別
-
進程是資源分配的基本單位,是執行中程序的實例
-
線程是操作系統調度的基本單位,一個進程可以有多個線程。線程基本不擁有系統資源,但可以訪問隸屬進程的資源。
-
線程切換時只需保存和設置少量寄存器內容,開銷很小。而進程切換時則開銷很大,涉及到當前執行進程CPU環境的保存及新調度進程CPU環境的設置。
-
一個程序至少有一個進程,而一個進程中至少有一個線程。一個線程可以創建和銷燬另一個線程。
通信方式
- 管道
- 命名管道
- 消息隊列
- 信號量
- 共享內存
- 套接字
管道只能用於有親緣關係的進程之間的通信,命名管道可以用於無親緣關係的進程之間的通信,但存在同步阻塞問題。
消息隊列一般用於異步通信,避免了命名管道的同步堵塞問題,實現了通信雙方之間的解耦
而信號量主要用於進程之間以及同一進程不同線程之間的通信。共享內存使得多個進程可以訪問同一塊內存空間,是最快的可用IPC形式,通常結合信號量一起使用。
套接字則可用於不同機器間的進程通信。