我们已经创建了一个多线程应用程序,可以同时处理/解析大文件(几百MB)。应用运行完美。但我的客户对使用机器核心的方式感到失望。他试图观察性能监视器并向我们报告。他的观点是,如果应用程序是多线程的,为什么CPU平均利用率低于25%。据他介绍,如果系统上没有运行任何文件处理需要时间,CPU利用率应该超过80-90%。我不确定答案或技术结果会让他满意。请建议。
修改
我有一个多线程应用程序从光盘加载文件。文件加载到内存后,我点击进程按钮,它开始解析内存中的文件。让我们假设现在,解析是在一个线程中完成的。虽然app正在解析数据,但我的平均CPU使用率并未完全使用。我可以给出什么理由来证明为什么没有完全使用CPU。任何类型的报告都可以,或者技术文档会有所帮助。
答案 0 :(得分:1)
问题非常模糊,但这里有一些一般性指导原则。
磁盘IO是主要的瓶颈,除非文件处理真的很花哨。同时加载多个文件会使情况变得更糟,因为磁头需要跳转(对于非SSD驱动器),数据将进入内存甚至更慢。如果以100 MB的速度加载四个文件,那么串行完成后大约需要4秒 - 而并行完成则需要更长时间。您的程序可能会或可能不会在此期间等待,根本不处理数据。
因此,如果您的并行化主要是处理多个文件(每个工作线程一个文件),那么您可能希望在一个线程中序列化加载。
如果你一次可以处理一个文件,也许你的处理可以分解为在文件的不同部分工作,或者处理本身可以利用多个CPU(很大程度上取决于你的应用程序)。
如果你需要将数据写回磁盘 - 那么这也将成为游戏的一部分。
我认为这里的要点是最小化IO延迟(以及在不同CPU之间合理分配工作负载)。
编辑:
当然要考虑RAM - 如果你需要换掉,这会立即扼杀你的表现。
最好的办法当然是去分析......