天天看點

線程之間的幾種通信方式一、線程之間的幾種通信方式

一、線程之間的幾種通信方式

1、管道,是一種半雙工方式,資料單方向流動,而且隻能在有親緣關系的線程之間使用。他是基于核心的,可以把它當作是核心緩沖區,在核心和使用者空間交換資料需要進行四次的資料拷貝,因為他是把使用者空間的資料拷貝到核心,然後從核心拷貝到記憶體,然後從記憶體再拷貝到核心,最後拷貝到使用者空間,至于為什麼要拷貝到核心,是因為資料最重都是在記憶體中執行的。接收的時候要按照次序,按照先進先出的原則,在管道中的資料隻能被讀取1次,讀出之後緩沖區就不存在了。它隻能承載沒有格式的位元組流 。

2、命名管道,和管道差不多,但是它支援沒有親緣關系的線程之間通信。其他的類似。命名管道的名字對應磁盤索引截點,所有程序都可以對他進行通路。

3、消息隊列,是消息的連結清單,是一系列儲存在核心中的消息清單,同樣交換資料也是需要4次拷貝的,它的優勢是可以對每個消息指定特定的消息類型,接收的時候不需要按照隊列的次序接收。

4、共享存儲,就是映射一段可以被其他程序所通路的記憶體,由一個程序建立,多個程序都是可以通路的。用它傳遞資料隻需要拷貝三次,使用者空間->記憶體->使用者空間。

5、信号量,用于控制多個程序對于共享資源的通路,可以用之線程同步。

6、套接字Socket, Socket套接字是通信的基石,是支援TCP/IP協定的網絡通信的基本操作單元。它是網絡通信過程中端點的抽象表示,包含進行網絡通信必須的五種資訊:連接配接使用的協定,本地主機的IP位址,本地程序的協定端口,遠地主機的IP位址,遠地程序的協定端口。

7、信号,是一種比較複雜的通信方式,用于通知接收程序某個事件已經發生了。