Tag: 队列

为什么在.NET中没有通用的同步队列?

我注意到你可以调用Queue.Synchronize来获得一个线程安全的队列对象,但是同样的方法在Queue <T>上是不可用的。 有谁知道为什么? 似乎有点怪异。

C ++ 11线程安全队列

我正在使用的一个项目使用多个线程来处理文件的集合。 每个线程都可以将文件添加到要处理的文件列表中,所以我放在一起(我以为是)一个线程安全的队列。 相关部分如下: // qMutex is a std::mutex intended to guard the queue // populatedNotifier is a std::condition_variable intended to // notify waiting threads of a new item in the queue void FileQueue::enqueue(std::string&& filename) { std::lock_guard<std::mutex> lock(qMutex); q.push(std::move(filename)); // Notify anyone waiting for additional files that more have arrived populatedNotifier.notify_one(); } std::string FileQueue::dequeue(const std::chrono::milliseconds& timeout) […]

如何在RabbitMQ中创build延迟队列?

使用Python,Pika和RabbitMQ创build延迟(或停放)队列的最简单方法是什么? 我已经看到类似的问题 ,但没有看到Python。 在devise应用程序时,我发现这是一个有用的想法,因为它允许我们限制需要重新排队的消息。 总是有可能收到比你能处理更多的消息,可能是HTTP服务器速度太慢,或者数据库处于太大的压力之下。 在发生丢失消息的容忍度为零的情况下出现问题时,我也发现它非常有用,而重新排队无法处理的消息可以解决这个问题。 它也可能会导致问题的地方,一遍又一遍的邮件。 可能导致性能问题,并logging垃圾邮件。

Python的通用优先级队列

我需要在我的Python代码中使用优先级队列。 寻找有效的东西,我来到heapq 。 它看起来不错,但似乎只对整数指定。 我想它适用于任何具有比较运算符的对象,但是它没有指定它需要的比较运算符。 另外, heapq好像是用Python实现的,所以不是很快。 你知道Python中的优先级队列的快速实现吗? 最好,我想队列是通用的(即对任何具有指定比较运算符的对象都适用)。 提前致谢 更新: 在heapq重新比较,我可以使用Charlie Martinbuild议的(priority, object) ,或者只是为我的对象实现__cmp__ 。 我仍然在寻找比heapq更快的东西。

队列<T> vs List <T>

我目前使用List<T>作为队列(使用lst[0]然后lst.removeAt(0) )来保存对象。 在给定的时间最多有20个项目。 我意识到有一个实际的Queue<T>类。 我想知道是否有任何好处(性能,内存等)使用Queue<T>超过List<T>行事像一个队列?

如何迭代一个priority_queue?

我可以通过迭代器(如vector )在c ++中遍历标准的priority_queue或标准queue吗? 我不想使用popup,因为它导致我的队列出列。 谢谢你的帮助

基于FIFO的队列实现?

我需要一个简单的FIFO实现队列来存储一堆整数(如果是generics实现,我不太介意)。 在java.util或Trove / Guava库java.util已经为我准备的东西了吗?

确保元素唯一性的队列?

我正在寻找java.util.Queue或Google集合中类似Queue的东西的实现,但也要确保队列中的每个元素都是唯一的。 (所有进一步插入将不起作用) 这是可能的,还是我必须手工做? 现在我正在使用一个队列,一个LinkedList实现,并且在插入之前检查唯一性。 (我使用一个侧面的Map做这个,在排队之前/之后添加/删除侧面的元素)。 我不喜欢它太多。 任何input是受欢迎的。 如果它不在java.util包中,那么这可能是一个坏主意?

rabbitmq中的连接池或通道之间是否存在性能差异?

如果这是明显的,我是一个Rabbitmq(和编程)的新手,所以提前抱歉。 我正在创build一个池,以便在队列上工作的线程之间共享,但我不确定是否应该在池中使用连接或通道。 我知道我需要通道去做实际的工作,但是每个连接有一个通道(从队列中获得更多的吞吐量)有什么性能好处? 还是我最好只使用一个连接,每个应用程序和池许多渠道? 注意:因为我正在汇集资源,所以初始成本并不是一个因素,因为我知道连接比渠道更昂贵。 我对吞吐量更感兴趣。

在C#中使用Queue.Synchronized或lock()来保证线程安全性会更好吗?

我有一个Queue对象,我需要确保是线程安全的。 使用这样的锁对象会更好: lock(myLockObject) { //do stuff with the queue } 还是推荐使用Queue.Synchronized是这样的: Queue.Synchronized(myQueue).whatever_i_want_to_do(); 从阅读MSDN文档它说,我应该使用Queue.Synchronized使其线程安全,但它然后给出了一个使用锁对象的例子。 从MSDN文章: 为了保证队列的线程安全,所有的操作只能通过这个包装来完成。 枚举枚举本质上不是一个线程安全的过程。 即使集合同步,其他线程仍然可以修改集合,这会导致枚举器抛出exception。 为了确保枚举过程中的线程安全性,可以在整个枚举过程中locking集合,或者捕获其他线程所做更改所导致的exception。 如果调用Synchronized()不能确保线程安全,那么它有什么意义呢? 我在这里错过了什么?