首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生产者-使用者问题是否同时出现在共享内存和分布式内存体系结构中?

生产者-使用者问题是否同时出现在共享内存和分布式内存体系结构中?
EN

Software Engineering用户
提问于 2019-12-19 15:56:47
回答 1查看 682关注 0票数 1

我看过一些关于操作系统概念的书,提到了在同步并发访问共享资源的情况下生产者-消费者问题。所有这些似乎都在共享内存体系结构中。

生产者-消费者问题是否出现在分布式内存体系结构中进程之间的通信中?如果是,

  • 生产者所产生的输出是否存储在与使用者共享的地方?
  • 执行相同的同步方法(例如锁、信号量、监视器、.)应用于共享内存体系结构中的生产者-消费者问题在分布式内存体系结构中?

我看到“管道”和“流处理”这两个词很流行。它们是指生产者-消费者的问题/模式吗?它们是否需要与共享内存体系结构相同的同步方法?

谢谢。

EN

回答 1

Software Engineering用户

发布于 2019-12-19 18:42:10

您认为生产者-消费者中的种族和死锁问题源于共享变量和数据结构,这是正确的。

任何允许多个访问器(进程、线程、中断处理程序和主,有时甚至是简单的递归或对象模式)和共享变量或共享数据结构(具有原始读写访问权限)的系统都可能存在这样的问题。

例如,即使在分布式系统中:

  • 共享数据库(例如SQL、键值等)用于存储、读取和写入变量或数据结构,而非原子性地--如果一个参与者读取数据库,并且由于测试了某个值,就会向另一个参与者发送挂起消息(后者也可以更新数据库中的变量)--我们将遇到与共享内存相同的问题。
  • 由多个参与者更新的用于存储相同变量的共享文件系统可能会遇到相同的问题。

我们需要使用面向域的抽象来操作数据结构,而不是由独立和不同步的参与者执行的原始读写功能。

然而,当我想到分布式系统时,我会想到有意义的、高级别的消息传递系统可以设计为发送有关要处理的作业数据的消息,而不是管理共享变量的消息。

为了明确起见,分布式系统内部的节点必须能够缓冲网络数据包,这意味着队列和脱队列,这是生产者-使用者安排;因此,当然,这些实现将使用锁或其他保护内部共享缓冲区,但这种排队通常是在低于常规用户代码的系统级别进行的。

在分布式系统中,我们期望消费者在处理完所有(缓冲的)作业包后自然挂起自己,并在新包到达时恢复暂停状态--因此,生产者根本不必唤醒消费者;它只是发送一个作业包。这自然会处理生产者-消费者的空白缓冲区情况。与维基百科( wikipedia )的生产者-消费者方法相比,这打破了参与者唤醒图(消费者唤醒生产者,但也唤醒消费者)的循环性质。

一个强大的分布式系统还将提供一些反向压力机制,让消费者向生产者发送节流信息(挂起/恢复)--否则生产速度超过消费者消费速度的生产者最终会压倒消费者。这类似于生产者-消费者的完全缓冲条件;然而,相比之下,不涉及共享变量。

与基于共享内存的生产者-消费者一样,多个生产者或消费者使分布式系统中的问题复杂化,因此很可能会有一个协调服务来管理作业队列--尽管不一定是通过外部操纵共享变量。(这种协调服务还可以促进对网络和员工故障的重试。)

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/402723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档