问题标签 [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 投票
3 回答
10006 浏览

c# - RabbitMQ C# API 基于事件的消息消费

这就是我们在通过订阅检索消息时所做的事情。我们使用 While 循环,因为我们希望消费者持续监听。如果我想让它甚至基于 ..那就是当新消息到达队列时只有消费者应该使用消息..或任何类似的事件..

0 投票
3 回答
1212 浏览

c# - 后台消费者线程生命周期管理最佳实践

我有一个 C# 类库,它启动了一个后台消费者线程(懒惰地),它监听从生产者/消费者队列中完成的任务。此类库可用于任何类型的 .NET 应用程序,并且当前在 ASP.NET MVC 网站下使用。消费者线程大部分时间都被阻塞,直到请求进入队列。任何给定的应用程序域都应该只有一个消费者线程。

我希望能够在应用程序退出时优雅地关闭使用者线程,无论它是什么类型的应用程序,例如 Windows 窗体、控制台或 WPF 应用程序。应用程序代码本身应该不知道该线程正在等待终止的事实。

如何从类库的角度解决这个线程生命周期问题?是否有一些全局应用程序关闭事件我可以绑定到优雅地拆除线程呢?

现在,因为它在 ASP.NET MVC 应用程序域中,所以它真的没关系,因为无论如何它们永远不会被优雅地拆除。但是现在我开始在旨在终止的计划控制台应用程序任务中使用它,我想一​​劳永逸地解决这个问题。控制台应用程序不会终止,因为消费者线程仍然处于活动状态并被阻塞等待请求。我在类上公开了一个公共静态 Thread 属性,以便Abort()在控制台应用程序退出时发出调用,但坦率地说,这很恶心。

任何指针将不胜感激!同样,我不想编写 Windows 窗体或 WPF 或控制台应用程序特定代码来解决问题。类库的每个使用者都可以使用的一个很好的通用解决方案是最好的。

0 投票
4 回答
863 浏览

multithreading - Efficient consumer thread with multiple producers

I am trying to make a producer/consumer thread situation more efficient by skipping expensive event operations if necessary with something like:

Obviously trying to get these things correct is a little tricky(!) so is the above pseudo code correct? A solution that signals the event more than is exactly needed is ok but not one that does so for every item.

0 投票
2 回答
1816 浏览

rabbitmq - 生产者工作通过消息队列持续向消费者散列?

我有一个生产者,我想通过一致的哈希在消费者之间一致地分配工作。例如,对于消费者节点 X 和 Y,任务 A、B、C 应该总是去消费者 X,而 D、E、F 应该去消费者 Y。但是如果 Z 加入消费者池,这可能会发生一点变化。

我不想编写自己的逻辑来连接到消费者节点,尤其是不想管理加入和离开池的节点,所以我走上了使用 RabbitMQ 的道路,每个消费者节点都有一个独占队列.

我遇到的一个问题是列出这些队列,因为生产者需要在分配工作之前知道所有可用的队列。AMQP 甚至不支持列表队列,这让我不确定我的整个方法。不过,RabbitMQ 和 Alice(目前不完整)添加了该功能:是否有用于在 RabbitMQ 上列出队列和交换的 API?

这是对兔子的明智使用吗?我应该使用消息队列吗?是否有更好的设计让队列可以始终如一地在消费者之间分配我的工作,而不是我需要这样做?

0 投票
4 回答
693 浏览

c# - 可能的内存泄漏?

我在单音中分析下面的代码,发现很多 Rate 对象都保存在内存中,尽管我清除了它们。

通过以下方式插入队列:

工作人员将速率日志插入数据库,如下所示:

有人看到可能的内存泄漏吗?

0 投票
4 回答
1705 浏览

c# - 单例中可能存在内存泄漏?

我以前问过这个问题,没有真正的答案。有人可以帮忙吗?我在单例中分析以下代码,发现List<Rate>虽然我清除了很多 Rate 对象 ( ) ,但它们仍保留在内存中。

通过以下方式插入队列:

工作人员将速率日志插入数据库,如下所示:

有人看到可能的内存泄漏吗?

0 投票
2 回答
766 浏览

python - Python Twisted Push Producer 的不规则传输问题

我想使用 Twisted 从队列传输数据。我目前使用推送生产者来轮询队列中的项目并写入传输。

问题是,数据的发送非常不规则,如果队列中只有一项,则永远不会发送数据。似乎 Twisted 一直等到要传输的数据增长到特定值,直到它传输它。我实施制片人的方式是否正确?我现在可以强制 Twisted 传输数据

我也尝试过使用 pull producer,但 Twisted 根本不调用resumeProducing()它的方法。resumeProducer()使用拉生产者时,我是否必须从外部调用该方法?

0 投票
1 回答
3248 浏览

jms - ActiveMQ:处理缓慢的消费者

关于 ActiveMQ:我有一个场景,我有一个生产者向消费者发送小(大约 10KB)文件。虽然文件很小,但消费者需要大约 10 秒来分析它们并将结果返回给生产者。我进行了很多研究,但仍然找不到以下问题的答案:

  1. 如何让代理将文件(完全)存储在队列中?
  2. 我应该使用 ObjectMessage(因为文件很小)还是 blob 消息?
  3. 因为消费者处理速度很慢,我应该降低他们的 prefetchLimit 还是使用循环调度策略?哪一个更好?
  4. 最后,在 ActiveMQ 常见问题解答中,我读到了这个 - “如果消费者收到一条消息并且在关闭之前没有确认它,那么该消息将被重新传递给另一个消费者。”。所以我的问题是,ActiveMQ 是否保证只有 1 个消费者会处理消息(因此对生产者只有 1 个答案)?消费者何时确认消息(在默认的自动确认设置中) - 接收消息并将其存储在会话中,还是 onMessage 处理程序完成时?而且,由于消费者的处理速度如此之慢,我是否应该更改一些“超时限制”,以便经纪人知道在将工作交给另一个消费者之前要等待多少时间(这与我之前的问题有关)?
0 投票
3 回答
4754 浏览

c# - Monitor.Wait 需要同步吗?

我开发了一个通用的生产者-消费者队列,它由 Monitor 以下列方式脉冲:

入队:

出队:

等待部分产生以下 SynchronizationLockException :“从未同步的代码块调用对象同步方法”我需要同步它吗?为什么 ?使用 ManualResetEvents 还是 .NET 4.0 的 Slim 版本更好?

0 投票
2 回答
1962 浏览

c# - 生产者消费者队列不释放

我已经建立了一个生产者消费者队列,该队列包装了一个.net 4.0的ConcurrentQueue,并在生产(Enqueue)和消费(基于while(true)线程之间发出了SlimManualResetEvent信号。队列看起来像:

}

当调用 Dispose 时,它​​有时会阻塞连接(一个线程消耗)并且 dispose 方法被卡住。我猜它卡在了 resetEvents 的等待上,但为此我在 dispose 上调用了 set。有什么建议么?