1.在Linux系統下,啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數據表來維護它的代碼段、堆棧段和數據段,這是一種”昂貴”的多任務工作方式。2.而運行於一個進程中的多個線程,它們彼此之間使用相同的地址空間,共用大部分數據,啟動一個線程所花費的空間遠遠小於啟動一個進程所花費的空間,而且,線 ...
1.在Linux系統下,啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數據表來維護它的代碼段、堆棧段和數據段,這是一種”昂貴”的多任務工作方式。
2.而運行於一個進程中的多個線程,它們彼此之間使用相同的地址空間,共用大部分數據,啟動一個線程所花費的空間遠遠小於啟動一個進程所花費的空間,而且,線程間彼此切換所需的時間也遠遠小於進程間切換所需要的時間
3.根本區別就一點:用多進程每個進程有自己的地址空間(address space),線程則共用地址空間。所有其它區別都是由此而來的:
1)速度:線程產生的速度快,線程間的通訊快、切換快等,因為他們在同一個地址空間內。
2)資源利用率:線程的資源利用率比較好也是因為他們在同一個地址空間內。
3)同步問題:線程使用公共變數/記憶體時需要使用同步機制還是因為他們在同一個地址空間內。
多線程共用地址空間