有两个线程data_collect_thread
和data_process_thread
。
data_collect_thread
收集数据并将数据推送到队列中,这比从队列中取出数据并处理数据的 data_process_thread
快 4 倍。
在这种情况下,一段时间后,由于与将数据推送到队列相比,出队速度较慢,堆会溢出。
我无法在 data_collect_thread
中等待 data_process_thread
处理数据。我需要获取实时数据,不能有任何遗漏。
请建议一种算法来避免此问题?
更多详细信息:
队列是一个双向链表,所以我需要在堆中分配内存并将其推送到队列中。出队后,内存被释放。
最佳答案
这个问题太宽泛,无法给出具体答案,但无论如何,我觉得很有趣。所以我会给出一些解决方案。
- 购买速度四倍的计算机。
- 创建更多
data_process_thread
实例。如果您有多个核心,则可能会起作用。 - 优化
data_process_thread
的算法和/或代码。 - 完全重写
data_process_thread
以在 GPU 上运行。 - 创建具有负载均衡器的计算机集群。
- 将队列假脱机到磁盘。如果数据流出现一些暂停,可能会起作用。
我可能会补充一点,如果你对问题添加足够的约束,它可能会变得无法解决。
关于c - 同步两个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59944770/