進程間數據通信方式比較

進程間數據通信方式比較
序號 方式 細分 優點 缺點 說明
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、通過代碼邏輯實現同步和異步
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章