我有一种情况,我正在将我的工作卸载到线程。两部分的“工作”折衷:
- 首先压缩给定的数据缓冲区
- 然后将压缩后的数据写入磁盘
我的主线程不断地创建许多数据缓冲区。
我最初考虑的是线程池设计,但可能池中的所有线程都在等待 I/O。
如果我在每次创建新 dataBuffer 时都创建一个新线程,我会看到创建了大量线程。这可能会有内容切换的开销,但由于上下文切换,我的 CPU 周期不会被浪费。
管理这种情况的好的设计是什么?
最佳答案
如果我能帮上忙,让我试试。
1. First compress the given data buffer
2. Then write the compressed data to disk
我从您那里了解到您生成了数据缓冲区,您需要将其压缩并存储到磁盘中。
如果顺序很重要并且数据源不是时间密集型的,则不会 松散数据直到下一个周期,然后你可以有下面的方法。
线程A
生成数据缓冲区
向线程 B 发出信号,说明您有数据。
线程B
等待线程A的信号
检索数据并压缩。
向线程 C 发出信号以存储它。
线程 C
等待线程B的信号
检索压缩数据,并存储到磁盘中。
关于C++:当每个线程都应该同时执行 I/O 和 CPU 密集型任务时的多线程设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34736331/