Skip to content

DavidingPlus/thread-pool-sorter

Repository files navigation

thread-pool-sorter

Linux 环境高级编程的课程作业。

核心思路

分块排序

大文件一次性放不进内存,所以把文件切成“块”(chunk)。每个块读到内存后,用线程池排序(std::sort),然后写入一个临时文件。这样可以利用多核 CPU 同时处理多个块,提高排序速度。

多路归并

排好序的临时文件需要合并成一个完整排序文件。传统归并是两个文件一对一合并(2 路归并),轮次多,效率低。这里用 k 路归并:每次一次性合并多个文件,比如 8 个文件一起归并成一个新文件。归并的任务也可以提交给线程池并行执行。

循环归并直到只剩一个文件

每轮归并生成的新文件会作为下一轮的输入文件,再次进行 k 路归并。最终只剩下一个文件,这就是排序后的 .bin.sorted 文件。

优缺点分析

这样做的优点是 CPU 多线程利用,内存不会爆掉,块与块之间可并行处理。但缺点也很明显,磁盘 I/O,尤其是写入临时文件。

构建流程

环境准备

sudo apt install build-essential cmake

# 若报错,https://www.yaolong.net/article/pip-externally-managed-environment/
pip install conan==2.6.0

conan profile detect

编译流程

# 在项目根目录跑

conan install . -s "&:build_type=Debug" -s "build_type=Release" --build=missing

cmake --preset thread-pool-sorter-debug

cmake --build --preset thread-pool-sorter-debug

./build/Debug/snippet/ThreadPoolSorterDemo/ThreadPoolSorterDemo

About

Linux 环境高级编程的课程作业。

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors