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

c# - 当我的队列有东西要处理时如何触发后台线程

我正在使用ConcurrentQueue来存储来自多个线程的消息。

如何创建一些后台线程,当我的队列中有东西时会自动触发?

0 投票
3 回答
11194 浏览

c# - 多线程并发队列

我是多线程概念的新手。我需要将一定数量的字符串添加到队列中并使用多个线程处理它们。使用ConcurrentQueue哪个是线程安全的。

这是我尝试过的。但是所有添加到并发队列中的项目都不会被处理。仅处理前 4 个项目。

0 投票
1 回答
686 浏览

c# - 当 ConcurrentQueue 有太多项目时工作线程阻塞

这是一个奇怪的问题,我有一个Thread[]工作线程,每个工作线程都处理 a 中的项目,ConcurrentQueue<string>直到队列为空,此时程序的其余部分继续。

这一直有效,直到大约 1500 个项目,此时所有线程都保持阻塞WaitSleepJoin状态,并且永远不会处理队列中的任何项目。

我试过单步执行我的代码,看起来线程仍然被创建,仍然启动并且处于活动状态,但立即被阻止并且永远不会运行它们的相关功能。

我完全糊涂了,所以任何帮助将不胜感激!

相关代码部分如下:

主线程段:

工人职能:

转换功能:

令人困惑的部分似乎是这一切是如何围绕队列中的项目数进行的,但似乎没有溢出。

更新:添加 mbox 表明它在process.Start()代码部分冻结,没有错误,并且不会超过该点。

更新2:如果UseShellExecute = false代码有效。至少可以说这是非常令人困惑的。

0 投票
2 回答
1513 浏览

multithreading - 从多个线程写入文件。

我有一个应用程序 A,它调用另一个应用程序 B,它进行一些计算并写入文件 File.txt A 通过多个线程调用 B 的多个实例,每个实例都尝试写入同一个文件 File.txt 实际问题来了:多个线程尝试访问同一个文件,文件访问抛出这是常见的。

我尝试了一种在单例类中使用并发队列的方法,并且 B 的每个实例都添加到队列中,并且此类中的另一个线程负责从队列中取出项目并写入文件 File.txt。队列被同步获取并且写入操作成功。这很好用。

如果队列中有太多线程和太多项目,则文件写入工作但如果由于某种原因我的队列崩溃或突然停止,则所有应该写入文件的信息都会丢失。

如果我在不使用队列的情况下从 B 同步写入文件,那么它会很慢,因为它需要检查文件锁定,但是在 B 立即写入文件之后,丢失数据的可能性较小。

有什么最好的方法或设计来处理这种情况?文件写入完成后我不需要响应。我不能让 B 等待文件写入完成。

异步等待文件写入在这里会有用吗?

0 投票
1 回答
1142 浏览

c# - 并发队列出队

我正在使用并发队列并通过创建动作委托通过多个线程从队列中取出数据

并调用这个动作委托并行多线程

当我SubscriptionResponseModel subsModel;在多个操作中使用时,我想知道一件事是线程安全的吗?

0 投票
0 回答
424 浏览

c# - 使用 BlockingCollection 进行高效的文件写入

我有一个生产者消费者场景。生产者为BlockingCollection生成数据,其他一些线程使用它。当消费者拿走一个项目时,它必须将它写入一个文本文件。生产者线程可以生成多少数据没有限制,因此我无法将收集标记为完整。实现消费者的最佳方法是什么?我的实现:

这样做的问题是,即使我的集合中没有任何内容,我也会保持 StreamWriter 处于打开状态。我可以将 StreamWriter 放在 ForEach 中,但是每次有新项目到达时我都必须打开和关闭它。如果我期望在某些情况下会有数千个项目会降低性能。

我读过这篇描述同样问题的帖子。人们建议使用ActionBlock,但它是 .NET 4.5 的功能,而我使用的是 .NET 4。

0 投票
2 回答
100 浏览

ios - 使用全局并发队列从两个不同线程更改数组时不会崩溃

在下面的代码中,我们有一个可变数组,它被两个并发队列改变。由于并发队列不是线程安全的,因此此代码在理想情况下应该会崩溃,但会在没有任何异常或崩溃的情况下执行。

请帮助我理解这种行为。任何帮助都感激不尽 :-)

0 投票
1 回答
436 浏览

c# - 循环遍历 ConcurrentQueue无限期地使用基于计时器/秒表的事件

在我的CheckQueue()方法中,我想做的是不断地从队列中读取(通过调用AppQ.Connect(Time))和其中的TryDequeue每个项目。经过一段时间(可能是一分钟左右)后,我想回到队列 - 再次连接,检查它是否有一些元素(AppQ.Count),读取它们(by TryDequeue())并无限期地执行此过程。

这是针对将成为 Windows 服务(目前是用于测试目的的 Windows 窗体应用程序)的应用程序,该服务将每天运行一整天,并在某些机器上运行的任何应用程序出现停机时提醒我们开发人员。我知道我将不得不使用 aWhile-Loop但我不确定是使用Timer基于事件还是Stopwatch与它一起使用。

更多上下文:我也有一种感觉,我应该考虑使用do-while循环而不是while查看,因为前者执行一些操作(通过调用加载消息AppQ.Connect(time))然后检查退出条件(if AppQ.Count <= 0),而 awhile则相反。

BlockingCollection<T>考虑到它是线程安全的,我应该使用它吗?

有什么建议么?

杂项:人们是否可以发表评论我可能出错的地方,而不是仅仅投反对票而不给出理由

0 投票
0 回答
87 浏览

vb.net - 如何退出并发队列

所以我写了这段代码,它检查我的 ConcurrentQueue 列表中的所有代理,但我想知道如果我只想检查 1 个代理是否工作然后退出呢?所以我尝试添加布尔运算符来测试代理工作列表中是否有超过 1 个代理,但它仍然继续检查所有代理。

这就是我目前正在使用的代码,当它运行 workingProxies.Add(proxy) 行时,我希望任务停止并运行一个函数。

0 投票
2 回答
2169 浏览

ios - Concurrent Queue Issue - iOS/Swift

In my program I need two tasks to run simultaneously in the background. To do that i have used concurrent queues as below,

Here I need the output like this,

0
9
1
8
2
7
3
6
4
5
5
4
6
3
7
2
8
1
9
0

But what I get is,

enter image description here

I referred below tutorial in order to have some basic knowledge about Concurrent Queues in Swift 3
https://www.appcoda.com/grand-central-dispatch/

Can someone tell me what is wrong with my code? or else is it the result I should get? Is there any other ways to get my thing done? Any help would be highly appreciated.