基本概念
进程
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 |
---|---|---|---|
消息队列 | 消息队列 | 消息队列 | 消息队列 |
邮箱 | — | — | 邮箱 |
管道 | 管道 | — | 管道 |
共享内存 | 共享内存 | — | 内存池 |
信号量 | 信号量 | 信号量 | 信号量 |
互斥锁 | 互斥锁 | 互斥锁 | 互斥锁 |
条件变量 | 条件变量 | — | — |
信号 | 信号 | — | 信号 |
通知 | — | 任务通知 | — |
事件 | — | 事件组 | 事件 |
中断 | 中断 | 中断 | 中断 |
软件定时器 | 软件定时器 | 软件定时器 | 软件定时器 |