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

c# - 在线程中不断循环列表,因为它接收到新元素

我真的不知道如何解决这个问题,但我订阅了自定义类中触发的事件,理想情况下我希望将它们排队并在它们进来时先入先出处理它们。我知道Queue<T>并且我认为我应该用这个?但是我的问题是在收到我的消息时的事件处理程序中,我是否只是Enqueue()到那里的队列,如果是这样,那么当添加新项目时如何处理队列?

我正在考虑在构造函数中调用一个方法,该方法执行类似(抓住你的帽子):

当然必须有一个更优雅的方式来做到这一点?这应该有效地击中 myQueue 并进行迭代,因为它包含元素并做我想做的事。表现会如何?我可以在单独的线程上生成它以避免任何线程阻塞,我真的有时间接受while (true)

0 投票
1 回答
6448 浏览

java - Java PriorityQueue 去除任意元素的性能

假设我有一个 java PriorityQueue(java 实现为堆),我根据某些标准对其进行迭代以删除元素:

每个 remove() 操作需要多长时间?我不确定是 O(log(n)) 还是 O(1)。

0 投票
1 回答
1505 浏览

.net - 如何写入 MQMessage:多个写入调用或 StringBuilder?

我是 WebSphere MQ 的新手。我正在使用 IBM 的 .NET 类 (IBM.WMQ) 来放置请求消息,然后获取响应消息。MQMessage 对象有许多用于各种数据类型的 Writexxx 方法。我需要将各种不同的数据元素写入请求消息。我的问题是,我应该为每个单独的数据元素调用适当的 Write 方法,还是应该使用 StringBuilder 构建整个事物,然后调用一次 MQMessage WriteString 方法?

0 投票
8 回答
261 浏览

python - 脚本的惩罚在后台不断循环

我知道这个话题过去已经讨论过,但我对资源使用有点偏执。

我正在考虑编写一个用于排队作业的守护程序,以将文件归档为我正在开发的 Web 应用程序的 zip 文件。它的行为是这样的:

一个在后台不断循环的进程会消耗什么样的资源(假设没有要压缩的东西)?有什么我应该注意或小心的吗?

编辑:

看起来大多数答案都与睡眠时间有关。我一次盲目地将其设置为睡眠(在代码示例中)15 毫秒。我实际上打算将其设置为 15 秒,并且我已经“更新”了代码以反映这一点。

再次编辑:

脚本休眠的最低合理时间是多少?5秒低吗?我不知道这个应用程序的负载是多少,也不知道新作业多久会添加到队列中。

0 投票
2 回答
176 浏览

java - 限时服务

我正在开发一个向 Musicbrainz 网络服务发出请求的应用程序。我在 musicbrainz 手册中阅读到每秒向 Web 服务发出的请求不超过一个,否则客户端 IP 将被阻止。

您建议使用哪种架构来使此限制对服务客户端透明。

  • 我想调用一个方法(例如 getAlbuns),它应该只在最后一个请求后 1 秒发出请求。
  • 我还想一次调用 10 个请求,服务应该处理排队,在可用时返回结果(非阻塞)。

谢谢!

0 投票
2 回答
7595 浏览

sockets - 原始套接字接收缓冲区

我们目前正在测试基于 IP 的电信应用程序。我们打开一个原始套接字并从远程端接收消息(msgrate@750+msgs/秒,大小约为 180 字节,不包括 IP)。

在原始套接字之上有一个称为 SCTP(就像 TCP)的层,它时不时地指示它丢失了一些数据包。现在,我们在接收节点上运行 Wireshark,我们可以在 Wireshark 中看到该数据包。

在我看来,套接字的接收缓冲区很小,导致 IP(?) 丢弃消息。但是,IP Pegs(netstat -sv) 显示没有丢弃的数据包。我们尝试将套接字接收队列设置为 40000,但没有成功。

我将不胜感激任何关于我们应该配置 IP 层的选项(如果有的话)的指针,或者我们需要设置任何特定的套接字选项。

0 投票
5 回答
8650 浏览

spring - Spring 集成:将 Web 服务连接到 FIFO 队列

我仍在为 Spring 集成而苦苦挣扎——这是我的场景:

  1. Web 服务从客户端 A 获取请求
  2. Web 服务将请求放入队列
  3. 队列消费者处理消息 FIFO 并发送一个响应,该响应被路由回 Web 服务
  4. Web 服务将响应发送回客户端 A

将有多个 Web 服务都将消息提供到此队列中,我需要确保它们真正按照接收顺序进行处理。

我需要将哪些 Spring Integration 连接在一起?

0 投票
5 回答
8426 浏览

java - 我应该如何处理 Java 中的多线程?

我正在研究一个与 Java 相关的实际场景;一个套接字程序。现有系统和预期系统如下。

现有系统- 系统检查是否满足特定条件。如果是这样,它将创建一些要发送的消息并将其放入队列中。

队列处理器是一个单独的线程。它定期检查队列中是否存在项目。如果找到任何项目(消息),它只会将消息发送到远程主机(硬编码)并从队列中删除该项目。

预期系统- 这是类似的东西。当满足某个条件但在每种情况下收件人都不相同时,就会创建消息。所以有很多方法。

  1. 将消息放入同一个队列,但带有其接收者 ID。在这种情况下,第二个线程可以识别接收者,因此可以将消息发送到该接收者。

  2. 有多个线程。在这种情况下,当条件满足并且接收者处于“新”状态时,它会创建一个新队列并将消息放入该队列。并且一个新线程初始化以处理该队列。如果下一条消息被定向到同一个收件人,它应该放入同一个队列,如果不是一个新队列,则应该创建线程。

现在我想实现第二个,有点卡住了。我该怎么做?骨架就足够了,您无需担心如何创建队列等... :)

更新:我也认为方法 1 是最好的方法。我阅读了一些关于线程的文章并做出了这个决定。但也值得学习如何实现方法 2。

0 投票
8 回答
3018 浏览

c# - 假人的线程队列

我认为这是一个非常常见的线程场景:

  • 我有 100 个相同的工作要完成
  • 所有工作都是相互独立的
  • 我想一次最多处理 15 个作业
  • 随着每个作业的完成,将开始一个新作业,直到所有作业都完成

如果您假设每个作业在完成时都会触发一个事件(我正在使用 BackgroundWorker 类),我可以想出几种方法来解决这个问题,但我不确定“正确”的解决方案是什么。我希望你们中的一些大师能指出我正确的方向。

解决方案 1: 有一段时间(继续){ Threading.Sleep(1000); 在我的 Main( )函数中循环。Job_Completed 事件处理程序中的代码将设置 continue = false 当A)没有待排队的作业和B)所有排队的作业都已完成。我之前使用过这个解决方案,虽然它似乎工作正常......对我来说似乎有点“奇怪”。

解决方案 2: 在我的 Main() 函数中使用 Application.Run()。类似地,Job_Completed 事件处理程序中的代码将调用 Application.Exit() 当A)没有作业要排队和B)所有排队的作业都已完成。

解决方案 3: 使用 ThreadPool,将所有 500-1000 个请求排队,让它们一次运行 10 个(SetMaxThreads)并以某种方式等待它们全部完成。

在所有这些解决方案中,基本思想是每次完成另一个工作时都会启动一个新工作,直到没有工作为止。因此,问题不仅在于等待现有作业完成,还在于等待不再有任何待处理的作业开始。如果 ThreadPool 是正确的解决方案,那么在 ThreadPool 上等待完成所有排队项目的正确方法是什么?

我认为我在这里最重要的困惑是我不完全了解事件是如何从我的 Main() 函数中触发的。显然他们这样做了,我只是从 Windows 消息循环的角度不了解它的机制。解决这个问题的正确方法是什么,为什么?

0 投票
3 回答
353 浏览

data-structures - 构建高性能和自动备份的队列

请就我的问题给我一些提示。

我正在构建一个队列数据结构:

  1. 在硬盘上实时备份
  2. 并且可以恢复备份
  3. 可以响应大量的入队/出队请求

谢谢!