1. 程式人生 > >程序間通訊和執行緒間同步區別

程序間通訊和執行緒間同步區別

執行緒間通訊:由於多執行緒共享地址空間和資料空間,所以多個執行緒間的通訊是一個執行緒的資料可以直接提供給其他執行緒使用,而不必通過作業系統(也就是核心的排程)。

程序的通訊機制主要有:管道、有名管道、訊息佇列、訊號量、共享空間、訊號、套接字。

linux中程序間通訊和執行緒間通訊的區別:
1.linux中的程序,是有fork()系統呼叫建立的,程序間都有獨立的地址空間,他們之間不能直接通訊,必須通過一些IPC程序程序間通訊機制來完成。常見的IPC有:PIPE,命名管道,訊號,共享記憶體以及socket等;
2.linux中的執行緒,是clone()系統呼叫建立的,一個程序下的執行緒間是共享記憶體空間的,故執行緒A可以之間訪問執行緒B中定義的變數,但是必須注意併發的情況。
另:“執行緒上下文”的規模要遠遠小於程序上下文。


使用多執行緒。應用程式的呼叫可能適合簡單的輪轉排程演算法,而另一個應用程式可能更適合給予優先順序的排程演算法。可以為應用程式量身定做排程演算法而不必擾亂底層作業系統的排程程式。

執行緒庫是一組提供應用程式共享的應用程式級別的函式,某種程式上相當於小型可以切換的排程系統。

缺點是當一個系統呼叫,程序中所有的執行緒都會阻塞。同時多執行緒技術也不能利用多處理器技術,一個程序只分配給一個處理器。

--《作業系統 精髓與設計原理》