问题标签 [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.
java - 您应该在哪里使用 BlockingQueue 实现而不是简单队列实现?
我想我应该从
您应该在哪里使用 BlockingQueue 实现而不是简单队列实现?
到
考虑到速度、并发性或其他属性(例如访问最后一个元素的时间)等方面,BlockingQueue 相对于队列实现的优点/缺点是什么。
我用过这两种队列。我知道阻塞队列通常用于并发应用程序。我正在编写简单的 ByteBuffer 池,我需要一些 ByteBuffer 对象的占位符。我需要最快的、线程安全的队列实现。甚至还有像 ArrayList 这样的 List 实现,它对元素具有恒定的访问时间。
任何人都可以讨论 BlockingQueue vs Queue vs List 实现的优缺点吗?
目前我已经使用 ArrayList 来保存这些 ByteBuffer 对象。
我应该使用哪种数据结构来保存这些对象?
shell - 如何从文件中删除第一行的列表中运行第一个进程,就好像该文件是一个队列并且我称之为“pop”?
如何从存储在文件中的进程列表中运行第一个进程并立即删除第一行,就好像该文件是一个队列并且我称之为“pop”?
我想以类似弹出的方式调用简单文本文件中列出的第一个命令,其中 \n 作为分隔符:
图1:
图 2:
通过以下方式弹出第一个命令popcmd
:
图 3:
linux - Linux 内核中的队列
我一直在寻找有关队列的通用内核实现的信息,即先进先出数据结构。我认为可能有一个,因为它可能是常用的东西,并且有一个链接列表的标准(以 list_head 结构的形式)。是否有一些我找不到的标准队列实现,或者只是使用链表作为队列并希望最好的做法可能是常见的做法?
queue - 消息、队列和 ESB - 我知道我想去哪里,但不知道如何到达那里
长话短说,我正在开展一个项目,出于所有常见原因,我们正在重写一个大型 Web 应用程序。重写的主要目的是将运行在单个服务器上的大型单个应用程序分成许多较小的解耦应用程序,这些应用程序可以在许多服务器上运行。
好的,这就是我想要的:
我想HTTP
成为主要的传输机制。当一个应用程序(例如 CMS)已更新时,它将通过 http 联系代理并说"I've changed"
,然后代理将发回一个200 OK
说"thanks I got the message"
。
然后,代理将查看其想要了解 CMS 更改的其他应用程序列表,并将消息传递到应用程序在告诉代理它想听到消息时留下的 url。
其他应用程序将200 OK
在收到消息时返回,如果没有,代理会保留该消息并将其排队等待下次有人尝试联系该应用程序。
问题是我什至不知道从哪里开始或者我需要什么来实现它。我一直在看XMPP、ActiveMQ、等RabbitMQ,Mule ESB并且可以看到我可以在接下来的一年里用这些东西绕圈子。
任何人都可以从个人经验中提供任何建议,因为我很想避免以艰难的方式学习课程。
php - PHP calling multiple videos to convert at once via mencoder.How can I limit it?
I recently installed my video script to a new server but I am seeing that it will start to convert 1 video (via mencoder) then before finishing it, it will try and convery another, and another, so it will be trying to convert 4+ videos at the same time causing the server to shut down. The script developer said:
"It converts each video in a PHP background process. There might be a way to limit the number of PHP background processes on your server and queue them."
So how is this done please?
Regards
python - Python 的通用优先级队列
我需要在我的 Python 代码中使用优先级队列,并且:
- 我正在寻找优先级队列的任何快速实现
- 最佳情况下,我希望队列是通用的(即适用于具有指定比较运算符的任何对象)。
环顾四周寻找有效的东西,我遇到了heapq,但是:
- 我正在寻找比 更快的东西
heapq
,它是在本机 Python 中实现的,所以它并不快。 - 它看起来不错,但似乎只为整数指定。我想它适用于任何具有比较运算符的对象,但它没有指定它需要什么比较运算符。
- 更新:重新比较
heapq
,我可以(priority, object)
按照查理马丁的建议使用 a ,或者只是__cmp__
为我的对象实现。
java - java.util.ConcurrentLinkedQueue
我想使用 java.util.ConcurrentLinkedQueue 作为 Servlet 的非持久队列。这是该类的 javadoc 中的简介。
基于链接节点的无界线程安全队列。当许多线程将共享对公共集合的访问时,ConcurrentLinkedQueue 是一个合适的选择。此队列不允许空元素。
现在想象一下,我在 servlet 上有 1000 个并发请求,每个线程都需要将一个对象加入到 ConcurrentLinkedQueue 中。从描述中,我是否应该得出结论认为处理负载不会有问题?我需要的保证是:
- 我无需自己进行同步即可自动获得线程安全保证。
- 如果流量负载超过 1000 个并发请求,我不会丢失任何请求。
谢谢
linux - 如何在linux中找到处理器队列长度
尝试确定 linux 机器上的处理器队列长度(准备运行但当前未运行的进程数)。Windows 中有一个针对此指标的 WMI 调用,但对 linux 了解不多,我正在尝试挖掘 /proc 和“top”以获取信息。有没有办法确定cpu的队列长度?
编辑添加:微软关于他们的指标的话:“一个或多个准备好但由于当前正在运行的另一个活动线程而无法在处理器上运行的线程的集合称为处理器队列。”
http - 使用异步队列连接 http 请求/响应模型
将同步 http 请求/响应模型与基于异步队列的模型连接起来的好方法是什么?
当用户的 HTTP 请求到来时,它会生成一个进入队列的工作请求(在本例中为beanstalkd)。其中一名工作人员接听请求,完成工作并准备响应。
队列模型不是请求/响应——只有请求,没有响应。所以问题是,我们如何最好地将响应返回到 HTTP 世界并返回给用户?
想法:
Beanstalkd 支持轻量级主题或队列(他们称之为管)。我们可以为每个请求创建一个管道,让工作人员在该管道上创建一条消息,并让 http 进程在管道上等待响应。不要特别喜欢这个,因为它有 apache 进程坐在那里占用内存。
让 http 客户端轮询响应。用户的初始 HTTP 请求启动队列中的作业并立即返回。客户端(用户的浏览器)定期轮询响应。在后端,worker 将其响应放入 memcached,我们将 nginx 连接到 memcached,因此轮询是轻量级的。
使用彗星。类似于第二个选项,但使用更高级的 http 通信来避免轮询。
我倾向于 2,因为它很容易而且众所周知(我还没有使用过彗星)。我猜可能还有一个我没有想到的更好的明显模型。你怎么看?
data-structures - 允许有效优先级更新的优先级队列?
更新:这是我对 Hashed Timing Wheels 的实现。如果您有提高性能和并发性的想法,请告诉我。(2009 年 1 月 20 日)
更新:我通过使用Hierarchical 和 Hashed Timing Wheels解决了这个问题。(2009 年 1 月 19 日)
我正在尝试在 Java 中实现一个特殊用途的计时器,该计时器针对超时处理进行了优化。例如,用户可以注册一个带有截止期限的任务,并且计时器可以在截止期限结束时通知用户的回调方法。在大多数情况下,注册的任务会在很短的时间内完成,因此大多数任务将被取消(例如 task.cancel())或重新安排到未来(例如 task.rescheduleToLater(1, TimeUnit.SECOND)) .
我想使用这个计时器来检测空闲的套接字连接(例如,在 10 秒内没有收到消息时关闭连接)和写入超时(例如,当写入操作在 30 秒内未完成时引发异常。)在大多数情况下,不会发生超时,客户端将发送一条消息并发送响应,除非存在奇怪的网络问题..
我不能使用 java.util.Timer 或 java.util.concurrent.ScheduledThreadPoolExecutor 因为他们认为大多数任务都应该超时。如果一个任务被取消,被取消的任务被存储在它的内部堆中,直到 ScheduledThreadPoolExecutor.purge() 被调用,这是一个非常昂贵的操作。(O(NlogN)也许?)
在我在 CS 课程中学到的传统堆或优先级队列中,在许多情况下更新元素的优先级是一项昂贵的操作 (O(logN),因为它只能通过删除元素并重新插入它来实现新的优先级值。像斐波那契堆这样的堆有 O(1) 时间的 reductionKey() 和 min() 操作,但我至少需要快速 increaseKey() 和 min()(或 reductionKey() 和 max()) .
您是否知道针对此特定用例高度优化的任何数据结构?我正在考虑的一种策略是将所有任务存储在哈希表中并每秒左右迭代所有任务,但这并不是那么漂亮。