我看过一些关于操作系统概念的书,提到了在同步并发访问共享资源的情况下生产者-消费者问题。所有这些似乎都在共享内存体系结构中。
生产者-消费者问题是否出现在分布式内存体系结构中进程之间的通信中?如果是,
我看到“管道”和“流处理”这两个词很流行。它们是指生产者-消费者的问题/模式吗?它们是否需要与共享内存体系结构相同的同步方法?
谢谢。
发布于 2019-12-19 18:42:10
您认为生产者-消费者中的种族和死锁问题源于共享变量和数据结构,这是正确的。
任何允许多个访问器(进程、线程、中断处理程序和主,有时甚至是简单的递归或对象模式)和共享变量或共享数据结构(具有原始读写访问权限)的系统都可能存在这样的问题。
例如,即使在分布式系统中:
我们需要使用面向域的抽象来操作数据结构,而不是由独立和不同步的参与者执行的原始读写功能。
然而,当我想到分布式系统时,我会想到有意义的、高级别的消息传递系统可以设计为发送有关要处理的作业数据的消息,而不是管理共享变量的消息。
为了明确起见,分布式系统内部的节点必须能够缓冲网络数据包,这意味着队列和脱队列,这是生产者-使用者安排;因此,当然,这些实现将使用锁或其他保护内部共享缓冲区,但这种排队通常是在低于常规用户代码的系统级别进行的。
在分布式系统中,我们期望消费者在处理完所有(缓冲的)作业包后自然挂起自己,并在新包到达时恢复暂停状态--因此,生产者根本不必唤醒消费者;它只是发送一个作业包。这自然会处理生产者-消费者的空白缓冲区情况。与维基百科( wikipedia )的生产者-消费者方法相比,这打破了参与者唤醒图(消费者唤醒生产者,但也唤醒消费者)的循环性质。
一个强大的分布式系统还将提供一些反向压力机制,让消费者向生产者发送节流信息(挂起/恢复)--否则生产速度超过消费者消费速度的生产者最终会压倒消费者。这类似于生产者-消费者的完全缓冲条件;然而,相比之下,不涉及共享变量。
与基于共享内存的生产者-消费者一样,多个生产者或消费者使分布式系统中的问题复杂化,因此很可能会有一个协调服务来管理作业队列--尽管不一定是通过外部操纵共享变量。(这种协调服务还可以促进对网络和员工故障的重试。)
https://softwareengineering.stackexchange.com/questions/402723
复制相似问题