队列Queue
按先进先出顺序组织待处理元素。
- 核心约束
- 入队顺序决定出队顺序。
- 适用问题
- 任务缓冲、流水线、消息传递。
- 边界与取舍
- FIFO 不直接表达优先级或公平配额。
常见操作#
n 为队列元素数。
| 操作 | 时间复杂度 | 条件与说明 |
|---|---|---|
| 查看队首 | 保存队首位置。 | |
| 入队 / 出队 | 带首尾指针的链表或固定容量环形队列;不包含分配和阻塞等待。 | |
| 动态环形数组入队 | 摊还 ;扩容最坏 | 按几何比例增长,避免每次出队都移动整个数组。 |
| 按值查找 / 遍历 | 最坏检查所有待处理元素。 |
时间与空间#
- 时间复杂度
- 合适实现的入队 / 出队
- 存储空间
这是队列数据结构的成本;线程安全队列的锁、唤醒与等待时间另计。
工程中的应用#
2 个案例 · 附源码Linux IIO 的 kfifo 缓冲在采样进入内核与用户态读取之间暂存数据,按先进先出顺序交付采样记录。
附源码片段 · 内存管理
QEMU 线程池用尾队列组织待处理请求:提交时尾插,worker 持锁从头部领取,然后在锁外执行工作。
附源码片段 · 调度与资源分配