0

目前,我们的应用程序正在处理同一目录中大约 1000 多个 XML 文件的大量文件。这些文件都被读取、解析和更新/保存到数据库中。

当我们在 12 核机器上测试我们的应用程序时,整个过程比在 4 核机器上处理它要慢得多。

我们观察到,我们的应用程序产生的线程数上升到 30 到 90 个线程,并且上下文切换正在大量增加。这可能是由大量并行执行引起的,但它们都很重要。

上下文切换是罪魁祸首吗?或文件的并行读/写?还是我们减少并行任务的数量?

4

1 回答 1

1

这里的瓶颈是磁盘访问。无论启动多少线程,文件系统一次只能读取一个文件。启动更多线程只会使它们争夺这个单一资源,从而增加上下文切换和磁盘寻道时间。

在进程的另一端也是一个限制,因为一次只有一个线程可以更新数据库中的表,但数据库被设计为处理多个进程。

让一个线程负责磁盘读取,一旦文件被读取,它就可以启动一个线程来处理它。这样,您以最有效的方式从磁盘读取,并且您在瓶颈后面有操作的多线程部分。

于 2013-02-22T10:11:18.923 回答