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

sql - 制定查询优先级队列表的 SQL

我正在实现一个小队列来处理哪个进程首先运行。我正在使用数据库中的表来执行此操作。这是表的结构(我在 SQLite 中模拟它):

我正在尝试编写 SQL 来给我接下来可以运行哪个进程的行。以下是一些示例数据:

如果我使用这个 SQL,我可以按正确的顺序获取数据:

这将为我提供顶部具有最低优先级编号(最重要)的项目,并且在这些优先级编号中,最早进入队列(按时间戳)在顶部。

我可以运行此查询,并且只获取第一行,但我宁愿使用 SQL 查询来执行此操作,该查询将为我提供位于队列顶部的进程的一行(在上面的示例数据中,行id=7)。

我尝试进行自我连接和子查询,但我一定有心理障碍——我似乎无法正确处理。

提前致谢!

编辑

我忘了提到我正在寻找一个独立于数据库的查询。我在 SQlite 中对此进行了模拟,但很有可能我会在 DB2 或 Oracle 中实现它。我曾想过在我的查询中使用“limit 1”类型的运算符,但这在不同的数据库引擎之间是不同的。

0 投票
3 回答
1052 浏览

vb.net - VB.NET 队列构造函数错误:队列增长因子必须在 1 到 10 之间

首先是一些背景:访问 MS-SQL 后端的 VB.NET 2005 应用程序,使用多个 Web 服务进行数据收集/发布。

关于错误:我们的应用程序在我们的一台客户计算机上神秘地崩溃了,它在他们办公室的其他计算机上运行良好,但在大辉格党的计算机上却不行,这现在成了我的问题。这似乎是某种软件冲突,因为他们已经更换了计算机(我假设的软件配置相同),但错误仍然存​​在。我目前正在等待他们的 IT 人员的回复,说明该用户的设置与该办公室的其他用户之间是否存在任何已知差异。

更烦人的是应用程序就消失了。我们无法轻松调试它,因为没有显示错误消息,即使我们有特定的代码来捕获未处理的异常并显示消息,它也会关闭。

但是,我们的异常处理代码调用(至少部分),因为它成功记录了以下错误(只是不像其他正常错误那样向用户显示):

现在真正奇怪的是,我们在此时应该运行的代码中根本没有使用队列。(用户打开应用程序,尝试登录,bam,错误发生)代码中任何地方引用的唯一队列是在一个非常特定的函数中,该函数只在内部测试模式下运行。它在那里没有任何问题。

我不知道在哪里处理这个问题,所以任何输入都将不胜感激。

编辑:好的,我终于与他们的 IT 部门取得了联系,正如我所怀疑的那样,他正在运行 .NET 2.0。我让 IT 人员从“添加/删除程序”修复了 .NET 安装,之后问题不再存在。所以这实际上是一个 .NET 问题

0 投票
2 回答
1240 浏览

c# - 为什么在 C# 中队列会扰乱其元素中的数据?

我对队列的功能完全感到困惑。我正在尝试(并且失败)编写一个小型多线程应用程序来收集和显示 C# 中的数据。
在阅读了Albahari 的书并使用他描述的消费者/生产者模式之后,我得到了大部分工作,除了我的数据似乎在队列中被打乱了。在排队之前,我的对象中的字段具有以下值

时间戳 = 6
数据[] ={4936, 9845, 24125, 44861}

出队后的数据看起来像

时间戳 = 6
数据 [] = {64791、19466、47772、65405}

我不明白为什么数据字段中的值在出队后被更改?我很困惑,所以我想我会把它扔在那里,看看是否有人能指出我正确的方向来解决这个问题,或者让我指向不同的方向继续前进。


相关代码


用于数据存储的自定义对象

相关对象和字段。sensorData 类是一个单独的类,用于存储我的计算。

以下字段用于设置入队和出队线程之间的队列和信号。

入队方法/线程

这是我的工作线程,它计算四个正弦曲线并将结果排队等待处理。我还将结果写入一个文件,这样我就知道它计算了什么。

输出文件QueuedDataTest.txt中的示例行

6、4936、9845、24125、44861、

出队数据方法

此方法从队列中取出元素并将它们写入文件。直到在队列中找到一个空元素,此时作业完成。

数据出列并写入DequeueDataTest.txt后的输出结果

6、64791、19466、47772、65405、


更新1:

当前代码中锁的位置。


我已经编辑了代码以锁定将数据写入文件。所以我有锁的代码块如下。

CalculateAndEnqueueData()方法中,我有

dequeueDataMethod()我有两个带锁的区域第一个在这里

我假设为if块中的代码锁定了储物柜。第二个是我在这里写入文件的地方

这就是他们的全部。


0 投票
7 回答
14650 浏览

c - 在 C 中创建一个 FIFO 队列

是否可以在不使用 2 个堆栈的情况下在 C 中创建一个 FIFO“堆栈”?

谢谢!

(对不起那些回答前一个问题的人。我在想 LIFO,意思是 FIFO。)

0 投票
2 回答
10201 浏览

jquery - 跨多个元素的 jQuery 动画队列

这个问题类似于关于动画队列的问题,但该线程中的答案非常具体,不容易概括。

在我的 Web 应用程序中,通过输出 a 向用户报告消息(信息框、错误和警告等)divclass="alert"例如:

页面上可能有任意数量的警报,具体取决于用户的操作。

我想要的是使用 jQuery 动画顺序显示每个警报框:一旦一个动画结束,下一个动画就会开始。

另一个问题的答案说使用回调,例如:

除非要制作动画的 div 数量未知,否则这将不起作用。任何人都知道实现这一目标的方法吗?

0 投票
4 回答
10137 浏览

java - 在 Java 中连续处理异步队列的最佳方法是什么?

我很难弄清楚如何构建我系统的最后一部分。目前我正在运行一个 Tomcat 服务器,它有一个响应客户端请求的 servlet。每个请求依次将处理消息添加到异步队列(我可能会通过 Spring 或更可能使用 Amazon SQS 使用 JMS)。

事件的顺序是这样的:

发送方:
1. 接受客户端请求
2. 将一些数据添加到与此请求相关的具有唯一 ID 的 DB 中
3. 将表示此请求的消息对象添加到消息队列

接收方:
1. 从队列中拉出一个新的消息对象
2. 打开对象并根据 msg 对象中包含的信息从网站中获取一些信息。
3. 发送电子邮件警报
4. 使用已为此请求完成操作的信息更新我的数据库行(相同的唯一 ID)。

我很难弄清楚如何正确处理接收方。一方面,我可能可以创建一个简单的 java 程序,我从命令行启动该程序,该程序选择队列中的每个项目并对其进行处理。那安全吗?让该程序作为 Tomcat 容器内的另一个线程运行是否更有意义?我不想连续执行此操作,这意味着接收端应该能够一次处理多个对象——使用多个线程。我希望它每天 24 小时一直在运行。

构建接收端有哪些选择?

0 投票
10 回答
8907 浏览

c# - 没有依赖项的 C# 队列或 ServiceBus?

是否有可以实现零依赖部署的产品(理想情况下是开源的,但不是必需的)?我能够找到的每个服务总线或队列库都依赖于其中一个队列应用程序(如 msmq)或数据库。我想要一个非常轻量级的解决方案,我可以添加对我的应用程序的引用,构建它,并使用尽可能少的配置进行部署。

在理想情况下,队列/服务总线将在 IIS 上运行,并允许 Web 和富客户端与其通信。

这样的工具将非常适合在本地开发机器上对大型分布式系统进行快速原型设计。

0 投票
4 回答
2083 浏览

c# - 通过随机数生成确保均匀(ish)分布

我有一个对象列表,我想以随机顺序连续访问这些对象。

我想知道是否有办法确保随机值并不总是相似。

例子。

我的列表是一个队列列表,我试图将这些值交错以产生一个用于测试的真实场景。

我并不特别希望队列 1 和 2 中的所有项目都排在任何其他项目之前。有没有保证的方法来做到这一点?

谢谢

编辑 :: 我拥有的队列列表基本上是我正在传输到网络服务的文件列表。文件需要按特定顺序排列,因此需要队列。

所以我有 Queue1 = "set1_1.xml", set1_2.xml", ... "set1_n.xml" Queue2 ... ... QueueN

虽然每个文件都需要根据其队列中的其他文件按顺序传输,但我想模拟一个真实世界的模拟,其中文件将在不同时间从不同来源接收,因此它们交错。

目前我只是在 0 到(队列数)上使用一个简单的 rand 来确定下一个要出列的文件。这行得通,但我在问是否有可能获得更多的统一性,而不是从队列 1 和 2 中获得 50 个文件,然后从队列 3 中获得 5 个文件。

我确实意识到改变随机性不再使其随机化。

感谢您的所有回答。

0 投票
4 回答
3303 浏览

queue - 排队系统 - 启动多个工人的好方法是什么?

  • 您如何为面向队列的系统设置一个或多个工作脚本?
  • 您如何根据需要安排启动 - 并在必要时重新启动 - 工作脚本?(我正在考虑诸如 init.d/、基于 Ruby 的“上帝”、DJB 的 Daemontools 等工具)

我正在开发一个异步队列/工作系统,在这种情况下使用 PHP 和BeanstalkdD(尽管实际的语言和守护进程并不重要)。任务本身并不太难——将带有命令和参数的数组编码为 JSON,以便通过 Beanstalkd 守护程序进行传输,然后在工作脚本中提取它们以根据需要对其进行操作。

还有许多其他类似的队列/工作者设置,例如StarlingGearmanAmazon 的 SQS和其他更多面向“企业”的系统,例如 IBM 的 MQ 和 RabbitMQ。如果你运行 Gearman 或 SQS 之类的东西 - 你如何启动和控制工作池?问题在于最初的工人启动,然后能够添加额外的额外工人,随意关闭它们(尽管我可以通过队列发送消息以关闭它们 - 只要一些“观察者”不会自动重新启动它们)。这不是 PHP 问题,它是关于直接设置一个或多个进程以在启动时运行的 Unix 进程,或者向池中添加更多工作人员。

循环脚本的bash 脚本已经到位 - 这会调用 PHP 脚本,然后从队列中收集并运行任务,偶尔退出以便能够自行清理(它也可以在失败时暂停几秒钟,或通过计划的活动)。这很好用,在此基础上构建工作进程一点也不难。

获得一个好的工作控制器系统是关于灵活性的,在机器启动时自动启动一个或两个,并且能够在队列繁忙时从命令行添加更多,在不再需要时关闭额外的。

0 投票
10 回答
111163 浏览

c# - 创建阻塞队列在.NET 中?

我有一个场景,我有多个线程添加到一个队列中,并且多个线程从同一个队列中读取。如果队列达到特定大小,所有填充队列的线程将在添加时被阻塞,直到从队列中删除项目。

下面的解决方案是我现在正在使用的,我的问题是:如何改进?是否有一个对象已经在我应该使用的 BCL 中启用了这种行为?