当前位置: 首页 > news >正文

线程通信与进程通信的区别笔记

目录

  1. 基本概念

  2. 通信机制对比

  3. 性能与资源对比

  4. 安全性与稳定性

  5. 典型应用场景

  6. 常见通信方式

  7. 示例代码对比(Java)

  8. 总结对比表


基本概念

线程通信

线程通信是指 同一进程内多个线程之间通过共享内存(变量)与同步机制来交换信息或协调操作 的行为。线程之间天然共享堆内存,因此通信方式更为轻便。

进程通信

进程通信(Inter-Process Communication,IPC)是指 不同进程之间通过系统提供的机制(如管道、Socket、共享内存等)交换数据或协作控制。由于进程拥有独立内存空间,通信需借助操作系统支持。


通信机制对比

维度线程通信进程通信
通信基础共享内存独立内存,需 IPC 机制
内存访问直接读写共享变量无法直接访问,需操作系统中转
通信效率高(无需拷贝)较低(多次数据拷贝或上下文切换)
通信机制示例wait/notifyvolatileLock管道、Socket、共享内存、消息队列等
开销较低较高(进程调度、内核调用)

性能与资源对比

维度线程通信进程通信
启动速度
上下文切换成本高(需内核态切换)
内存资源使用共享,资源节省独立,占用更多资源
数据一致性维护程序控制(需同步)操作系统层面隔离

安全性与稳定性

维度线程通信进程通信
数据隔离无隔离(需同步机制)天然隔离
崩溃影响范围一个线程崩溃可能影响整个进程进程独立,崩溃不会影响其他进程
锁机制使用频繁使用 Lock、synchronized 等通常不涉及锁

典型应用场景

场景建议使用方式
多个任务协同处理(同一服务)线程通信
多模块之间逻辑解耦进程通信
分布式服务、跨平台通信进程通信(如 RPC)
高性能计算任务并发线程通信
安全性隔离要求高进程通信

常见通信方式

线程通信方式(Java):

  • wait() / notify()

  • join()

  • volatile

  • synchronized / Lock

  • Condition

  • BlockingQueue

  • CountDownLatch / CyclicBarrier / Semaphore

  • ThreadLocal(线程独立数据)

  • CompletableFuture

进程通信方式:

  • 管道(Pipe)

  • 消息队列(Message Queue)

  • 共享内存(Shared Memory)

  • 信号量(Semaphore)

  • Socket 套接字通信(支持跨主机)

  • 内存映射文件(mmap)

  • RPC / gRPC / HTTP 接口调用


示例代码对比(Java)

线程通信示例(共享变量 + volatile)

class Flag {volatile boolean stop = false;
}Flag flag = new Flag();Thread worker = new Thread(() -> {while (!flag.stop) {// 处理任务}System.out.println("线程收到停止信号");
});worker.start();// 主线程通知停止
Thread.sleep(1000);
flag.stop = true;

进程通信示例(Socket)

服务端进程
ServerSocket server = new ServerSocket(8888);
Socket client = server.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("收到进程消息: " + reader.readLine());
客户端进程
Socket socket = new Socket("localhost", 8888);
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
writer.println("Hello from process B");

总结对比表

特性线程通信进程通信
是否共享内存
通信速度相对较慢
是否需同步机制是(需同步锁)否(系统隔离)
数据一致性维护方式编程控制系统控制
崩溃影响会影响整个进程崩溃进程不影响其他
通信方式复杂度低(标准库)高(需额外 IPC 机制)
应用示例Java 多线程、线程池分布式系统、微服务、数据库通信等
常用通信方式wait/notify、共享变量、Queue等Socket、共享内存、消息队列、Pipe等
http://www.dtcms.com/a/274933.html

相关文章:

  • CMU15445-2024fall-project1踩坑经历
  • 小米汽车今年6月新车交付超2.5万辆
  • Marin说PCB之Allegro高亮BOM器件技巧详解
  • 格密码--数学基础--03格的基本域与行列式
  • 用AI做带货视频评论分析【Datawhale AI 夏令营】
  • 《P3976 [TJOI2015] 旅游》
  • Guava LoadingCache
  • Apipost 与 Apifox 的 API 调试功能:全面对比与深入分析
  • Vue + Element UI 实现选框联动进而动态控制选框必填
  • 牛客 —— JZ22 链表中倒数最后k个结点
  • 前端八股-promise
  • FreeRTOS踩坑小记——vTaskList函数的使用
  • Activiti:activiti-app.war持久化功能实现
  • AI优化器美国VPS集成:智能算力部署与性能调优指南
  • (补充)RS422
  • Mysql:分库分表
  • STM32F103之存储/启动流程
  • 【世纪龙科技】几何G6新能源汽车结构原理教学软件
  • Linux C 管道文件操作
  • [spring6: @EnableLoadTimeWeaving]-使用案例
  • SSH基础原理
  • 速盾:高防CDN和普通CDN的区别大吗?
  • 【unity编辑器开发与拓展EditorGUILayoyt和GUILayoyt】
  • phpstudy搭建pikachu
  • Java 的集合都有哪些,都有什么特点?
  • c#获取Datatable中某列最大或最小的行数据方法
  • 2025年亚太中文赛B题第一版本超详细解题思路
  • Claude Code 完全上手指南:从入门到精通的终极备忘录
  • 【MYSQL8】springboot项目,开启ssl证书安全连接
  • 深度学习篇---昇腾NPUCANN 工具包