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

【JAVA基础面经】进程间的通信方式

文章目录前言1.管道Pipe2.命名管道FIFO3.消息队列4.共享内存5.信号量6.信号Signal7.Socket面试问题前言进程是系统资源分配的最小单位每个进程拥有独立的地址空间。为了保证不同进程之间能够交换数据、同步状态、协同工作操作系统提供了多种 IPC 机制。1.管道Pipe内核中开辟一个固定大小的缓冲区一个进程写入另一个进程读取。半双工数据单向流动只能在父子进程或兄弟进程间使用因为有共同祖先读取时如果没有数据会阻塞直到有数据或所有写端关闭Java 中的体现ProcessBuilder 启动子进程后可以通过 Process.getInputStream() / getOutputStream() 获得管道流实现父进程与子进程通信。// 父进程与子进程通过管道通信示例ProcessBuilderpbnewProcessBuilder(grep,java);Processppb.start();// 向子进程的标准输入写入数据try(OutputStreamosp.getOutputStream()){os.write(java is fun\npython is fun.getBytes());}// 读取子进程的标准输出try(BufferedReaderreadernewBufferedReader(newInputStreamReader(p.getInputStream()))){reader.lines().forEach(System.out::println);}2.命名管道FIFO与普通管道的区别在文件系统中有一个路径名不相关的进程可以通过该文件名进行通信。特点遵循先进先出原则写入的数据被另一进程读取后即从内核缓冲区移除。使用场景需要长期存在的、无亲缘关系的进程间的数据流。Java 标准库没有直接封装 FIFO但可以通过 JNA 或直接操作 /tmp/myfifo 等文件路径使用 RandomAccessFile 以读写方式打开Linux 下需要配合 mkfifo 预先创建3.消息队列即消息的链表存储在内核中每个消息有类型和正文。优点解耦发送方和接收方不需要同时运行支持多条消息有优先级数据有边界不像流式管道需要自己解析缺点消息大小通常有限制内核空间拷贝数据有一定开销。可以使用 Kafka、RabbitMQ 等消息中间件用户态或通过 java.nio.channels.Pipe 实现线程间通信不是进程间4.共享内存将同一块物理内存映射到多个进程的虚拟地址空间中一个进程修改后另一个进程直接可见。优点速度最快没有内核介入的数据拷贝只需一次页表映射。难点需要同步机制比如信号量来避免竞争条件。Java 实现方式包括使用 MappedByteBuffer FileChannel 映射文件到内存不同进程映射同一个文件类似 mmap。使用第三方库如 Chronicle Map或 JNI 调用 POSIX 的 shmget / shmat。// Java 中使用内存映射文件模拟共享内存RandomAccessFilefilenewRandomAccessFile(shared.dat,rw);FileChannelchannelfile.getChannel();MappedByteBufferbufferchannel.map(FileChannel.MapMode.READ_WRITE,0,1024);// 进程 A 写入buffer.putInt(0,100);// 进程 B 读取intvaluebuffer.getInt(0);5.信号量一个整数计数器支持 P等待和 V释放操作用于控制多进程对共享资源的访问。与互斥锁的区别信号量可以允许多个线程同时访问计数型互斥锁只允许一个。Java 中的相关类java.util.concurrent.Semaphore 用于线程间不直接用于进程间。若需进程间信号量需使用 FileLock 或 JNI 调用系统信号量。6.信号Signal软件中断异步通知进程某个事件发生。常见信号SIGKILL强制终止、SIGTERM请求终止、SIGINTCtrlC。特点携带信息少只用来通知事件不传递数据。Java 中的处理通过 Runtime.getRuntime().addShutdownHook 捕获 SIGTERM 等信号更细粒度的信号处理可以使用 sun.misc.Signal非标准或 jdk.internal.misc.Signal。// 优雅关闭示例Runtime.getRuntime().addShutdownHook(newThread(()-{System.out.println(收到终止信号正在释放资源...);}));7.Socket通过网络协议栈TCP/UDP通信可以跨主机。本地进程间通信可使用 Unix Domain Socket比 TCP 更快不走网络协议栈。优点通用性强支持跨网络、跨语言。Java 中的优势java.net.Socket / ServerSocket 以及 NIO 提供了非常成熟的实现。本地通信可指定 localhost 127.0.0.1。// 服务端ServerSocketservernewServerSocket(8888);Socketclientserver.accept();// 客户端SocketsocketnewSocket(localhost,8888);面试问题1.共享内存为什么最快其他IPC方式管道、消息队列、Socket通常需要将数据从用户空间拷贝到内核空间再拷贝到接收方用户空间共两次拷贝。而共享内存只在内核中建立映射进程直接读写同一块物理内存无需拷贝。2.Java 中为什么很少直接用共享内存Java 的内存模型屏蔽了物理内存的直接操作跨 JVM 的共享内存需要依赖 MappedByteBuffer 或 JNI且需要自行处理内存布局、字节序、同步等问题复杂度高。通常使用 Redis、Kafka 等中间件来代替。3.管道和消息队列的核心区别管道是无格式的字节流没有消息边界消息队列是有格式的独立消息每个消息有类型和长度接收方可以按类型读取。4.信号量和互斥锁的区别互斥锁是二元信号量0/1用于保护临界区信号量可以大于1允许多个资源实例被并发访问。另外互斥锁要求同一个线程释放信号量可以由不同进程释放。

相关文章:

【JAVA基础面经】进程间的通信方式

文章目录前言1.管道(Pipe)2.命名管道(FIFO)3.消息队列4.共享内存5.信号量6.信号(Signal)7.Socket面试问题前言 进程是系统资源分配的最小单位,每个进程拥有独立的地址空间。为了保证不同进程之间…...

.NET对象转JSON,到底有几种方式?荣

背景 在软件开发的漫长旅途中,"构建"这个词往往让人又爱又恨。爱的是,一键点击,代码变成产品,那是程序员最迷人的时刻;恨的是,维护那一堆乱糟糟的构建脚本,简直是噩梦。 在很多项目中…...

如何用Python的NLTK库玩转FrameNet语义分析(附代码示例)

如何用Python的NLTK库玩转FrameNet语义分析(附代码示例) 自然语言处理(NLP)领域的一个核心挑战是如何让机器真正理解人类语言背后的含义。传统的关键词匹配或语法分析往往停留在表面,而FrameNet提供的框架语义学方法&a…...

2025届学术党必备的六大AI写作神器横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 具备自然语言处理技术的智能辅助,AI 写作软件能够快速生成文章、报告、营销文案等…...

TP4056P防反接及 OVP 功能 1A 锂电池线性充电芯片

简介 TP4056P 是一款完整的采用恒定电流/恒定电压的单节锂电池线性充电器,并带有锂电池正负极反接保护功能,可以保护芯片和用户安全。由于采用了内部PMOSFET 架构,加上防倒充电路,所以不需要外部检测电阻和隔离二极管。热反馈可对…...

OPUS编解码器在audio DSP上的移植和应用闯

前言 在使用 kubectl get $KIND -o yaml 查看 k8s 资源时,输出结果中包含大量由集群自动生成的元数据(如 managedFields、resourceVersion、uid 等)。这些信息在实际复用 yaml 清单时需要手动清理,增加了额外的工作量。 使用 kube…...

一款轻量级、纯粹的 Linux 服务器监控工具

👉 这是一个或许对你有用的社群🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 《项目实战(视频)》:从书中学,往事上…...

全球数据库各个细分领域的TOP1产品

文章目录一、关系型数据库(RDBMS)领域二、NoSQL数据库领域三、云原生数据库领域四、向量数据库(AI时代新兴)领域五、时间序列数据库领域六、NewSQL数据库领域七、数据仓库/OLAP领域八、嵌入式关系型数据库领域九、国产数据库市场格局十、发展趋势与洞察十一、数据库选型建议十二…...

从Java到Kotlin:线程同步的平滑迁移(Synchronized/Volatile篇)

从Java到Kotlin:线程同步的平滑迁移(Synchronized/Volatile篇) 当开发者从Java生态转向Kotlin时,线程同步机制的差异往往成为技术栈迁移过程中的关键挑战。本文将深入剖析Synchronized与Volatile在两种语言中的实现差异&#xff…...

基于非对称纳什谈判理论的微网电能共享与P2P交易优化策略:MATLAB复现及隐私保护技术探究

基于非对称纳什谈判的多微网电能共享运行优化策略 MATLAB代码,电网技术文献复现: 关键词:纳什谈判 合作博弈 微网 电转气-碳捕集 P2P电能交易交易 参考文档:《基于非对称纳什谈判的多微网电能共享运行优化策略》完美复现 仿…...

腾讯云轻量服务器一键部署OpenClaw教程

本文主要分享如何利用腾讯云轻量应用服务器,搭建个人可用的AI应用,全程聚焦技术实操,适合零基础个人开发者、AI爱好者参考,步骤清晰可落地,兼顾稳定性和实用性。 一、选择腾讯云搭建个人AI应用的核心原因(客…...

保姆级教程:用MediaPipe和BlazePose在Python里实时追踪你的健身动作(附完整代码)

从零构建健身动作分析系统:基于BlazePose的实时姿态追踪实战指南 在居家健身和数字化运动监测日益普及的今天,计算机视觉技术为个人健身提供了全新的可能性。想象一下,当你对着摄像头完成一组深蹲时,系统能实时指出"膝盖内扣…...

如何三步搞定macOS安装包下载:Download Full Installer终极指南

如何三步搞定macOS安装包下载:Download Full Installer终极指南 【免费下载链接】DownloadFullInstaller macOS application written in SwiftUI that downloads installer pkgs for the Install macOS Big Sur application. 项目地址: https://gitcode.com/gh_mi…...

C++ vs .NET 数组原地反转实测:小数组 C++ 碾压,大数组 .NET 反杀?级

前面我们对 Kafka 的整体架构和一些关键的概念有了一个基本的认知,本文主要介绍 Kafka 的一些配置参数。掌握这些参数的作用对我们的运维和调优工作还是非常有帮助的。 写在前面 Kafka 作为一个成熟的事件流平台,有非常多的配置参数。详细的参数列表可以…...

新概念英语第一册131_Do not be so sure

Lesson 131: Don’t be so sure! 别那么肯定 Watch the story and answer the question What’s the problem about deciding on a holiday? Who’s going to look after everything.Key words and expressions Egypt 埃及worry 担心 worry about sth. abroad…...

AI 首次实现电影级多镜头长视频生成!快手港中文开源ShotStream,可实现单NVIDIA GPU上可达16 FPS 互式故事讲述和高效即时帧生成。

在 AI 视频生成领域,我们长期被困在“单镜头”的牢笼里:生成的视频往往只有几秒到十几秒,且缺乏场景切换和叙事逻辑。想要生成一个有起承转合、有多角度运镜的完整故事片段,通常需要生成几十个独立视频再手动剪辑,不仅…...

突破60帧限制:EldenRingFPSUnlockAndMore让你的《艾尔登法环》焕然新生

突破60帧限制:EldenRingFPSUnlockAndMore让你的《艾尔登法环》焕然新生 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/g…...

Ostrakon-VL-8B实战:利用LSTM时序模型增强视频片段内容理解

Ostrakon-VL-8B实战:利用LSTM时序模型增强视频片段内容理解 你有没有遇到过这样的场景?面对一段几分钟的监控录像,需要快速知道里面发生了什么;或者刷到一个短视频,想让它自动生成一段文字描述。单纯靠人眼去看、人脑…...

WarcraftHelper终极指南:5分钟让魔兽争霸3完美适配现代电脑

WarcraftHelper终极指南:5分钟让魔兽争霸3完美适配现代电脑 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代系统上的…...

Folcolor:告别视觉疲劳!14种色彩让你的Windows文件夹管理效率提升3倍

Folcolor:告别视觉疲劳!14种色彩让你的Windows文件夹管理效率提升3倍 【免费下载链接】Folcolor Windows explorer folder coloring utility 项目地址: https://gitcode.com/gh_mirrors/fo/Folcolor 你是否曾在成百上千个黄色文件夹中迷失方向&am…...

终极ECAPA-TDNN说话人识别系统:从零到工业级部署的完整指南

终极ECAPA-TDNN说话人识别系统:从零到工业级部署的完整指南 【免费下载链接】ECAPA-TDNN Unofficial reimplementation of ECAPA-TDNN for speaker recognition (EER0.86 for Vox1_O when train only in Vox2) 项目地址: https://gitcode.com/gh_mirrors/ec/ECAPA…...

labview解析can报文,DBC解析Can报文,支持asc、csv、txt格式文件离线解析...

labview解析can报文,DBC解析Can报文,支持asc、csv、txt格式文件离线解析,可通过设置移位,逗号数,空格数等特征索引ID和报文数据,解析报文,可将解析结果存储为本地txt文本,可设置循环…...

Loop:3个简单步骤彻底告别macOS窗口管理混乱的终极解决方案

Loop:3个简单步骤彻底告别macOS窗口管理混乱的终极解决方案 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否曾在多任务处理时被杂乱的窗口拖慢了工作效率?作为一名每天需要…...

【Windows10实战】PyTorch版DeepLabV3+:从零构建自定义数据集训练全流程

1. 环境准备与工具安装 在Windows10系统上搭建PyTorch开发环境其实比想象中简单。我推荐使用PyCharm作为IDE,它的项目管理功能对深度学习项目特别友好。首先需要安装Python3.7或更高版本(实测3.8也能完美兼容),建议通过Anaconda来…...

从零到一:用prompt_toolkit打造你的专属交互式CLI

1. 为什么你需要prompt_toolkit? 如果你经常和命令行打交道,肯定遇到过这样的场景:输入命令时总得反复敲相同的指令,想给常用命令加个自动补全却无从下手,或者看着单调的黑白终端界面感到审美疲劳。这时候就该prompt_t…...

33种语言自由翻译:Hunyuan-MT 7B镜像部署与使用全指南

33种语言自由翻译:Hunyuan-MT 7B镜像部署与使用全指南 1. 为什么选择本地化翻译工具 1.1 在线翻译服务的局限性 在全球化协作日益频繁的今天,我们经常面临多语言沟通的挑战。传统在线翻译工具虽然方便,但存在几个关键问题: 隐…...

CSS如何制作卡片翻开呈现另一面的翻牌动画

最小可行结构需父容器设 perspective,卡片容器设 transform-style: preserve-3d,前后两面均设 backface-visibility: hidden 且初始 rotateY 分别为 0deg 和 180deg。用 transform: rotateY() 实现卡片翻转的最小可行结构翻牌动画本质是让前后两个面共享…...

Linux环境下TensorRT安装与配置全攻略

1. 环境准备与版本检查 在Linux系统上部署TensorRT之前,最关键的是确保基础环境兼容性。我遇到过不少开发者直接跳过版本检查导致后续各种报错,这里分享几个实用命令和避坑经验。 首先用nvidia-smi查看显卡驱动支持的CUDA最高版本。注意这里显示的是驱动…...

如何为企业级AI应用构建高效数据管道:实战解决方案提升80%内容处理效率

如何为企业级AI应用构建高效数据管道:实战解决方案提升80%内容处理效率 【免费下载链接】reader Convert any URL to an LLM-friendly input with a simple prefix https://r.jina.ai/ 项目地址: https://gitcode.com/GitHub_Trending/rea/reader Jina Reade…...

传统物流专员效率瓶颈明显,AI物流调度师正在替代

路线规划、车辆调度、在途跟踪、异常处理……传统物流专员的大量工作时间被这些重复性、高耗时的事务占据。随着运力成本上升和时效要求提高,人工调度的效率瓶颈日益突出:经验依赖强、响应速度慢、难以同时处理多变量优化。与此同时,“AI物流…...