天天看點

程序及線程間通信,資料互動

每個程序有自己的位址空間,兩個程序中的位址即使值相同,實際指向的位置也不同。程序間的通信一般通過作業系統的公開區進行。

同一程序中的線程因屬于同一位址空間,可直接通信,不僅是系統内部獨立運作的實體,而且是獨立競争資源的實體。

線程也被稱為輕權程序,同一程序的線程共享位址空間,沒有通信的必要,但是要做好同步/互斥,保護共享的全局變量。

線程擁有自己的棧。同步/互斥是原語primitives(在作業系統中叫原語,是執行過程中不可被打算的基本操作),而程序通信無論是信号,管道pipe還是共享記憶體,都是作業系統保證的,是系統調用。

線程間通信:由于多線程共享位址空間和資料空間,是以多個線程間的通信是一個線程的資料可以直接提供給其他線程使用,而不必通過作業系統(核心)的排程。

程序間的通信:他的資料空間的獨立性決定了它的通信比較複雜,需要通過作業系統。以前程序間的通信隻能單機版,現在作業系統都繼承了基于套接字(socket)的程序間的通信機制。這樣程序間的通信就不局限于單台計算機了,實作網絡通信。

程序間的通信方式:

  1. 管道:pipe,一種半雙工的通信方式,資料隻能單向流動,而且隻能在具有親愛關系的程序間進行。程序間的親緣關系通常是指父子程序關系。
  2. 有名管道:namepipe,一種半雙工的通信方式,允許無親緣關系程序間的通信。
  3. 信号量:semaphore,信号量是一個計數器,可以用來控制多個線程對共享資源的通路。它通常作為一種鎖機制,防止某程序正在通路共享資源,其他程序也通路該資源,是以,主要作為程序間及統一程序内不同線程之間的同步手段。
  4. 消息隊列:messagequeue,消息隊列是有消息的連結清單,存放在核心中并由消息隊列辨別符辨別。消息隊列克服了信号傳遞資訊少,管道隻能傳遞無格式位元組流及緩沖區大小受限制等缺點。
  5. 信号:sinal,是一種比較複雜的通信方式,用于通知接收線程某個事件已經發生。
  6. 共享記憶體:shared memory,共享記憶體就是映射一段能夠被其他程序所通路的内容,這段共享記憶體由一個程序建立,但多個程序都可以通路,共享記憶體是最快的IPC方式,,它是針對其他程序間通信方式運作效果低而專門設計的。它往往與其他通信機制,如信号量配合使用,來實作程序間的同步和通信。
  7. 套接字:socket,與其他通信機制不同,它可用于不同計算機間的程序通信。

線程間的通信方式:

  1. 鎖機制:包括互斥鎖、條件變量、讀寫鎖。互斥鎖提供了以排他方式防止資料結構被并發修改的方法;讀寫鎖允許多個線程同時讀取共享資料,而對寫操作是互斥的;條件變量可以以原子的方式阻塞線程,直到某個特定條件為真為止。對條件的測試是在互斥鎖的保護下進行的。條件變量始終與互斥鎖一起使用。
  2. 信号量:semaphore,包括無名線程信号量和命名線程信号量。
  3. 信号:sinal,類似程序間的信号處理

線程間的通信目的主要用于線程同步,是以線程沒有類似程序通信中用于資料交換的通信機制。

繼續閱讀