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,到达上限后,生产者进入等待写入直到有空闲,好处是可以控制生产的速度,控制系统资源的使用。(推荐)

