003-进程与线程

基本概念

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