线程通信与进程通信的区别笔记
目录
-
基本概念
-
通信机制对比
-
性能与资源对比
-
安全性与稳定性
-
典型应用场景
-
常见通信方式
-
示例代码对比(Java)
-
总结对比表
基本概念
线程通信
线程通信是指 同一进程内多个线程之间通过共享内存(变量)与同步机制来交换信息或协调操作 的行为。线程之间天然共享堆内存,因此通信方式更为轻便。
进程通信
进程通信(Inter-Process Communication,IPC)是指 不同进程之间通过系统提供的机制(如管道、Socket、共享内存等)交换数据或协作控制。由于进程拥有独立内存空间,通信需借助操作系统支持。
通信机制对比
维度 | 线程通信 | 进程通信 |
---|---|---|
通信基础 | 共享内存 | 独立内存,需 IPC 机制 |
内存访问 | 直接读写共享变量 | 无法直接访问,需操作系统中转 |
通信效率 | 高(无需拷贝) | 较低(多次数据拷贝或上下文切换) |
通信机制示例 | wait/notify 、volatile 、Lock 等 | 管道、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等 |