目录
三. 理解底层模块间的数据关系, 避免在多线程处理时破坏底层的访问
摘要:
逐行访问数据库中的元素涉及对磁盘IO的操作, 读取pack后又涉及解压和数据转换的操作,单线程处理时会产生大量的耗时。
一个简单的做法便是将数据拆分成不同的子集,然后利用多核CPU去处理不同的子集,最后将结果汇总。
本文分析这样的做法的一般性。
拆分成多线程处理面临的问题:
一. 需要有一个线程池任务处理模块
如果没有的话,那就需要写一个这样的多线程任务处理的模块,需要包含以下内容:
- 包含对要处理的任务的基本的数据结构的包装
- 一个任务必须可以独立的运行
- 任务与线程之间的关系,由线程池去消费任务
- 可以线程池中添加任务