问题标签 [concurrent-queue]

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 投票
0 回答
195 浏览

multithreading - 字典c#中每个队列的线程

我有一个以自定义类对象为键的字典和一个类队列

这里是自定义clsEFTOPConnectionclsEFTOPS。如果它不在字典中,我会添加一个新队列。现在我想在每个队列上并行工作。我希望每个队列都被线程监视,并且每当执行入队操作时,特定线程应该在睡眠时唤醒并开始使项目出队。所以没有线程等于没有队列,每个线程都将充当其队列的观察者。我已经编写了下面的代码来实现它,但它没有按照我的需要运行

0 投票
1 回答
1257 浏览

c# - 什么时候需要 ConcurrentQueue?

我在问这个问题:在多线程套接字服务器上使用事件

我已经实现了一个ConcurrentQueue想法,它需要避免多线程问题。这样做时,我注意到与标准的唯一区别Queue在于Dequeue()方法,要求提供out参数。

这让我觉得唯一的保护是在线程中使对象出队,这是真的吗?

在我的游戏中,我有一个主线程来处理我的游戏逻辑,然后每个玩家都有另一个线程来执行侦听、序列化和发送数据的工作。

所以我ConcurrentQueue将被不同的线程入队和出队,但只有一个并且总是相同的线程会调用入队或出队。

所以我认为我可以接受一个简单的队列吗?

仅在从多个线程同时ConcurrentQueue调用时才需要?Dequeue()

0 投票
1 回答
371 浏览

multithreading - Split a ConcurrentLinkedQueue into half using Spliterator

I have a ConcurrentLinkedQueue and I want to split it into two halves and let two separate threads handle each. I have tried using Spliterator but I do not understand how to get the partitioned queues.

I want to but cannot do p1.getQueue() etc.

Please let me know the correct way to do it.

0 投票
1 回答
1130 浏览

multithreading - 什么是 Rust 等价于 Intel 的 tbb::concurrent_queue?

我正在寻找与Rust 中concurrent_queue英特尔的tbb模块等效的模块。我找到了一些板条箱:

  1. 多队列

  2. 两锁队列

  3. 横梁双端

乃至

  1. 期货池

  2. 线程池

我觉得他们都在做类似的事情,但是在他们的文档中,他们似乎使用不同的算法来实现。

虽然我不太了解 C++ 编程,但我很确定 tbb'sconcurrent_queue是一个非常快速的 MPMC 队列实现。Mutex如果仅将队列容器包装在 a 中(我的一位朋友对此进行了测试),则无法接近该性能。

由于效率(延迟和吞吐量)是我关心的主要问题,我应该在 Rust 中使用什么?队列可以是有界或无界的,我可能需要获取-发布排序。

0 投票
1 回答
106 浏览

ios - 为什么并发队列的奇怪行为?

我正在尝试了解 iOS GCD 的并发队列。我做了一些代码来测试它,但发现了一些奇怪的东西。代码如下:

执行结果如下:

我很困惑,无法理解为什么它会这样运行。

  1. 为什么直到第一个循环运行完全完成然后第二个和第三个循环才能开始运行,对我来说,第一个循环至少应该被第二个循环中断,因为第二个循环可以创建新的线程来执行。

  2. 为什么第三个循环比第二个循环更早开始?

  3. 为什么第三个循环不能作为第一个循环运行而不会被其他任务中断?

0 投票
0 回答
260 浏览

c# - 如何将数据从线程池输出到并发队列(C#)?

我为我的公司编写了一个应用程序,该应用程序基本上将记录从文本或 CSV 文件以 100 条记录的数组发送到 Web 服务,然后它返回响应,同样以 100 条记录的数组形式将它们写入另一个文件。目前,它是单线程的(使用 Windows Pro Forms 中的 Backgroundworker 顺序处理),但我希望使用线程池和并发队列对其进行多线程处理。

但是,当我检查顶部块中的“outputQueue”时,它是空的,即使 threadQueue 有记录排队。这是因为我是按值传递而不是按引用传递吗?如果是这样,我将如何使用 Threadpool.QueueUserWorkItem 在语法上做到这一点?

0 投票
1 回答
395 浏览

c# - 保持请求直到消息在 ConcurrentQueue 前面不起作用

我遇到了一个问题,我的 ConcurrentQueue 在单例中似乎没有以正确的顺序处理项目。我知道它是 FIFO,所以我想也许内存中的队列不一样,或者我的 Dequeue 出了什么问题?我测试的方法是快速向我的 API 端点发出 3 个邮递员请求。如果有人可以帮助我理解为什么这些没有相互运行,我将不胜感激!

截至目前,我倾向于使用 Queue.TryPeek 无法正常工作,因为第二个和第三个请求似乎在第一个请求出列之前排队。

因此,当我运行以下代码时,我会在控制台中看到以下输出。

这是我的 API 控制器方法,它正在获取一条消息并将该消息排队,一旦消息排队,它将等到它在前面看到该请求的消息,然后发送它,然后将其出列。

控制器

至于队列,我将它绑定到 IoC,如下所示:

这是我的队列类单例,我在这里使用单例,因为我希望在应用程序的整个生命周期中只有这个队列的 1 个实例。

0 投票
3 回答
2280 浏览

c# - 如何在一个线程中处理来自多个线程的数据(使用 ConcurrentQueue)?

我有来自多个线程的订单,我想在一个线程中处理这些数据。如果我理解正确,那么可以使用 ConcurrentQueue。

我看了 SO question How to work threading with ConcurrentQueue<T>,但它没有回答我的问题。

我编写了一个小型测试应用程序(使用 .NET Core 2.1),看看是否可以让它工作。

这就是它应该做的:为 100 个订单进行聚合。3 种不同的订单类型有 3 种聚合:Type1、Type2 和 Type3

输出应该是这样的:

我开始编写没有 ConcurrentQueue 的应用程序。正如预期的那样,_aggregates 中的结果是错误的。

所以我使用 ConcurrentQueue 重写了应用程序。结果现在是正确的,但我觉得我做错了,或者可以更有效地完成。

如您所见,我将 OrderResult 类型的对象添加到 ConcurrentQueue。我不需要使用 OrderResult 类。当然,我可以将订单添加到队列中,并在完成检索数据后遍历它们并计算总和。那是我应该做的吗?我只是想处理传入的订单,并立即计算不同类型的订单并将它们存储在我的“聚合集合”中。那可能吗?如果是,如何?

0 投票
2 回答
1496 浏览

parallel-processing - 具有并发工作者的 RxJS 并行队列?

假设我想下载 10,000 个文件。我可以轻松地为这 10,000 个文件构建一个队列(如果可以做得更好,我很乐意听取建议),

现在我有一个 Rx.JS 可观察数组,我从代表我的队列的 Promise 创建。现在对于我想要的行为,我想发出

  • 对服务器的三个并发请求
  • 完成请求后,我想触发一个新请求。

我可以为这个问题创建一个解决方案,但是鉴于我从未使用过的Rxjs queue之类的东西,我想知道最正确的 Rxjs 方法是什么。

0 投票
1 回答
137 浏览

c# - 偷看后从并发队列中删除元素的模式

我有一个生产者和多个消费者。我正在使用并发队列。我正在使用 C#,但我认为我的问题是语言不可知论。

可以有非唯一的消费者。即多个消费者可能对同一消息感兴趣。因此,非独特的消费者就像独一无二的工人。

也有独特的消费者,因为他们正在处理一个队列,他们假设消息中的顺序。

问题:

当消费者Guid-1-worker-1查看队列并为自己找到一条消息 M1 时,它会将其出列。但是,由于并发性,消息 M1 可能已被 worker 出列Guid-1-worker-2。此时,出队的消息Guid-1-worker-1是 for Guid-2Guid-2只有一名工作人员,因此,将消息放回队列无济于事,因为它破坏了消息的顺序。

我想要的是,如果我查看了一条消息,那么只有我应该能够将它出列。现在,我想我必须在lock这里使用。但简单List会起作用,而不是ConcurrentQueue同样有效。

是否有任何其他数据结构提供:Peek-Check-Dequeue一种并发语义?

有没有其他方法来模拟问题?