我有一种情况,我的主线程(生产者)在堆上为任务分配了大量内存,在该缓冲区上做一些工作,然后将缓冲区提供给工作线程(消费者)以进行进一步处理(这将首先压缩该数据然后将其写入磁盘)。一旦工作线程完成它的工作,它就会释放生产者为任务获取的内存。
但是,可能会出现我的主线程分配过多内存的情况,因此我的系统开始将其他程序换出到磁盘以适应内存需求。由于磁盘变得忙碌,工作线程发现很难在磁盘上写入(并最终释放任何内存),同时生产者继续为其他任务分配更多内存。这最终会扼杀我的系统性能。
这个问题的好设计是什么?
此外,如果通过预先计算内存要求来暂停主线程,这是一种选择,我如何才能得出可靠的数字?
最佳答案
可能的设计选项
在内存分配方面,确定性总是有益的,甚至像在启动时预先分配所有内容一样确定性。如此严格并不总是可能或不切实际,因此通常在任何非平凡系统中都会发生固定/动态大小调整和启动/运行时分配的组合。
关于multithreading - 消费者生产者 : Pausing the consumer if memory usage goes beyond a particular threshold,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34738364/