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

c# - ConcurrentQueue 操作给出 OutofMemory 错误。

我理解这个问题可能太笼统了。但是我尝试了很多东西,但我无法弄清楚如何解决这个问题。

我正在使用 ConcurrentQueue 进行多线程操作。一个线程正在从服务器下载图像并将其保存到队列中。这是代码:

另一个线程从队列中获取图像并将它们保存在目标文件夹中。这是代码:

我从 Button_Click() 调用这两个线程,如下所示:

每当队列达到 68 个计数时,我都会收到 MemoryFull 错误。我不确定如何避免这种情况。我尝试使用 Thread.Sleep 来避免这种情况。例如,我试过:循环Thread.Sleep(500)之后。foreach每当我在里面尝试它时,foreach它在任何给定点上都可以正常工作ImageQueue.Count = 1。我哪里错了?

0 投票
2 回答
643 浏览

c# - Using a Concurrent Queue to pass objects between two components of my applciation

I have a program of mine which makes use of the c# concurrent Queue to pass data from my one component to the other.

Component 1: Multiple network connections receive data and then put it into this Queue

Component 2: Reads data from this queue and then processes it.

Ok, good all makes sense ( I sure hope).

Now what I want to know, is what is the best / most efficient way to go about passing the data between the two components?

Option 1: Poll the queue for new data in component 2? Which will entail blocking code, or atleast a while(true)

Option 2: I don't know if this is possible, but that's why im here asking. Does the queue data structure not have a sort of functionality that say my component 2 can register to the queue to be notified of any inserts / changes? This way whenever data is added it can just go fetch it, and I can then avoid any blocking / polling code.

0 投票
3 回答
12667 浏览

c++ - 如何进行多线程队列处理

默认情况下, C++ 容器应该是线程安全的。我必须queue错误地使用多线程,因为对于此代码:

我越来越:

我在这里做错了什么?

编辑

显然我误读了上面的链接。是否有可用的线程安全队列实现来做我想做的事情?我知道这是一种常见的线程组织策略。

0 投票
2 回答
23937 浏览

c# - 将 TryDequeue 放在 while 循环中是否安全?

我以前没有使用过并发队列。

在while循环中使用如下TryDequeue可以吗?这不能永远卡住吗?

0 投票
1 回答
219 浏览

c# - 我应该以这种方式使用 ConcurrentQueue 还是使用单个线程

我正在做相当于美化邮件合并,然后将文件转换为 PDF... 基于 .Net 4.5 我看到了几种可以进行线程处理的方法。使用线程安全队列的那个似乎很有趣(计划 A),但我可以看到一个潜在的问题。你怎么看?我会尽量保持简短,但输入需要的内容。

这是在假设进行数据库处理比 PDF 转换花费更多时间的前提下工作的。

在这两种情况下,每个文件的数据库处理都在其自己的线程/任务中完成,但 PDF 转换可以在许多单线程/任务中完成(计划 B),也可以在单个长时间运行的线程中完成(计划 A) . 这是我想知道的PDF转换。这一切都在 try/catch 语句中,但该线程不得失败或全部失败(计划 A)。你认为这是个好主意吗?任何建议,将不胜感激。

计划 A 似乎是一个不错的解决方案,但如果任务以某种方式失败怎么办?是的,PDF 转换可以用单独的线程完成,但我想保留它们用于数据库处理。

这是在文本编辑器中编写的,是我能写的最简单的代码,所以可能有些东西,但我想我明白了。

0 投票
3 回答
2903 浏览

c# - 使用包含如果 T 是类或结构,则 ConcurrentQueue 中的方法

我非常理解 ConcurentQueue 集合。如果 T 是类或结构,如何在 ConcurrentQueue 中使用 Contains 方法?

我的代码:

如何正确使用并发队列中的包含方法?

0 投票
1 回答
1217 浏览

c# - 将 ConcurrentQueue 中的多行插入 SQL Server 表

我有一个 ac# 应用程序,它从一个数据库中获取数据,进行必要的转换,并将数据插入另一个数据库的表中。我通过将源数据插入队列然后处理队列以将数据插入目标表来做到这一点。我有两个单独的线程来读取源数据和写入目标数据。读取线程的运行速度比写入线程快得多,因此我的队列很快就会填满。

正如您在阅读线程中看到的那样,我正在使用 SqlCommand.ExecuteReader() 来读取数据。然后我遍历队列并为每一行执行单独的 INSERT 语句。我所设想的是,不是逐行插入,而是做某种(可能是 Linq 语句)。有谁知道如何更快地插入我的插件?

队列定义:

阅读:

写作:

0 投票
1 回答
1546 浏览

c# - Parallel.For 使用 ConcurrentQueue 的列表中的项目 - 这会工作吗?

我有一个List<TaskClass> TaskList项目,我们可以使用 Parallel 循环对其进行迭代。

列表中的项目按特定顺序排序,因为 TaskClass 使用自己的CompareTo(object obj)方法实现 IComparable。因此,我们需要按顺序执行的项目。

请注意,它们不必按顺序完成,只需按顺序开始即可。

因此 TaskList[0] 应该首先启动;然后是 TaskList[1], TaskList[2], ... 但是,我们不关心 TaskList[2] 是先完成还是 TaskList[0]。

这是我想出的快速代码来尝试缓解这种情况:

现在我认为的问题是当 Parallel.For 循环完成时,原始List<TaskClass> TaskList值不会更新为最新值。

实现这一目标的最佳方法是什么?

修改后的代码如下?(标有“//new”的行)

或者有没有人有任何其他想法/建议/改进?

谢谢!

0 投票
1 回答
1989 浏览

c# - 如何反复迭代并发队列?

我正在使用 Winforms 并以 .Net 4.5 为目标

我想迭代并发队列,只要它有项目。在我的应用程序中,用户可以随时在并发队列中添加和删除项目。

示例代码:

请记住,应用程序用户可以随时从队列中添加或删除项目,即使在 while 循环运行时也是如此。

0 投票
0 回答
1639 浏览

c++ - 自定义 Boost Asio IO 对象

我是提升 asio 的新手。我读过这个比较:libuv 与 Boost/ASIO 相比如何?(死链接)

事实证明,除了套接字编程之外,还有机会使用 asio 的事件循环。我打算使用这个异步事件循环来处理来自 UI 的消息。
到目前为止,我有一个并发队列,我想实现自己的 boost::asio IO 对象。目标是使用此对象,如您在此处看到的:

所以目的是通过一个能够异步调用函数(foo)的 IO 对象保持 io_service 忙碌,当队列(消息)有消息可以被弹出时。该队列有一个名为wait_and_pop的方法。它阻塞调用者线程,直到队列有东西要弹出,然后返回弹出的项目值。
我被困在这一点上,没有sockects,我在网上找不到任何boost asio教程。有一些类似的问题,但都使用套接字。知道如何实现我自己的 IO 对象吗?还是我错过了任何重要的障碍?非常感谢!