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

线程间和进程间是如何进行通信

进程是由线程组成的,进程所拥有的功能线程全部具有,线程所拥有的功能进程不一定有,所有线程的通信方式,进程不一定有。

线程之间的通信主要有两种:共享内存信息传递  (端口,方法调用等等)

进程之间的通信方式有:

  1. 管道(Pipe)‌:包括匿名管道和命名管道。匿名管道主要用于父子进程间的单向通信,而命名管道允许无亲缘关系的进程间通信‌12。
  2. 信号量(Semaphore)‌:用于控制多个进程对共享资源的访问,防止资源冲突‌12。
  3. 消息队列(Message Queue)‌:进程可以通过消息队列异步地发送和接收消息,提供消息排序和优先级管理‌12。
  4. 共享内存(Shared Memory)‌:多个进程可以直接访问同一块内存区域,实现高效的数据交换,但需要额外的同步机制来避免竞争条件‌。
  5. 信号(Signal)‌:一种软中断机制,用于通知进程某个事件的发生,尽管用于进程通信较少,但在进程控制和异常处理方面非常有用‌。

Java中线程的通信

从抽象的角度来看,

JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优。

如图所示,本地内存A和本地内存B由主内存中共享变量x的副本。假设初始时,这3个内存中的x值都为0。线程A在执行时,把更新后的x值(假设值为1)临时存放在自己的本地内存A中。当线程A和线程B需要通信时,线程A首先会把自己本地内存中修改后的x值刷新到主内存中,此时主内存中的x值变为了1。随后,线程B到主内存中去读取线程A更新后的x值,此时线程B的本地内存的x值也变为了1。

从整体来看,这两个步骤实质上是线程A在向线程B发送消息,而且这个通信过程必须要经过主内存。JMM通过控制主内存与每个线程的本地内存之间的交互,来为Java程序员提供内存可见性保证。

http://www.xdnf.cn/news/774865.html

相关文章:

  • PH热榜 | 2025-05-30
  • Linux中的mysql逻辑备份与恢复
  • 【AI+若依框架】基础应用篇
  • CUDA内存溢出问题解决方案
  • C++学习打卡1.01
  • SAP BC 修复MM60 报错的问题
  • MySQL 核心知识整理【一】
  • AI智能体|扣子(Coze)搭建【合同/文档审查】工作流
  • 应用程序错误 application error (0xc000007b) 处理方法
  • URL的结构与作用
  • ubuntu系统扩容
  • [SC]SystemC dont_initialize的应用场景详解(一)
  • 198. 打家劫舍
  • 如何用AI写作?
  • RFC 4862 IPv6 Stateless Address Autoconfiguration 翻译
  • [蓝桥杯]交换次数
  • 《汇编语言》第13章 int指令——实验13 编写、应用中断例程
  • Redis持久化机制详解:RDB与AOF的深度剖析
  • 麒麟信安安装谷歌浏览器
  • 计算机视觉---深度学习框架(Backbone、Neck、Head)
  • webpack和vite的区别
  • 技术博客:线程池的暗礁——Executors工厂类为何成为Java高并发系统的禁忌
  • 探秘Transformer系列之(35)--- 大模型量化基础
  • node-sass 报错
  • 第二章 AI大模型接入
  • jquery复习
  • MySQL指令个人笔记
  • 【笔记】在 MSYS2 MINGW64 环境中降级 NumPy 2.2.6 到 2.2.4
  • RocketMQ介绍与部署
  • 动中通天线跟踪性能指标的测试