gpt4 book ai didi

.net - 在处理阻塞过程时管理线程和内存使用情况

转载 作者:行者123 更新时间:2023-12-01 01:53:10 27 4
gpt4 key购买 nike

我有一堆文件(每秒10个左右)进入系统(存储在数据库中)。每个文件都包含一个介于1到500个设备之间的条目。给定的设备将出现在多个文件中(但不是每个文件)。最终,这些数据需要存储在另一个按设备存储的数据库中。有两种不同的文件格式。

有一个API负责最后的数据库部分,该API接收单个设备的多个条目(在后台,这还会进行一些查找以查找数据库中的ID,因此一次为单个设备处理多个条目意味着一次查找,而不是每个条目一次。

为此,我有一个包含以下部分的程序:

  • 解析文件,将数据提取到一组通用的数据对象中。
  • 这是一个线程化进程,每个文件有一个线程,将数据添加到线程安全的集合
  • 加载每个文件时,其数据库条目都标记为“进行中”。
  • 将对象保存到数据库中
  • 另一个线程处理,它提取给定设备的所有对象,然后告诉数据API保存它们。
  • 一旦成功从单个文件中保存了所有设备(如果失败),则原始文件的DB条目被标记为成功/失败。


  • 我的问题是:管理何时解析文件,要使用多少线程,多少RAM等的最佳方法是什么?
  • 数据API将花费最长的时间-大多数情况下,那里的线程将只在等待API返回。
  • 通过每个设备分组更多数据来提高系统的整体效率
  • 该应用程序不应该在RAM不足的情况下运行,也不应该解析太多文件但等待保存,以免导致操作系统交换。
  • 未知DB API可以处理多少个并发调用,或者它运行的速度如何-该过程需要适应该

  • 那么,我如何知道何时解析文件,以确保其运行速度尽可能快,而又不会因使用过多的RAM而导致性能下降呢?

    最佳答案

    看来您的系统受I/O的约束很大(输入端的文件和输出端的DB)。我在那里看不到任何CPU密集型部件。

    最明显的优化已经存在于问题中:将大量传入文件打包并按设备对数据进行分组。代价是内存消耗和Db更新中的延迟。您将需要相应的参数。

    作为第一个想法,我将其设置在3个由边界队列连接的块中。这些队列将使任何“不堪重负”的组件扼杀其供应商。

    块1:1或2个线程(取决于I/O系统)来读取和解析文件,

    块2:1个用于组织和分组数据的线程。确定何时将设备数据发送到Db

    块3:1个以上的线程将数据推送到Db。

    这些块为该系统提供了一定的灵活性。有限的队列使您可以控制资源消耗。请注意,应该对块2进行参数设置以调整块大小。

    关于.net - 在处理阻塞过程时管理线程和内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3135237/

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