蔚淦丞
发布于 2026-09-08 / 3 阅读
0
0

线程间通信、进程间通信方式

一、线程间通信方式(同一进程内,地址空间共享)

线程天然共享进程虚拟地址空间,通信核心是共享内存 + 同步机制

1. 共享全局变量 / 堆内存

所有线程可直接读写全局变量、malloc堆内存。是最基础的线程通信方式,需配合锁保证线程安全。

2. 互斥锁 pthread_mutex_t

用于保护共享资源,保证同一时刻只有一个线程访问临界区,解决数据竞争,实现线程同步通信。

3. 条件变量 pthread_cond_t

配合互斥锁使用,实现线程等待-唤醒通信;用于生产者消费者模型、线程池任务通知。

4. 信号量 sem_t(POSIX)

自带计数缓冲区,可实现线程互斥、同步、生产者消费者通信;通知不会丢失。

5. 原子变量

无锁通信,依托CPU硬件指令,安全读写计数器、状态标记,适合简单数值同步。

6. eventfd(Linux)

IO事件式线程通信,一个线程写、一个线程阻塞等待可读,无需锁,可融入epoll多路复用。

7. 信号 Signal

异步线程通知,仅传递信号编号,不适合业务数据通信,多用于异常终止、事件通知。


二、进程间通信方式 IPC(多进程,地址空间隔离)

进程地址空间完全隔离,无法直接读写内存,必须通过操作系统IPC机制通信。

1. 匿名管道 pipe

仅支持亲缘父子进程、单向字节流通信,数据读完即消失。

2. 命名管道 FIFO

支持无亲缘任意进程通信,基于文件路径,单向字节流传输。

3. 信号 Signal

进程间异步通知,仅传信号编号,无法传输大量数据,用于事件提醒、进程终止。

4. 共享内存(shmget / mmap)

速度最快的IPC,多进程挂载同一块内核内存;自带数据共享、无同步机制,需配合信号量/管道通知。

5. System V 消息队列

内核维护消息队列,支持带类型的消息收发,可按类型读取消息。

6. System V 信号量

用于多进程之间互斥、同步,不负责传输业务数据。

7. POSIX 消息队列 / 信号量

新版进程同步通信机制,功能优于System V,支持消息优先级、阻塞/非阻塞配置。

8. Unix Domain Socket(AF_UNIX)

本机进程双向通信,不走网络协议栈、性能高;支持传递文件描述符,工程最常用本机IPC。

9. 网络 Socket(TCP/UDP 127.0.0.1)

可本机、可跨机器通信,通用性最强,走完整网络协议栈,开销高于UNIX域套接字。

10. eventfd

可用于进程间简单事件通知,仅传递计数信号,不适合业务数据传输。


三、核心区别

  • 线程间通信:依托共享内存 + 同步工具(锁、条件变量、信号量、原子变量)

  • 进程间通信:依托操作系统IPC机制(管道、共享内存、消息队列、Socket、信号)


评论