问题标签 [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.
c# - 在线程中不断循环列表,因为它接收到新元素
我真的不知道如何解决这个问题,但我订阅了自定义类中触发的事件,理想情况下我希望将它们排队并在它们进来时先入先出处理它们。我知道Queue<T>
并且我认为我应该用这个?但是我的问题是在收到我的消息时的事件处理程序中,我是否只是Enqueue()
到那里的队列,如果是这样,那么当添加新项目时如何处理队列?
我正在考虑在构造函数中调用一个方法,该方法执行类似(抓住你的帽子):
当然必须有一个更优雅的方式来做到这一点?这应该有效地击中 myQueue 并进行迭代,因为它包含元素并做我想做的事。表现会如何?我可以在单独的线程上生成它以避免任何线程阻塞,我真的有时间接受while (true)
!
java - Java PriorityQueue 去除任意元素的性能
假设我有一个 java PriorityQueue(java 实现为堆),我根据某些标准对其进行迭代以删除元素:
每个 remove() 操作需要多长时间?我不确定是 O(log(n)) 还是 O(1)。
.net - 如何写入 MQMessage:多个写入调用或 StringBuilder?
我是 WebSphere MQ 的新手。我正在使用 IBM 的 .NET 类 (IBM.WMQ) 来放置请求消息,然后获取响应消息。MQMessage 对象有许多用于各种数据类型的 Writexxx 方法。我需要将各种不同的数据元素写入请求消息。我的问题是,我应该为每个单独的数据元素调用适当的 Write 方法,还是应该使用 StringBuilder 构建整个事物,然后调用一次 MQMessage WriteString 方法?
java - 限时服务
我正在开发一个向 Musicbrainz 网络服务发出请求的应用程序。我在 musicbrainz 手册中阅读到每秒向 Web 服务发出的请求不超过一个,否则客户端 IP 将被阻止。
您建议使用哪种架构来使此限制对服务客户端透明。
- 我想调用一个方法(例如 getAlbuns),它应该只在最后一个请求后 1 秒发出请求。
- 我还想一次调用 10 个请求,服务应该处理排队,在可用时返回结果(非阻塞)。
谢谢!
sockets - 原始套接字接收缓冲区
我们目前正在测试基于 IP 的电信应用程序。我们打开一个原始套接字并从远程端接收消息(msgrate@750+msgs/秒,大小约为 180 字节,不包括 IP)。
在原始套接字之上有一个称为 SCTP(就像 TCP)的层,它时不时地指示它丢失了一些数据包。现在,我们在接收节点上运行 Wireshark,我们可以在 Wireshark 中看到该数据包。
在我看来,套接字的接收缓冲区很小,导致 IP(?) 丢弃消息。但是,IP Pegs(netstat -sv) 显示没有丢弃的数据包。我们尝试将套接字接收队列设置为 40000,但没有成功。
我将不胜感激任何关于我们应该配置 IP 层的选项(如果有的话)的指针,或者我们需要设置任何特定的套接字选项。
spring - Spring 集成:将 Web 服务连接到 FIFO 队列
我仍在为 Spring 集成而苦苦挣扎——这是我的场景:
- Web 服务从客户端 A 获取请求
- Web 服务将请求放入队列
- 队列消费者处理消息 FIFO 并发送一个响应,该响应被路由回 Web 服务
- Web 服务将响应发送回客户端 A
将有多个 Web 服务都将消息提供到此队列中,我需要确保它们真正按照接收顺序进行处理。
我需要将哪些 Spring Integration 连接在一起?
java - 我应该如何处理 Java 中的多线程?
我正在研究一个与 Java 相关的实际场景;一个套接字程序。现有系统和预期系统如下。
现有系统- 系统检查是否满足特定条件。如果是这样,它将创建一些要发送的消息并将其放入队列中。
队列处理器是一个单独的线程。它定期检查队列中是否存在项目。如果找到任何项目(消息),它只会将消息发送到远程主机(硬编码)并从队列中删除该项目。
预期系统- 这是类似的东西。当满足某个条件但在每种情况下收件人都不相同时,就会创建消息。所以有很多方法。
将消息放入同一个队列,但带有其接收者 ID。在这种情况下,第二个线程可以识别接收者,因此可以将消息发送到该接收者。
有多个线程。在这种情况下,当条件满足并且接收者处于“新”状态时,它会创建一个新队列并将消息放入该队列。并且一个新线程初始化以处理该队列。如果下一条消息被定向到同一个收件人,它应该放入同一个队列,如果不是一个新队列,则应该创建线程。
现在我想实现第二个,有点卡住了。我该怎么做?骨架就足够了,您无需担心如何创建队列等... :)
更新:我也认为方法 1 是最好的方法。我阅读了一些关于线程的文章并做出了这个决定。但也值得学习如何实现方法 2。
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 消息循环的角度不了解它的机制。解决这个问题的正确方法是什么,为什么?
data-structures - 构建高性能和自动备份的队列
请就我的问题给我一些提示。
我正在构建一个队列数据结构:
- 在硬盘上实时备份
- 并且可以恢复备份
- 可以响应大量的入队/出队请求
谢谢!