进程间协同:从进程启动、同步与互斥到进程间通信

news2025/2/25 4:26:12

进程间协同的目的

在操作系统中,进程是计算机进行任务分配和调度的基本单位。在计算机系统中,有很多任务是无法由单个进程独立完成的,需要多个进程共同参与并协作完成。这就像在现实生活中,有些工作需要一个团队来完成,而不是一个人。

具体来说,进程间协同的主要目的有以下几个:

1、提高资源的使用效率。

多个进程共享系统资源,提高资源的利用率。例如,多个进程可以共享内存、磁盘等资源。

多个进程并行处理任务,提高系统的性能。例如,一个进程在等待I/O操作完成时,其他进程可以继续执行计算任务。

2、提高可靠性。

通过进程间的协同,可以实现故障恢复和故障转移,提高系统的可靠性。例如,对于负载均衡软件,当后端的某个计算机进程出现故障时,负载均衡软件可以将请求转发到承担相同任务的其他计算机进程上,保证服务的连续性。

3、实现复杂功能。

通过进程间的协同,可以实现一些复杂的功能。例如,在Nginx中,一个"master"进程负责管理多个"worker"进程,每个"worker"进程可以处理多个并发连接。

启动进程的协同

为了更好的理解进程间协同,我们的探讨需要先从进程的启动开始。

目前有两种启动进程的方法。

一种是创建子进程。创建子进程就像是请自己的孩子帮忙,我们可以直接控制和管理子进程。

另一种是使用命令执行。使用命令执行就像是打电话叫别人来帮忙,我们可以调用系统中的任何可执行程序。

在不同的操作系统中,启动进程有不同的实现方式。

在Unix和Linux系统中,通常会组合使用fork和exec来启动一个新的程序。首先使用fork创建一个新的进程,然后在新的进程中使用exec加载新的程序。这样,新的程序可以在自己的进程中独立运行,不会影响到原来的进程。

在Windows中,如果你需要精细控制新进程的行为,或者需要获取新进程的详细信息(如进程ID、句柄等),你应该使用CreateProcess函数。如果你只是想简单地运行一个应用程序或打开一个文件,而不需要太多的控制选项,你可以使用ShellExecute函数。

在iOS中,我们使用URL Scheme来启动进程,这种方法比较独特。URL Scheme就像一个http链接,不过它是一种特殊的URL。当一个应用请求打开一个URL Scheme时,操作系统会检查这个URL Scheme是否被其他应用注册。如果被注册,那么操作系统会启动对应的应用,并将URL的参数传递给这个应用。之所以这样设计,是因为iOS更注重安全,每个应用都运行在自己的沙箱(sandbox)环境中,它们之间是相互隔离的,这样可以保证应用的安全性,防止恶意应用访问其他应用的数据。

同步与互斥

在多进程环境中,同步与互斥是非常重要的概念。同步是指多个进程在执行过程中,为了保证数据的一致性,需要各个进程按照某种顺序执行。而互斥则是指某一资源在某一时间内只能被一个进程访问。

Mutex

Mutex是一种常用的互斥手段。

Mutex的工作原理是,当一个进程需要访问某个资源时,首先尝试获取Mutex,如果Mutex已经被其他进程获取,则该进程需要等待;如果Mutex没有被其他进程获取,则该进程可以获取Mutex并访问资源。当该进程访问完资源后,需要释放Mutex,以便其他进程可以获取Mutex并访问资源。

这就像是一个房间(共享资源)只能有一个人(进程)在里面,其他人必须等待,当这个人离开后,其他人才能进去。

在Windows系统中,互斥通过Name实现。每个互斥对象都有一个唯一的名称,通过这个名称,不同的进程可以访问到同一个互斥对象。当一个进程需要访问一个共享资源时,它首先需要通过操作系统内核请求获得互斥对象。如果互斥对象当前没有被其他进程拥有,那么这个进程就会获得互斥对象,并可以访问共享资源。如果互斥对象已经被其他进程拥有,那么这个进程就需要等待,直到互斥对象被释放。

在Linux系统中,则是直接通过共享内存实现。不同的进程可以通过映射同一段共享内存来实现通信。互斥对象可以存储在这段共享内存中,通过修改和检查互斥对象的状态,不同的进程可以协调对共享资源的访问。这种方式比较复杂,但是效率较高,因为进程之间不需要通过操作系统来传递消息。

在iOS系统中,通过Path实现。这主要是因为iOS系统对应用的沙盒限制,不同的应用无法直接共享内存,所以需要使用文件系统作为中介。当一个应用需要访问一个共享资源时,它会在文件系统中创建一个锁文件,这个锁文件的路径就代表了互斥对象。其他的应用在访问共享资源之前,需要检查这个锁文件是否存在,如果存在就需要等待,直到锁文件被删除。

Semaphore

Semaphore是另一种实现进程间同步的手段,它主要通过PV操作来实现。

Semaphore的工作原理是,Semaphore内部维护一个计数器,当一个进程需要访问某个资源时,首先执行P操作,如果计数器的值大于0,则计数器的值减1,该进程可以访问资源;如果计数器的值等于0,则该进程需要等待。当该进程访问完资源后,执行V操作,计数器的值加1。

注意同步与互斥的概念并非割裂的,无论是mutex还是semaphore,都可以实现同步与互斥的效果。

通信

在进程间协同中,通信是非常重要的一环。进程间的通信主要通过资源共享、管道和消息等方式实现。

资源共享

资源共享是一种简单有效的进程间通信方式,主要包括文件共享、剪贴板共享等。

例如,两个进程可以通过读写同一个文件来交换数据;或者,一个进程可以把数据放到剪贴板中,另一个进程则可以从剪贴板中取出数据。

管道

管道是一种特殊的文件,主要用于进程间的数据传输。根据是否有名字,管道分为匿名管道和命名管道。

匿名管道

匿名管道主要用于父子进程之间的通信,它基于内核缓存(文件描述符),生命周期随创建进程,是一种阻塞式的通信方式。

命名管道

命名管道可以用于任意进程间的通信,它基于文件(数据在内存),生命周期随操作系统或者引用为0就会自动被关闭,是一种非阻塞的通信方式。

共享内存

共享内存是一种将两个进程的内存页关联到同一个文件句柄的通信方式。它是一种高效的通信方式,因为两个进程可以直接访问同一块内存,无需进行数据复制。

这就像是两个人共享一个笔记本,都可以在上面写东西。这种设计的初衷是提高数据访问的效率,但需要处理好同步和互斥问题,避免数据混乱。

消息

消息是一种常见的进程间通信方式,主要包括网络套接字和UNIX域。这些设计的初衷是提供一种跨网络的进程间通信方式,满足分布式计算的需求。

网络套接字是一种可以跨网络进行通信的方式,它可以让不同的机器上的进程进行通信,开发人员经常谈到的TCP、UDP,以及更上层的Http、FTP等,都是这种方式。

UNIX域则是一种在同一台机器上的进程进行通信的方式。这是一种高效的进程间通信(IPC)方式,因为所有的通信都在同一台主机上进行,没有网络延迟和协议开销。

设计启示

在设计系统时,我们要努力找到系统的稳定点和变化点,这样才能让程序适应各种变化,拥有更强的生命力。

在进程协同领域,进程间的协同机制或实现方式是不稳定的,进程之间的通信设计稳定点在契约。例如,WCF是一个进程间通信的优秀框架,它基于契约,支持多种通信方式。

在实际的编程中,我们应该尽可能地选择稳定、成熟的通信机制,避免因为机制的改变而导致的代码修改。同时,我们也需要清楚地了解每种通信方式的优缺点,以便在不同的场景下选择最适合的通信方式。


总的来说,进程间的协同是计算机系统中一个非常重要的概念,它涉及到进程的启动、同步与互斥、通信等多个方面。通过对这些概念的理解,我们可以更好地理解和掌握计算机系统的运行机制,从而更好地进行编程和系统设计。

关注萤火架构,提升技术不迷路!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1401456.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧照明迎来新升级:5G/4G智慧灯杆网关助力节能控制

近年来,随着智能科技的飞速发展,智慧照明系统已成为城市建设的热门话题。其中,5G/4G智慧灯杆网关作为智慧照明的重要组成部分,正逐渐引起人们的关注。其能够实现智能控制与远程管理,为城市节能减排做出了巨大贡献。  …

MCU常用外设总线

目录 前言一、时钟与中断二、GPIO三、ADC四、定时器4.1 基本定时器4.2 通用定时器4.2.1 输入捕获4.2.2 输出比较 五、UART六、IIC七、SPI 前言 本文主要讲单片机外设的功能,即这些外设是什么,可以用来干什么,了解了之后我们就可以通过相应的寄…

裁员1600人赔偿8000万,游戏巨头的寒冬要来啦!

据相关可靠消息,网易裁员1600人,消息确认可靠,并且基本都是网易游戏的技术人。 网易是一家靠门户网站起家的互联网公司,并提前布局了网易邮箱。当然最后靠网易游戏提前转型,将竞争对手搜狐和新浪远远的甩着后面啦。 网…

MacM1Pro Parallels19.1.0 CentOS7.9 Install PostgrepSQL

相关阅读 MacM1Pro安装 Parallels Desktop 19.1.0 https://blog.csdn.net/qq_41594280/article/details/135420241 MacM1Pro Parallels安装Parallels Tools https://blog.csdn.net/qq_41594280/article/details/135398780 MacM1Pro Parallels安装CentOS7.9 https://blog.csdn.n…

第十二站(20天):C++泛型编程

模板 C提供了模板(template)编程的概念。所谓模板,实际上是建立一个通用函数或类, 其 类内部的类型和函数的形参类型不具体指定 ,用一个虚拟的类型来代表。这种通用的方式称 为模板。 模板是泛型编程的基础, 泛型编程即以一种独立于任何特定…

微软Microsoft推出针对学生的AI练习英语口语工具”阅读教练“:Reading Coach

阅读教练官网链接:https://coach.microsoft.com AI工具专区:AI工具-喜好儿aigc 学生可以通过选择角色和设定,利用AI生成独特的故事,从而激发阅读兴趣并提高阅读流畅度。语音转文本AI能够实时分析学生的阅读流利性,检测…

从 fatal 错误到 sync.Map:Go中 Map 的并发策略

为什么 Go 语言在多个 goroutine 同时访问和修改同一个 map 时,会报出 fatal 错误而不是 panic?我们该如何应对 map 的数据竞争问题呢? 这篇文章将带你一步步了解背后的原理,并引出解决 map 并发问题的方案。 Map 数据竞争 首先…

慢查询定位

慢查询 使用工具 mysql自带慢日志 默认没有开启需要手动开启 查看慢日志中的文件 总结

研学活动报名系统源码开发方案

一、项目背景与目标 (一)项目背景: 随着教育水平的提高和人们对综合素质培养的需求增加,研学活动作为一种教育方式受到了广大家长和学生的青睐。为了更好地组织和管理研学活动,需要建立一个研学活动报名系统&#xf…

《WebKit 技术内幕》之八(3):硬件加速机制

3 其他硬件加速模块 3.1 2D图形的硬件加速机制 其实网页中有很多绘图操作是针对2D图形的,这些操作包括通常的网页绘制,例如绘制边框、文字、图片、填充等,它们都是典型的2D绘图操作。在HTML5中,规范又引入了2D绘图的画布功能&a…

Windows下载安装vcpkg并使用它来安装第三方库(visualstudio)

1.使用Git下载vcpkg仓库(下载比较慢,个人比较喜欢打开下面网址然后用迅雷下载,速度飞快) git clone "https://github.com/Microsoft/vcpkg.git"2.下载好之后解压打开文件夹,双击bootstrap-vcpkg.bat文件&…

BMP图像文件头

文件头总字节为54 byte 其代码的含义有 424d:ASCII BM 36ec_5e00:1920*1080*354 3600:偏移54byte 2800: 40 byte 8007 0000 :16‘h780 1920 3804 0000 :16‘h4801080 1800 :24bit 00ec 5e00&…

FPGA时序分析与时序约束(五)——使用Timing Analyzer进行时序分析与约束

Quartus的安装路径下会自带有例程,通过fir_filter进行学习如何使用Timing Analyzer进行时序分析与约束。 1.1 创建时序网表 打开fir_filter并进行综合后可通过菜单栏Tool->Timing Analyzer或工具栏按钮运行Timing Analyzer。 根据前面提到的,时序分析…

JVM中的垃圾收集算法

标记-清除算法 首先标记出所有需要回收的对象,在标记完成后,统一回收掉所有被标记的对象,也可以反过来,标记存活的对象,统一回收所有未被标记的对象。标记过程就是对象是否属于垃圾的判定过程 缺点 第一个是执行效率…

自我摸索:如何运营并玩转CSDN?

自注册CSDN以来已有七年之久,但真正运营CSDN也是最近一年的事情,大概就是22年底,参加2022 博客之星 的竞选。接触了很多大佬,也学习模仿着开始玩转CSDN,虽然没有同期运营的大佬们玩的6,但也有一些经验可以来…

2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作✌ 主要内容:SpringBoot、Vue、SSM、HLM…

2023 年顶级前端工具

谁不喜欢一个好的前端工具?在本综述中,您将找到去年流行的有用的前端工具,它们将帮助您加快开发工作流程。让我们深入了解一下! 在过去的 12 个月里,我在我的时事通讯 Web Tools Weekly 中分享了数百种工具。我为前端…

【视频媒体】深入了解直播视频流

深入了解直播视频流🎥 YouTube、TikTok live和Twitch上的直播视频是如何工作的? 直播视频流与常规流媒体不同,因为视频内容通过互联网近乎实时发送,通常只有几秒钟的延迟。 下图解释了实现这一目标背后所发生的事情。 步骤1&…

Python 面向对象(类)

目录 面向对象理念 面向对象三大特性 定义类 格式 创建对象(实例化一个对象) 创建方法 实例方法 类方法 静态方法 self含义 对象属性 添加获取对象属性 ​编辑 类里面获取对象属性 继承 单继承 多继承 多态 面向对象理念 面向对象编程…

day01.基础知识

目录 一.函数与语句 1.1进入C 1.1.1main( )头函数 1.1.2 注释 1.1.3头文件 1.1.4预处理 1.1.5命名空间 1.1.6输入与输出 1.1.7格式化 1.2语句 1.2.1声明语句与变量 1.2.2赋值语句 1.3函数 1.3.1使用有返回值的函数 一.函数与语句 1.1进入C 1.1.1main( )头函数 …