基本概念
进程
process(Linux)- 线程
thread(RT-Thread)/ 任务task(FreeRTOS)
- 线程
进程间通信
IPC(Interprocess Communication)- 管道
pipe
- 管道
进程间通信
Linux 线程
管道 pipe
单向通信有限缓冲区阻塞读写消息无类型有序数据流2个进程间
生产者-消费者模式
- 匿名管道
pipe- 父-子进程间通信
- 命名管道
name pipe|FIFO- 无亲缘关系进程间通信
消息队列 Queue
多个进程异步通信-可非阻塞有序发,可选择性收持续存在消息有类型
发布-订阅模式
链表
内存共享 Shared Memory
多个进程无需操作系统内核-速度快频繁传递大量数据
生产者-消费者模式
- 同步问题解决
- 信号量
semaphore - 互斥锁
Mutex
- 信号量
- 类似
- 内存映射
Memory-mapped - 文件系统
File System
- 内存映射
套接字 Sockets
网络通信不同主机进程间应用于分布式系统
客户端-服务器模式
信号 Signal
软件中断轻量级异步信号屏蔽-阻塞
观察者模式|状态机模式
线程间通信
FreeRTOS RT-Tread Linux 同步与互斥
消息队列 Queue
任意类型消息FIFO
信号量 Semaphore
解决同步问题不存储资源
- 计数信号量:多线程/任务
- 二值信号量:类似于互斥锁
互斥锁 Mutex
解决同步问题阻塞(休眠)
事件组 Event Groups
解决复杂同步问题允许任务等待
软件定时器 Timer
非阻塞解决同步问题
通知 Notification
FreeRTOS轻量级简单任务效率高
邮箱 Mailbox
RT-Tread消息固定大小-类似消息队列
内存池 Memory Pool
RT-Tread内存块数据共享效率高
条件变量 Condition Variable
Linux配合互斥锁
总结
| 通信方式 | Linux | FreeRTOS | RT-Thread |
|---|---|---|---|
| 消息队列 | 消息队列 | 消息队列 | 消息队列 |
| 邮箱 | — | — | 邮箱 |
| 管道 | 管道 | — | 管道 |
| 共享内存 | 共享内存 | — | 内存池 |
| 信号量 | 信号量 | 信号量 | 信号量 |
| 互斥锁 | 互斥锁 | 互斥锁 | 互斥锁 |
| 条件变量 | 条件变量 | — | — |
| 信号 | 信号 | — | 信号 |
| 通知 | — | 任务通知 | — |
| 事件 | — | 事件组 | 事件 |
| 中断 | 中断 | 中断 | 中断 |
| 软件定时器 | 软件定时器 | 软件定时器 | 软件定时器 |