33. IPC 进程通信
33.1 什么是 IPC
引用百度百科
IPC(Inter-Process Communication,进程间通信)。进程间通 信是指两个进程的数据之间产生交互。
通俗点说,IPC
可以实现不同应用程序间通信(交互数据)。
33.2 实现 IPC
通信方式
- 半双工 Unix 管道
- FIFOs(命名管道)
- 消息队列(常用模式)
- 信号量
- 共享内存(常用模式,
Furion
框架默认实现方式) - 网络 Socket(常用模式)
33.3 IPC
通信模式
IPC
本身指的是 进程间
通信,但 Furion
框架将内置 进程间/内
两种进程通信模式。
进程内通信
:Furion
采用Channel
管道提供进程内通信进程外通信
:Furion
采用MemoryMapperFile
共享内存方式实现进程外通信(后续版本完善)
33.4 进程内通信(线程间)
进程内通信俗称线程间通信,Furion
框架采用 C#
提供的 Channel(管道)
+ Lazy
+ Task.Factory
实现长时间高性能的线程间通信 机制。Channel
管道也是目前 .NET/C#
实现 生产者-订阅者
模式最简易且最为强大的实现。
33.4.1 了解 Channel
Channel
是在 .NET Core 2.1+
版本之后加入。Channel
底层实现是一个高效的、线程安全的队列,可以在线程之间传递数据。
Channel
的主要应用场景是 发布/订阅、观察者模式
中使用,如:事件总线
就是最好的实现方式。通过 Channel
实现 生产-消费
机制可以减少项目间的耦合,提高应用吞吐量。
Furion
框架提供了 ChannelContext<TMessage, THandler>
密封类,提供 UnBoundedChannel
和 BoundedChannel
两种管道通信模式。
UnBoundedChannel
:具有无限容量的Channel
, 生产者可以全速进行生产数据,但如果消费者的消费速度低于生产者,Channel
的资源使用会无限增加,会有服务器资源耗尽的可能。BoundedChannel
:具有有限容量的Channel
,Furion
框架默认为1000
,到达上限后,生产者进入等待写入直到有空闲,好处是可以控制生产的速度,控制系统资源的使用。(推荐)