进程间数据通信方式比较 | |||||
序号 | 方式 | 细分 | 优点 | 缺点 | 说明 |
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、通过代码逻辑实现同步和异步 |
进程间数据通信方式比较
最新推荐文章于 2024-08-19 23:22:31 发布