gpt4 book ai didi

c# - 大批量处理的多线程问题

转载 作者:行者123 更新时间:2023-11-30 20:12:51 25 4
gpt4 key购买 nike

我们有一个批处理过程,其中包含对每行数据(总共 2000 万行)进行大约 5 次计算。我们的生产服务器将有大约 24 个具有不错 CPU 的处理器。

性能对我们来说至关重要。假设我们的算法非常高效,那么为此实现最大时间性能的最佳方法是什么?具体来说,我们是否应该能够通过多线程、使用线程池等方式获得更好的性能?此外,使用 Process 对象将批处理分成多个程序是否有好处?

最佳答案

一些想法:

首先,您需要更明确地说明“最佳”——执行如此大规模的处理需要权衡取舍。具体来说,内存、I/O 和 CPU 利用率是需要考虑的因素。每个计算需要多少内存。等等。

假设您是机器上唯一的进程,您有很多内存,并且您主要对优化吞吐量感兴趣,这里有一些建议:

  • 您肯定需要某种方式的多线程处理。
  • 线程池是一种合理的方法,但您需要确保 I/O 延迟不是您最耗时的步骤。
  • 您可能希望使用交接流程将计算与保存计算结果分开。您可能还希望对结果进行批处理,以减少往返数据库的次数。
  • 您还需要将记录批量加载到内存中,以尽量减少访问数据库的次数。
  • 尽可能避免阻塞操作和其他内存障碍,以减少锁定争用。

除了线程池,还有 Task Parallel Library ,它提供了简化此类并行计算开发的工具。它专门设计用于扩展内核数量并优化线程的使用方式。还有 Parallel LINQ ,您可能还会觉得有用。

关于c# - 大批量处理的多线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2133666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com