问题标签 [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.
model - 建模消息队列
我有这个系统,它由许多不同的阶段组成。具体来说,我有很多不同的进程通过 tcp-ip 进行通信;消息通过面向数据包的协议进行交换(如果满足某些条件,可以将更多消息填充到单个有线协议数据单元中);我也控制了流队列——套接字是非阻塞的,如果我无法发送我的队列消息,甚至将它们合并到发送队列中;当然,运行时发生的事情取决于下面的 tcp ip 控制流,所以我也想对 tcp ip 队列进行建模。所以问题是 - 任何人都可以分享他们对如何为我的系统进行模拟的想法吗?我想为它制作一个模拟器 - 即:一个为我的模型中的每个队列提供队列数据结构的程序,对于每次滴答,我都会根据我对系统的理解使模型演变,即如果我的模型中 tcp 缓冲区的数据结构说它有足够的空间,我会减少输出队列中的消息编号并减少可用空间计数器tcp 缓冲区模型由消息的大小等等 - 然后我根据 tcp 链路的带宽以一定的速率使 tcp 缓冲区为空(当然我假设我正在抽取大量数据和tcp 链路的唯一参数是带宽)。构建这样的东西似乎需要付出很多努力,我不确定它是否是我需要的。也许我最好使用某种 excel 电子表格模型,但我不确定如何构建它。如果我的模型中的 tcp 缓冲区的数据结构表明它有足够的空间,我会减少输出队列中的消息编号,并将 tcp 缓冲区模型中的可用空间计数器减少消息的大小,等等 - 然后我做tcp 缓冲区以基于 tcp 链路带宽的速率清空(当然,我假设我正在抽取大量数据并且 tcp 链路的唯一参数是带宽)。构建这样的东西似乎需要付出很多努力,我不确定它是否是我需要的。也许我最好使用某种 excel 电子表格模型,但我不确定如何构建它。如果我的模型中的 tcp 缓冲区的数据结构表明它有足够的空间,我会减少输出队列中的消息编号,并将 tcp 缓冲区模型中的可用空间计数器减少消息的大小,等等 - 然后我做tcp 缓冲区以基于 tcp 链路带宽的速率清空(当然,我假设我正在抽取大量数据并且 tcp 链路的唯一参数是带宽)。构建这样的东西似乎需要付出很多努力,我不确定它是否是我需要的。也许我最好使用某种 excel 电子表格模型,但我不确定如何构建它。依此类推 - 然后我根据 tcp 链路的带宽以一定的速率使 tcp 缓冲区清空(当然,我假设我正在抽取大量数据并且 tcp 链路的唯一参数是带宽)。构建这样的东西似乎需要付出很多努力,我不确定它是否是我需要的。也许我最好使用某种 excel 电子表格模型,但我不确定如何构建它。依此类推 - 然后我根据 tcp 链路的带宽以一定的速率使 tcp 缓冲区清空(当然,我假设我正在抽取大量数据并且 tcp 链路的唯一参数是带宽)。构建这样的东西似乎需要付出很多努力,我不确定它是否是我需要的。也许我最好使用某种 excel 电子表格模型,但我不确定如何构建它。
c# - 在枚举队列时插入队列
我想使用队列对树进行广度优先搜索
但是我得到一个“枚举器被实例化后集合被修改”。例外。
有没有我可以使用的 C# 类型?
编辑:一点阅读让我觉得我可能做错了。
有没有办法使用 foreach 从队列中出列?
这可行但很丑(OMHO)
java - 可交换的工作队列
这有一个名字,但我不知道它是什么,所以很难用谷歌搜索。
我正在寻找的是java并发实用程序中的东西,它是一对队列,生产者使用的“待处理”队列和消费者使用的“处理”队列,消费者可以在其中原子交换队列. 如果以这种方式使用(1 个生产者线程,1 个消费者线程),则各个队列不需要是线程安全的,只需对它们的引用。
我知道我以前在某个地方见过这个,我可能可以自己拼凑出这样的东西,但如果它已经存在,我宁愿使用它。
编辑:我想我正在寻找的原语是一对可以原子交换的原子引用。(&我可以自己添加队列。)
编辑 2: @Alex Miller 回答了我在想但想不起来的问题。然而,这并不能解决我的问题,因为它是一个线程障碍,我希望生产者不必阻塞。
@sfossin 关于交换对队列的引用的观点很好;我想要的是消费者开始从队列中检索和处理项目的那一刻,所有这些队列项目都必须是完整的,并且生产者之后不能添加任何项目;生产者现在必须将项目添加到另一个队列。所以配对/交换的原子引用集将不起作用。
(这有点像如果有两辆校车,其中一辆总是在等乘客,另一辆总是在其他地方送他们。一旦司机离开,就是这样,你必须上另一辆公共汽车。有参考可以让即使总线已经离开,生产者也可以访问总线,这是不允许的。)
我想我会做的是使用单个ConcurrentLinkedQueue并具有消费者添加到队列中的哨兵值。这允许有多个生产者,而不仅仅是 1 个。为了让消费者处理队列中的批量项目,消费者等待队列中至少有 1 个项目,然后在队列的末尾插入哨兵队列,并删除项目,直到哨兵被删除。然后消费者在批次之间做它必须做的任何事情。这就是我想要的行为。
它不一定需要是一种有保证的非阻塞方法(锁定或synchronized
方法是选项),但如果有一种简单的方法来构建它,那么这在我的应用程序中是首选。
multithreading - 如何在两个线程中使用队列——一个用于消费者,一个用于生产者
我正在使用一个应用程序,其中较低级别的应用程序在接收数据时总是调用回调 RecData(char *buf)。
在回调中,我创建了两个线程并将消费者和生产者函数分别传递给这些创建的线程。
我的代码:
无效的 RecData (char * buf) {
}
当我一次收到一个数据时,上述方法有效。如果我几乎同时收到 5 个数据,那么 producer_queue 应该首先将所有数据放入队列,然后 consumer_queue 应该开始检索数据,但是一旦 producer_queue 将第一个数据放入队列,consumer_queue 就会检索它。
java - JMS 替代方案?用于将发送电子邮件与 http reqs 分离的东西
我们有一个 Web 应用程序,它可以做各种事情,有时会根据给定的操作向用户发送电子邮件。我想将 http 请求线程与实际发送电子邮件分离,以防 SMTP 服务器或积压出现问题。过去,我为此使用过 JMS,并且对此没有任何问题。然而,目前我们正在做 JMS 的 web 应用程序现在感觉有点过头了(在设置等方面),我想知道还有什么其他的选择。理想情况下,我只是喜欢可以在进程中运行的东西(JVM/Tomcat),但是当卸载 servlet 上下文时,队列中的任何待处理项目都将被交换到磁盘/数据库。我当然可以一起编写涉及内存 Q 的代码,但我希望获得开源项目的好处,所以想知道那里有什么。
如果 JMS 真的是任何人都知道的可以满足我们简单要求的答案的话。谢谢
php - php中有哪些好的分布式队列管理器?
我正在一个图像处理网站上工作,而不是让冗长的工作阻止用户浏览器,我希望所有命令都能快速返回一个工作 ID,并让后台任务完成实际工作。然后可以使用 id 来检查状态和结果(即处理图像的 url)。我找到了很多用于 ruby、java 和 python 的分布式队列管理器,但我对这些语言的了解还不够多,无法使用它们。
我自己的测试是使用共享 mysql 数据库对作业进行排队,将它们锁定到工作人员,并将它们标记为已完成(将返回数据保存在数据库中)。这只是一个凌乱的原型,整个过程我都觉得自己好像在重新发明轮子(而且不是很优雅)。php 中是否存在我可以使用的东西(或者我可以与 RESTfully 交谈?)?
阅读更多,我发现我正在寻找的是一个具有 php api 的排队系统,它不必用 php.ini 编写。我只找到了与 Amazon 的 SQS 一起使用的类,但这不仅不是免费的,而且有时还很隐蔽(超过一分钟才能显示一条消息)。
java - 可以有多个 AWT 事件队列吗?
我有一个在 Opera 9.64 Build 10487 的 JVM 1.6.0_12 上运行的小程序的线程转储 - 它显示了三个事件队列!据我所知,Java Swing 事件处理是单线程的——这在最近的更新中是否发生了变化?
我的问题是,多个事件队列往往会导致死锁,因为我有更多的锁,而不仅仅是 GUI TreeLock。
javascript - Jquery排队动画
我有几个动画要在 dom 中的不同对象上执行。
我希望它们按顺序发生。
我不想这样做:
我想将我所有的动画(和 CPU 密集型功能)添加到某种队列对象中,以确保它们按顺序执行。
c# - 合并队列
有没有在 dotnet.xml 中合并队列的好例子。我每秒有数千条消息来自另一个系统,我想看看这是否是最佳解决方案并查看一些实现示例
ajax - 如何在 Web 应用程序中对用户进行排队?
我有一个通过 9 针串行连接与本地 UI 控制的机器人,我想通过网页控制它,但任何时候都应该只有一个用户能够与之交互。我仍在考虑如何在 Web 服务器和本地 PC 之间使用 WCF 通信,以后可能会问这个问题。现在,我正准备让 Web 服务器和前端对想要控制机器人的用户进行排队,先到先得。
到目前为止,我唯一想到的就是按照用户请求控制机器人的顺序存储用户会话,然后使用 AJAX 让每个人知道何时轮到他们。我想向用户显示他们在队列中的位置,并在其他人完成时将用户在队列中移动,放弃他们的会话或在轮到他们时超时。
这似乎是正确的想法吗?您是否已经这样做了并且有一个有效的好方法?我愿意听听它是如何在任何平台上完成的,只要这些概念也适用于使用 ASP.NET 完成它。