進程間數據通信方式比較 | |||||
序號 | 方式 | 細分 | 優點 | 缺點 | 說明 |
1 | 管道 | 匿名管道 | 1、自帶同步互斥 2、使用比較簡單 |
1、一個管道只提供單向通信,如果實現雙向通信需要創建兩個管道 2、只能用於相關聯的進程,通常用於父子進程 3、寫數據時,如果數據沒有及時被讀取,會發生阻塞;反之,讀數據時,如果數據沒有寫入,也會發生阻塞 4、不能跨主機 |
例子: https://docs.microsoft.com/en-us/windows/win32/ProcThread/creating-a-child-process-with-redirected-input-and-output |
命名管道 | 1、任意兩個進程之間通信 2、可以在不同主機間通信 |
1、進程之間的代碼耦合度高 2、多客戶端時,需要爲每個客戶端建立一個處理線程 3、寫數據時,如果數據沒有及時被讀取,會發生阻塞;反之,讀數據時,如果數據沒有寫入,也會發生阻塞 4、最大客戶端數爲PIPE_UNLIMITED_INSTANCES (255) |
服務端: 1、CreateNamedPipe 2、ConnectNamedPipe 客戶端: 1、WaitNamedPipe 2、CreateFile(OPEN_EXISTING) 命名規則: \.\pipe\pipename 如果是不同主機需要把.換成主機名字或者直接換成*就可以實現全網內部的通信 例子: https://docs.microsoft.com/zh-cn/windows/win32/ipc/multithreaded-pipe-server |
||
2 | 共享內存 | 1、直接操作內存,讀寫數據快 | 1、需要進行讀寫同步(讀寫通知) 2、不能跨主機 3、適合一對一進程通信 |
需要與信號量或消息配合使用 CreateFileMapping OpenFileMapping MapViewOfFile 例子:https://docs.microsoft.com/zh-cn/windows/win32/memory/creating-named-shared-memory |
|
3 | WM_COPYDATA | 1、使用方便 | 1、接收端必須有窗口 2、數據大小限制(未找到明確說法) 3、只能使用sendmessage同步發送 4、不能跨主機 |
例子: https://docs.microsoft.com/en-us/windows/win32/dataxchg/using-data-copy |
|
4 | Clipboard | 1、使用方便 | 1、接收端必須有窗口 2、進程間需要消息同步 3、不能跨主機 4、一個服務對應多客戶端如何處理? |
OpenClipboard AddClipboardFormatListener GetClipboardData 例子: https://docs.microsoft.com/zh-cn/windows/win32/dataxchg/using-the-clipboard |
|
5 | Socket | 1、任意兩個進程之間通信 2、可以在不同主機間通信 3、跨編程語言 4、一個服務對應多個客戶端 |
1、消息封裝複雜 2、通過代碼邏輯實現同步和異步 |
是否需要長連接? | |
6 | Http | 1、任意兩個進程之間通信 2、可以在不同主機間通信 3、語言無關 4、短連接,一個請求及迴應就是一個閉環過程 |
1、消息封裝複雜 2、通過代碼邏輯實現同步和異步 |
進程間數據通信方式比較
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.