问题标签 [producer-consumer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2592 浏览

c++ - 生产者/消费者实施——需要反馈

我正在准备几周后的面试,我想我会尝试一下,以及我在学校学到的简单的生产者/消费者问题。

好久没做这个了,好奇大家怎么看?我应该添加什么以使其成为更好的示例等。感谢您的反馈!:)

0 投票
2 回答
647 浏览

design-patterns - Grails 中的生产者/消费者?

在多次尝试实现并发线程失败后,我正在尝试在 Grails 中实现消费者/生产者应用程序。基本上,我想将来自客户端的所有事件(通过单独的 AJAX 调用)存储在一个队列中,然后在添加新事件后立即以线性方式处理这样的队列。

这看起来像一个生产者/消费者问题http ://en.wikipedia.org/wiki/Producer-consumer_problem

我如何在 Grails 中实现这一点(可能使用计时器,或者通过生成事件“进程队列”更好)?

基本上我希望有一个单例服务等待队列中的新事件并线性处理它们(即使队列由多个并发进程加载)。

有什么提示吗?

干杯!

0 投票
4 回答
999 浏览

c# - 我的生产者-消费者队列设计有什么问题?

我从这里的 C# 代码示例开始。我试图调整它有几个原因:1)在我的场景中,所有任务将在消费者开始之前预先放入队列中,2)我想将工作人员抽象到一个单独的类中,而不是让类中的原始Thread成员WorkerQueue

我的队列似乎并没有自行处理,它只是挂起,当我在 Visual Studio 中中断时,它卡在#1的_th.Join()线上。WorkerThread另外,有没有更好的方法来组织这个?关于暴露WaitOne()andJoin()方法的一些事情似乎是错误的,但我想不出一种合适的方式让WorkerThread队列与队列交互。

另外,顺便说一句 - 如果我q.Start(#)在块的顶部调用,则using只有一些线程每次启动(例如线程 1、2 和 8 处理每个任务)。为什么是这样?这是某种竞争条件,还是我做错了什么?

0 投票
1 回答
101 浏览

design-patterns - 使用 .NET 4.0 实现生产者-消费者模式

借助 .NET 4.0 中的所有新并行编程功能,实现生产者-消费者模式(其中至少一个线程正在生产/排队任务项,而另一个线程执行/取消排队这些任务)将是一种简单而快速的方法。我们可以从所有这些新的 API 中受益吗?这种模式的首选实现是什么?

0 投票
2 回答
865 浏览

c++ - C++:将 5 个消费者同步到 1 个生产者(多线程)

我有五个消费者和一个生产者。五个消费者各自从一个生产者输出不同的数据,持续约 10 毫秒。在这 10 毫秒内,生产者为下一个输出准备参数。设置输出参数后,我想设置一个标志,指示消费者开始下一个输出。我只希望生产者在消费者输出数据时生产。

我不确定如何同步五个消费者和单个生产者。我目前有两个标志,runFlag 和 doneFlag。当消费者读取新数据时,我想将 runFlag 设置为 true 以便计算开始,并且我想将 doneFlag 设置为 false,因为计算尚未完成。但是,如果我在一个消费者中将 doneFlag 设置为 false,则在另一个消费者可以检查标志之前,它可能在另一个消费者中为 false。

我希望我的问题足够具体。如果还有什么我可以提供的,请告诉我。另外,我只是在寻找有关如何进行的总体思路。我知道有多种方法可以做到这一点,但我不确定哪种方法效果最好。

谢谢!

0 投票
2 回答
364 浏览

multithreading - 生产者/消费者 - I/O 磁盘

我在磁盘上有一个压缩文件,该文件以块为单位进行分区。我从磁盘读取一个块,将其解压缩到内存并读取数据。

是否可以创建一个生产者/消费者,一个从磁盘恢复压缩块并放入队列的线程和另一个解压缩和读取数据的线程?

性能会更好吗?

谢谢!

0 投票
2 回答
706 浏览

java - LinkedBlockingQueue 对于像生产者-消费者这样的场景是正确的选择吗?

我有一个类似生产者-消费者的场景。A 类产生 E 类型的对象。我必须将它保存在 A 类的静态数据结构中,因为消费者逻辑应该在 B 类中处理,它不引用 A 的对象。LinkedBlockingQueue 是正确的数据类型吗?队列?或者有没有更好的选择?

0 投票
2 回答
1872 浏览

java - Java中如何实现一个生产者、多个消费者和多个对象?

我有一个关于生产者/消费者设计模式的问题,实际上我的情况是:我有一个类产生多种类型的消息(通知)和多个消费这些消息的消费者。

复杂之处在于我的 Producer 产生不同类型的消息,而我的消费者使用这些消息。

那么这种情况的最佳实施是什么?生产者/消费者设计模式是这种情况的最佳解决方案吗?

0 投票
2 回答
537 浏览

java - Java Thread Good Practice 这种方式?

这是一篇很长的帖子,所以我不得不感谢您的阅读。我的应用程序应该处理很多声音文件,比如说 4000+。我的第一种方法是加载一定数量(比如说 200mb)的声音数据,对其进行处理、写入,然后“清空”数据以让 gc 释放它。但考虑到数据是通过 Intranet 加载的,这似乎不是“最好”的方式。(文件访问很慢)计算应该从第一个加载的文件开始。为了实现这一点,我将概念更改为一种“生产者/消费者”(我认为)。到目前为止,这是我的课程:

读者/制片人

这是作者/(不是消费者)

这是所有东西聚集在一起的部分:

“ProcessorChain”是一个可运行的。es.submit -> "es" 是一个 CachedThreadPool。

我首先需要知道的是天气与否,这种方法是否“好”,或者它是否更像是“废话”。它似乎工作得很好,但我对编写器线程几乎没有问题,似乎在某些情况下并非所有文件都被写入。编写器线程提交方法由处理器链完成工作后调用。第二件事是线程安全。我错过了什么吗?

0 投票
5 回答
7280 浏览

java - Java:高性能消息传递(单一生产者/单一消费者)

我最初在这里问了这个问题,但我意识到我的问题不是关于 while-true 循环。我想知道的是,在 Java 中进行高性能异步消息传递的正确方法是什么?

我正在尝试做的...

我有大约 10,000 个消费者,每个消费者都从他们的私人队列中消费消息。我有一个线程一一生成消息并将它们放入正确的消费者队列中。每个消费者无限循环,检查消息是否出现在其队列中并处理它。

我相信这个术语是“单一生产者/单一消费者”,因为有一个生产者,每个消费者只在他们的私有队列上工作(多个消费者从不从同一个队列中读取)。

Consumer.java 内部:

生产者正在快速将消息放入消费者消息队列中(每秒数百万条消息)。消费者应该尽快处理这些消息!

注意:while (true) { ... }由 Producer 作为其最后一条消息发送的 KILL 消息终止。

但是,我的问题是关于设计此消息传递的正确方法。我应该为 messageQueue 使用哪种队列?它应该是同步的还是异步的?Message应该如何设计?我应该使用 while-true 循环吗?消费者应该是一个线程还是其他什么?10,000 个线程会慢到爬行吗?线程的替代品是什么?

那么,在 Java 中进行高性能消息传递的正确方法是什么?