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

相关文章:

  • c++11——左值、右值、完美转发、移动语义
  • 注意力机制十问
  • JavaAI时代:重塑企业级智能开发新范式
  • slam全局路径规划算法详解(Dijkstra、A*)
  • 【软考高项】信息系统项目管理师-第2章 信息技术发展(2.1 计算机软硬件)
  • Leaflet面试题及答案(21-40)
  • PLC框架-1.3- 汇川PN伺服(3号报文)
  • 全球化 2.0 | 印尼金融科技公司通过云轴科技ZStack实现VMware替代
  • 在HTML中CSS三种使用方式
  • Vue + Element UI 实现选框联动进而动态控制选框必填
  • WebSocket 重连与心跳机制:打造坚如磐石的实时连接
  • 千辛万苦3面却倒在性格测试?这太离谱了吧!
  • 飞算JavaAI:重塑Java开发的“人机协同“新模式
  • Mani-GS 运行指南
  • Cursor、飞算JavaAI、GitHub Copilot、Gemini CLI 等热门 AI 开发工具合集
  • django queryset 去重
  • Nginx服务器集群:横向扩展与集群解决方案
  • 巨人网络持续加强AI工业化管线,Lovart国内版有望协同互补
  • 《磁力下载工具实测:资源搜索+高速下载一站式解决方案》
  • DSSA(Domain-Specific Software Architecture)特定领域架构
  • 上位机知识篇---安装包架构
  • 麦迪逊悬架cad【14张】+三维图+设计说明书
  • 计算机基础:内存模型
  • Ubuntu2404修改国内镜像
  • Ubuntu 22.04安装SQL Server指南
  • 【Qt 学习之路】Qt Android开发环境搭建:Ubuntu的Vmware虚拟机中的踩坑实录
  • 数据结构:栈、队列、链表
  • AI技术重塑工业制造:从智能应用到大型模型落地
  • 从代码学习深度强化学习 - PPO PyTorch版
  • 在Spring Boot 开发中 Bean 的声明和依赖注入最佳的组合方式是什么?