最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 多进程协作主要有以下三点优势,你知道吗?

    多进程协作主要有以下三个优点。

    进程间通信(IPC)是多进程协作的基础。一般来说,IPC 至少需要两方(如两个进程)参与。根据信息流的方向,这两方通常被称为发送方和接收方。在实际使用中,IPC经常用于服务调用,所以IPC中涉及的两方也称为调用者和被调用者,或者客户端和服务端。

    图 7-1 是一个简单的 IPC 设计。它假设内核已经为两个进程映射了一块共享内存,而共享内存只能保存两条消息(发送方消息和接收方消息)。

    01 进程间通信的重要功能

    1. 数据传输

    消息传递(message passing)是IPC中常用的一种数据传递方式,即将数据抽象成消息进行传递。不同的 IPC 设计有不同的消息抽象,消息传递通常需要一个“中间人”(例如共享内存)。

    2. 控制流传输

    当发生通信时,内核将控制流从发送方进程切换到接收方进程(返回过程类似)。IPC中的控制流传递通常是通过内核对进程运行状态和运行时间的控制来实现的。

    02 进程间通信的分类

    1. 单路 IPC、二路 IPC、单路/二路 IPC

    单向 IPC 通常意味着消息只能在连接上从一端发送到另一端,而双向 IPC 允许双方相互发送消息。单向/双向IPC会根据通讯中的具体配置选项来决定是需要支持单向还是双向通讯。在实践中,很多系统选择单向/双向IPC,可以更好的支持各种场景。当然,仅支持单向 IPC 的机制,例如管道和信号,在实践中也有很多应用。

    2. 同步 IPC 和异步 IPC

    简单来说,同步IPC是指它的IPC操作(如Send)会阻塞进程,直到操作完成;而异步IPC通常是非阻塞的,进程只要发起一个操作就可以返回,而无需等待它完成。

    同步 IPC 比异步具有更好的编程抽象。但是,在操作系统的发展过程中,同步IPC逐渐显现出一些不足。一个典型的问题是并发。一般来说,大多数操作系统内核会选择同时实现同步和异步IPC,以满足不同的应用需求。

    03 进程间通信相关的机制

    1. 超时机制

    超时机制扩展了 IPC 通信两端之间的接口,允许发送方/接收方指定等待发送/接收请求的时间。例如,应用程序最多可以花费 5 秒等待文件系统进程处理 IPC 请求。如果超过 5 秒仍然没有反馈,操作系统内核结束 IPC 调用并返回超时错误。

    2. 通讯连接管理

    对于基于共享内存的进程间通信方案,通信连接的建立通常在共享区建立的那一刻完成;而对于涉及内核控制流传递的通信,通信连接管理是内核IPC模块的一个非常重要的部分。部分。

    尽管在实际系统中会有各种各样的实现方式,但大多数可以分为两类——直接通信和间接通信。直接通信意味着通信过程的一方需要明确标识另一方。间接通信需要经过一个中间邮箱来完成通信,每个邮箱都有自己的唯一标识,进程通过共享一个邮箱来交换消息。

    3. 权限检查

    进程间通信通常依赖于一组权限检查机制来确保连接安全。例如seL4等微内核系统中的Capability机制,将所有通信连接一一抽象成内核对象。并且每个进程对内核对象的访问权限(以及可以在该内核对象上执行的操作)都以能力为特征。

    当一个进程试图与其他进程通信时,内核会检查该进程是否具有能力、是否有足够的权限访问连接对象以及该对象是否指向目标进程。类似地,宏内核,如 Linux 系统,经常重用其有效用户/有效组的文件权限来表征进程对连接的权限。

    4. 命名服务

    命名服务就像一个全局看板,用于协调服务器和客户端进程之间的信息。简单来说,服务器进程可以告诉命名服务进程它提供的服务。例如,文件系统进程可以注册“文件系统服务”,网络系统进程可以注册“网络服务”。

    客户端进程可以在命名服务上查询当前服务,并选择想要建立连接的服务来尝试获取权限。是否将权限分配给对应的客户端进程是由命名服务和对应的服务器进程根据特定的策略决定的。

    04 宏内核进程间通信

    宏内核下典型的进程间通信机制包括 System V 中的管道、消息队列、信号量、共享内存、Linux 信号机制和套接字机制。

    宏内核操作系统中的进程间通信更多是关于应用程序之间的交互。因此,设计的重点通常放在界面的易用性和稳定性上。图 7-5 显示了典型的宏内核进程间通信机制的比较。

    可以看出,虽然几种方案在IPC的几个设计角度上存在异同,但主要区别在于数据抽象。在实际应用中,虽然可以采用各种IPC方案作为通信选择,但应用程序往往会根据数据抽象的要求选择特定的方案。

    05 微内核进程间通信

    由于进程间通信对微内核系统性能的重要性,大多数微内核操作系统会优先从性能的角度来设计和实现进程间通信。

    1. Mach:早期的微内核进程间通信设计

    Mach通过端口和消息这两个基本抽象设计并实现了一个间接通信IPC:通信的双方不需要明确指定对方,而是通过端口(对应“邮箱”)进行通信。进程间流动的数据通过端口是消息。

    作为早期的微内核系统,马赫系统的性能与当时的宏内核系统(如 UNIX)相比还有很大的差距。原因之一是为了实现大量的目标,比如可定制性、可移植性等,Mach 内核复杂,代码量大。但是,Mach 的 IPC 设计仍然对许多后续系统产生了非常重要的影响。

    Mach 中端口和消息的设计使进程间通信与特定进程隔离开来。只要一个进程有某个端口,它就可以通过这个端口与“另一端”的进程进行通信。后续的微内核系统设计,无论是借鉴其设计,还是以它的缺陷为警示,多半都考虑了马赫的思想。

    2. L4:围绕进程间通信优化设计的微内核系统

    基于Mach的经验,Liedtke等研究人员开始研发L4系列微内核系统。L4系列微内核系统的一个突出思想是进程间通信是微内核的核心功能,整个系统需要围绕通信进行设计和实现。L4 是今天仍然非常主流的微内核系统,尤其是在衍生出各种变体和相关系统之后。

    在 L4 微内核中,内核只保留基本功能,包括地址空间、线程、进程间通信等,不考虑兼容性等要求linux的通信方式套接字,而是选择针对特定硬件进行极致性能优化。这样做的好处是内核中的代码量很小,可以尽可能地支持少量的功能。

    3. LRPC:迁移线程模型

    线程迁移是一种优化性能的“极端”IPC 设计。到目前为止,我们了解到优化IPC性能的大部分工作将集中在两个部分:优化控制流切换的性能和优化数据传输的性能。

    迁移线程认为,其他 IPC 设计可以看作是将需要处理的数据发送到另一个进程并让其处理。这就是为什么控制流切换和数据传输可能成为主要瓶颈的原因。

    如果我们从另一个角度将另一个进程的数据处理代码拉到当前进程中,是否可以避免控制流切换(仍然由当前进程处理)和数据传输(数据在当前进程中已经准备好)?迁移线程是围绕这个新视角设计的。

    迁移线程方案用于LRPC、Mach(优化版)等系统,是目前纯软件进程间通信优化中最好的设计之一。迁移线程的基本原则是:

    简化控制流切换,允许客户端线程执行“服务器端代码”;简化数据传输,共享参数栈和寄存器;简化接口,减少序列化等开销;优化并发并避免共享全局数据结构。其中,前两个原则是基于“本地拉代码”的新视角。

    图 7-13 显示了迁移线程 IPC 与主流 IPC 设计的对比。要将代码“拉到本地”,迁移线程首先需要解耦线程结构,明确线程的哪些部分在处理通信请求中起关键作用。这部分然后允许被调用者(负责处理请求的逻辑)在调用者的上下文中运行,将跨进程调用变成更接近函数调用的东西。

    如果采用迁移线程模型,内核在进程间通信时不会阻塞调用者线程,而是让调用者线程执行被调用者的代码。整个过程并没有被被调用线程唤醒,相反,被调用方更像是一个“代码提供者”。

    此外,内核不进行全上下文切换,而只是切换与请求处理相关的系统状态linux的通信方式套接字,例如地址空间(页表)。其中,不会涉及线程和优先级的切换,也不会调用调度器。迁移线程的好处是减少了内核调度时间,简化了内核中的IPC处理。在多核场景下,迁移线程方案也可以避免跨核通信引入的开销。

    06 案例研究:Android Binder

    在Android场景中,进程间通信在大多数情况下实际上是“远程过程调用”。服务端进程负责提供具体的服务,客户端进程通过进程间通信发起服务请求,获取服务端进程处理的结果。

    Binder IPC中除了通信双方的进程外,还引入了一个ContextManager进程。上下文管理器提供命名服务,它的任务是建立通信连接。

    在Binder IPC的核心设计中,提供了句柄(handle)的抽象来表示IPC对象(即通信连接)。句柄实际上与熟悉的文件描述符非常相似。用户通过操作手柄来启动与特定进程的通信。

    与之前的进程间通信设计不同的是,Binder IPC中使用了“线程池”的服务器端模型。也就是说,在服务端,Binder的用户态和内核都会有响应线程池的概念。当客户端进程启动通信时,内核通过从(服务器的)线程池中选择可用线程来响应。这种设计在同步进程间通信的情况下可以更好的处理并发通信请求。

    本文摘自《现代操作系统:原理与实现》,经出版商许可发布。

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » 多进程协作主要有以下三点优势,你知道吗?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论