代码之家  ›  专栏  ›  技术社区  ›  theateist

我在不同时间间隔向客户发送数据的设计是否正确?

  •  0
  • theateist  · 技术社区  · 7 年前

    代码应该用C++编写。我提到这一点,以防万一有人会提出一个在C++中实现的解决方案。

    目标:

    线程上运行的生产者 t1 向线程上运行的使用者插入图像 t2 . 消费者有一个客户列表,他应该在不同的时间间隔向其发送图像。E、 g.client1每1秒需要图像,client2每5秒需要图像,等等。

    建议实施:

    有一个主要队列 imagesQ 在生产者将图像放入的消费者中。除了主队列之外,使用者还管理队列向量的列表 clientImageQs 客户数量的大小。使用者为每个客户机创建一个子使用者,该子使用者在其自己的线程上运行。每个这样的子消费者从相关队列中取出图像 客户图像 并按其间隔向其客户端发送图像。

    每次新图像到达 图像 ,消费者复制它并将其发送到 客户图像 . 因此,每个子消费者将能够以自己的频率向其客户发送图像。

    潜在问题及解决方案:

    如果生产者将图像排队的速度远远高于某个子消费者的出列速度,则队列将爆炸。但是,消费者可以在 客户图像 在排队之前。而且,如果需要的话,消费者会在将新图像放入队列之前将一些旧图像从队列中取出。

    问题

    这是个好设计还是有更好的设计?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Jim Rogers    7 年前

    您可以在一组已确定的解决方案限制内描述问题。你的描述很复杂,很混乱,我敢说,很混乱。 为什么消费者只从共享缓冲区分发图像?为什么不允许每个所谓的“客户机”根据需要从缓冲区读取数据呢? 为什么不将共享缓冲区实现为单个图像缓冲区。制片人按其速度写作。客户端以自己的速率执行缓冲区的非破坏性读取。确保每个客户机每次读取缓冲区时都读取缓冲区中的最新图像。生产者只需在每次写入时重写缓冲区。 在这个应用程序中,多元素队列没有任何好处。事实上,正如您所描述的,它使解决方案非常复杂。 见 http://sworthodoxy.blogspot.com/2015/05/shared-resource-design-patterns.html 查找标题“无条件缓冲区”。 上面列出的示例都是使用Ada实现的,但是与并发设计模式相关的概念适用于所有支持并发的编程语言。