队列的实际应用有哪些?

22

队列在计算机科学中具有哪些实际应用?我们在哪些地方使用它们以及为什么要使用它们?我听说我们在视频游戏和计算机模拟程序中使用它们,这是真的吗?为什么?除了这两个领域外,队列作为数据结构还有哪些其他实际应用呢?


2
你曾经排过队吗?任何需要等待服务、能力等的事物都必须排队,或者用英语称之为队列。 - kenny
它们被用于任何需要按照某种顺序传递东西的情况。 - Travis Gockel
21
以你的个人资料为例。有一个队列包含了20个问题,它们都在等待你接受答案。 - skaffman
13个回答

24

堆栈(Stacks)被用于各种软件中的撤消按钮。最近的更改被推送到堆栈中。即使是浏览器的后退按钮也依靠堆栈工作,其中所有最近访问的网页都被推入堆栈中。

队列(Queues)在打印机或上传图片等情况下使用。先进入队列的将首先被处理。


17

队列被用于任何需要高效地维护某些实体的先进先出顺序的情况。这种情况实际上在各种软件开发中都会出现。

想象一下,你有一个网站,为数千名用户提供文件服务。你不能同时处理所有请求,只能处理100个。公平的政策应该是先到先服务:按照到达顺序每次服务100个。队列肯定是最合适的数据结构。

同样,在多任务操作系统中,CPU 无法同时运行所有作业,因此必须将作业批量处理,然后根据某些策略进行调度。在这种情况下,队列可能是一个合适的选项。


9

我使用队列来优先回答SO问题。我尝试过用多进程处理它们,但是完全搞砸了。


2
@高性能标记 也许使用两个显示器可以利用你的两个处理器(称为大脑半球)并行处理两篇文章……但由于各种原因,输入/输出仍然很糟糕 :-) - Péter Török
4
@Péter Török:你是怎么知道我做过脑叶切除手术的? - High Performance Mark

6

各种系统中,请求/作业/客户端由一个或多个处理程序处理:传入的项目存储在队列中,当处理程序空闲时,它会从队列中弹出新项目并开始处理。这种模式在所有Web服务器中都被使用,其中包括生产者-消费者问题


3

队列的典型应用包括模拟和操作系统。

Operating systems often maintain a queue of processes that are ready to execute or that are waiting for a particular event to occur.
Computer systems must often provide a “holding area” for messages between two processes, two programs, or even two systems. This holding area is usually called a “buffer” and is often implemented as a queue.

我们的软件队列在现实世界中也有对应的队列。我们排队买披萨、进电影院、在高速公路上行驶以及乘坐过山车。队列数据结构的另一个重要应用是帮助我们模拟和分析这些现实世界的队列。


3
假设您有多个文件需要打印。操作系统会将所有这些文件放入队列中,并将它们发送到打印机。打印机按照文档在队列中的顺序逐一接收和打印,即先进先出。
在存在多个用户或网络计算机系统的情况下,您可能与其他用户共享打印机。当您请求打印文件时,您的请求将被添加到打印队列中。当您的请求到达打印队列的前面时,您的文件将被打印。这确保每次只有一个人可以访问打印机,并且此访问是按照先来先服务的原则进行的。

2
算法和数据结构密不可分,因此通常使用队列取决于将操作堆栈入队和出队的算法,而这又取决于应用程序。
例如,如果您正在制作一个应用程序,该应用程序将从多个用户接收输入,并且您必须按“先到先服务”的方式为它们提供服务,那么您应该将每个传入的请求入队到一个堆栈中,而无需每次检查每个请求的时间戳并查看谁是最老的。每次只需出队堆栈即可查看下一个请求。

1

队列也可以用于实现广度优先搜索 - 一种遍历可以从起始顶点到达的图中所有顶点的算法。


1

队列使用先进先出的概念(FIFO)。第一个到达的工作将首先被处理。例如,操作系统将文档排队以便打印,打印机只会打印第一个到达并产生输出的文档。


1

游戏应用程序: 探索相互连接的迷宫的算法使用队列来跟踪尚未被探索的选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接