線程和進程的區別,線程如何實現同步和通信,進程如何實現通信

線程和進程的區別

進程是系統資源分配最小的單位。
線程是程序執行最小的單位

進程有自己獨立地址空間,每啓動一個進程,系統都會爲它分配地址空間,建立數據表來維護代碼段、堆棧和數據塊,這種操作非常昂貴。
線程是共享進程中的數據的,使用相同的地址空間,因此cpu切換到一個線程花費遠比進程要小很多,同時創建一個線程的開銷也比進程要小很多。

進程間的通訊較爲複雜,使用:無名管道、有名管道、信號、共享內存、消息隊列、信號量
線程間的通訊十分方便,因爲使用的是共享全局變量、靜態變量等數據,使用互斥量、讀寫鎖、自旋鎖、線程信號、條件變量

多進程運行時,單一進程死亡,並不會影響其他進程;
多線程運行時,單一線程死亡,會導致整個進程死亡。

進程之間不能對其他進程施加控制;
線程之間可以互相控制。

線程如何實現同步和通信

線程訪通信可以通過:

全局變量
io通訊
自定義消息

同步通過使用下面的來控制:

互斥鎖
信號量
臨界區

進程如何實現通信

進程之間無法直接訪問對方的內存,需要一箇中間介質:

消息隊列
管道
共享內存
套接字

參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章