当前位置: 首页 > 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.xdnf.cn/news/1102951.html

相关文章:

  • Java教程:JavaWeb ---MySQL高级
  • 从语音识别到智能助手:Voice Agent 的技术进化与交互变革丨Voice Agent 学习笔记
  • Matlab裁剪降水数据:1km掩膜制作实战
  • 从Markdown到PPT:用Python打造专业演示文稿转换器
  • axios 与 fetch 的区别
  • Android 开发中插桩
  • 微服务引擎 MSE 及云原生 API 网关 2025 年 6 月产品动态
  • Java 方法重载与类的构造器(一)
  • PDXP、UDP与HDLC协议技术解析:架构、应用与对比研究
  • NodeJs后端常用三方库汇总
  • UDP服务器的优缺点都包含哪些?
  • 森马服饰从 Elasticsearch 到阿里云 SelectDB 的架构演进之路
  • 静态路由综合配置实验报告
  • 政安晨【零基础玩转开源AI项目】ACE-Step —— 迈向音乐生成基础模型的重要一步:AI自动谱曲与自动演唱的免费开源框架部署实践
  • 林吉特危机下的技术革命:马来西亚金融系统升维作战手册
  • 2025人形机器动作捕捉技术研讨会于7月31日在京开启
  • 进制转换小题
  • 编码技术: PRBS, 8B/10B
  • 无锁队列:从零构建生产者-消费者数据结构
  • 数据结构 之 【链式二叉树】(C语言实现二叉树的前序中序后序层序遍历,节点个数、树的高度、第K层的节点个数、查找、完全二叉树的判别、销毁创建二叉树)
  • Redis5.0.5 漏洞
  • uni-app获取手机当前连接的WIFI名称
  • GIC控制器 (三)
  • 飞算JavaAI进阶:重塑Java开发范式的AI革命
  • 语音对话秒译 + 视频悬浮字 + 相机即拍即译:ViiTor 如何破局跨语言场景?
  • 上位机知识篇---Docker
  • SpringCloud之Ribbon
  • 从延迟测试误区谈起:SmartPlayer为何更注重真实可控的低延迟?
  • 飞算JavaAI 实战笔记
  • 从零实现一个GPT 【React + Express】--- 【3】解析markdown,处理模型记忆