我的第一个 C++ 程序,实现了简单的队列。
- 队列为先进先出队列,具有一般通用队列的功能。
- 可设定内存队列容量的大小,若数据超出该量,将自动存放到文件中。
- 队列若需存取文件,启动后台线程进行,尽量不影响入队、出队操作的效率。
- 可设定队列的总容量。队列满后,不能入队,只能出队。
- 可设定入队、出队操作是否阻塞。
- 队列存放的数据为用户自定义数据,一般为结构体,固定长度。
- 队列为线程安全,保证入队、出队可以多线程安全操作。
- 内存队列 - 仅保存指针,对象的生命周期需自行维护。
- 单文件队列 - 仅作为多文件队列的组成部分,不能单独使用。
- 多文件队列 - 入队时将对象保存到文件,并回收内存;出队时分配内存,并将对象写入内存。
- 联合队列 - 由内存队列和多文件队列构成。当内存队列满时,对象存储到多文件队列中。
- 有类型/无类型队列 - 有类型队列可自动构造、析构对象;无类型队列使用 malloc 和 free 来分配和回收内存。
机器配置:
- 内存:15.5G
- CPU:八核Intel(R) Xeon(R) CPU E5-2609 0 @ 2.4GHz
- 可用硬盘空间:2964.4G
操作系统:
- Red Hat Enterprise Linux Server
- 版本:6.2
- 内核:2.6.32
测试数据:
struct GData {
int head[192];
float foot[3000];
}
测试结果:
数据量 | 线程数 | 用时 1 | 用时 2 | 用时 3 |
---|---|---|---|---|
100万 | 入队1 出队1 | 4秒531毫秒 | 4秒602毫秒 | 4秒431毫秒 |
100万 | 入队2 出队1 | 38秒642毫秒 | 23秒310毫秒 | 65秒234毫秒 |
100万 | 入队2 出队2 | 5秒597毫秒 | 2秒198毫秒 | 4秒246毫秒 |
1000万 | 入队1 出队1 | 21秒257毫秒 | 40秒918毫秒 | 25秒926毫秒 |
1000万 | 入队2 出队1 | 154秒508毫秒 | 107秒445毫秒 | 220秒296毫秒 |
1000万 | 入队2 出队2 | 243秒359毫秒 | 372秒674毫秒 | 67秒828毫秒 |