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

article/2025/6/30 6:41:30

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

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

进程之间的通信方式有:

  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.hkcw.cn/article/WtnHFlwFjn.shtml

相关文章

wow Warlock shushia [Dreadsteed]

wow Warlock shushia [Dreadsteed] 克索诺斯恐惧战马坐骑的任务 在《魔兽世界》怀旧服中,术士大马任务,也就是获得克索诺斯恐惧战马坐骑的任务,是一个既充满挑战又极具成就感的系列任务。以下是详细的任务流程: 一、任务起始 ‌…

Axure 基础入门

目录 认识产品经理 项目团队* 基本概述 认识产品经理 A公司产品经理 B公司产品经理 C公司产品经理 D公司产品经理 产品经理工作范围 产品经理工作流程* 产品经理的职责 产品经理的分类 产品经理能力要求 产品工具 产品体验报告 原型设计介绍 原型设计概述 为…

快手可灵视频V1.6模型API如何接入免费AI开源项目工具

全球领先的视频生成大模型:可灵是首个效果对标 Sora 、面向用户开放的视频生成大模型,目前在国内及国际上均处于领先地位。快手视频生成大模型“可灵”(Kling),是全球首个真正用户可用的视频生成大模型,自面…

哈工大2024春csapp大作业——程序人生-Hello’s P2P

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 网络空间安全 学   号 2022110717 班   级 2203901 学 生 胡丁鹏     指 导 教 师 史先俊    计算机科学与…

程序人生的学习密码:终身学习促进职业生涯飞跃

程序人生的学习密码:终身学习促进职业生涯飞跃 关键词:终身学习、程序员成长、知识体系构建、学习方法论、技术迭代、职业发展、认知升级 摘要:在技术快速迭代的IT领域,程序员的职业生涯能否实现持续飞跃,核心在于是否构建了高效的终身学习体系。本文从认知科学和职业发展…

软件测试找工作|20道银行项目高频面试题

小编给大家上面试干货啦!把前两天整理的银行项目面试题系列汇总给你们复习吼! 先来看下面试题的目录叭...... 1、介绍一下贷款的项目? 贷款项目是银行业务中的重要组成部分,它是指银行向客户提供资金,让客户在约定的期…

【老张的程序人生】我命由我不由天:我的计算机教师中级岗之旅

在计算机行业的洪流中,作为一名20年计算机专业毕业的博主,我深知这几年就业的坎坷与辉煌。今天,我想与大家分享我的故事,一段关于梦想、挑战与坚持的计算机教师中级岗之旅。希望我的经历能为大家提供一个发展方向,在计…

程序人生-Hello’s P2P(2025)

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算机与电子通信 学   号 2023111735 班 级 23L0509 学 生 杨祥锐 指 导 教 师 史先俊 …

程序人生-Hello‘s P2P

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 生命科学和医学学院 学   号 2023113108 班   级 2352001 学 生 杜若林 指 导 教 师 刘松波 计算机科学与技术…

2025哈工大计统PA-P2P程序人生

摘 要 作此论文的目的是为了了解程序从输入终端到在终端中显示运行的一系列过程。本文详细分析了计算机在生成hello可执行文件的预处理、编译、汇编、链接、进程管理等整个生命周期,解析了hello程序从初始状态输入到结束执行被回收的全部过程,查看并注…

程序人生Hello’s P2P CSAPP大作业

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算学部 学   号 2023112327 班   级 23L0509 学 生 朱永久      指 导 教 师 …

数据库系统概论(十五)详细讲解数据库视图

数据库系统概论(十五)数据库视图 前言一、什么是视图?二、视图的作用1. 保护数据安全2. 屏蔽表结构变化3. 简化复杂查询4. 多角度展示数据 三、如何创建视图?语法格式:5种常见视图类型: 四、更新视图的限制…

面向对象进阶 | 深入探究 Java 静态成员与继承体系

个人主页 文章专栏 文章目录 个人主页文章专栏 一、static(静态)1.static 静态变量代码展示内存图 2.static 静态方法工具类:练习: 3.static注意事项4.重新认识main方法 二、继承1.继承概述2.继承的特点3.子类到底能继承父类中的…

Python趣学篇:用Pygame打造绚烂流星雨动画

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《Python星球日记》 目录 一、项目简介与效果展示二、技术栈与核…

【大模型学习】项目练习:视频文本生成器

🚀实现视频脚本生成器 视频文本生成器 📚目录 一、游戏设计思路二、完整代码解析三、扩展方向建议四、想说的话 一、⛳设计思路 本视频脚本生成器采用模块化设计,主要包含三大核心模块: 显示模块:处理用户输入和…

BFS每日刷题

目录 P1332 血色先锋队 173. 矩阵距离 P1162 填涂颜色 P1506 拯救oibh总部 P2895 [USACO08FEB] Meteor Shower S P3395 路障 P1332 血色先锋队 #include <iostream> #include <cstring> #include <queue> using namespace std; int dis[600][600]; in…

中国城市规模指数(1992-2023)

1816 中国城市规模指数(1992-2023) 数据简介 中国城市规模指数&#xff0c;参考丁从明等&#xff08;2020&#xff09;的做法&#xff0c;通过中国夜间灯光数据&#xff0c;提取其中各城市夜间灯光值大于等于22的区域取其平均值&#xff0c;再取其自然对数即为城市规模指数数…

基于贝叶斯优化神经网络的光伏功率预测综述

基于贝叶斯优化神经网络的光伏功率预测综述 一、贝叶斯优化的基本原理与核心组件 贝叶斯优化&#xff08;Bayesian Optimization, BO&#xff09;是一种基于概率模型的全局优化方法&#xff0c;特别适用于高成本评估的黑盒函数优化问题。其核心由代理模型和采集函数构成&…

【Zephyr 系列 4】串口通信进阶:打造自己的 AT 命令框架

&#x1f9e0;关键词&#xff1a;Zephyr、UART、串口通信、AT命令、Shell、RTOS &#x1f4cc;适合人群&#xff1a;希望开发设备控制协议、调试接口、CLI 命令的嵌入式开发者 &#x1f3af; 本篇目标 使用 Zephyr 提供的 UART API 与 Shell 模块 实现一套可扩展的 ATCMD 风格…

Docker 镜像原理

目录 操作系统基础 Union FS(联合文件系统) 再看 Docker 镜像是什么 镜像实现原理 docker 镜像加载原理 docker 是操作系统层的虚拟化&#xff0c;所以 docker 镜像的本质是在模拟操作系统。我们先看下操作系统是什么。 操作系统基础 操作系统由&#xff1a;进程调度子系统、…