我有一个多线程进程,每个线程在一个核心上运行。我正在从每个线程读取相同的文件集并处理它们。多个线程读取同一组文件会影响进程的性能吗?
答案 0 :(得分:3)
不一定,但有几个因素需要考虑。
当你打开READING文件时,你不需要对它进行读锁定。
这意味着多个线程可以从同一个文件中读取。
实际上,进程中的所有线程共享进程内存,因此您可以通过缓存进程内存上的整个集(或部分内容,具体取决于大小)来使用它。这将减少访问时间。
否则,如果我们假设所有文件都在同一设备中,问题是同时从同一设备同时读取多个文件的速度很慢,并且根据线程数和存储类型的不同,它会明显变慢
答案 1 :(得分:2)
从每个不同的线程读取同一组文件可能会降低进程的性能,因为除了为每个差异线程重复相同的读取操作之外,IO请求通常成本高且速度慢。
解决这个问题的一个可能的解决方案是让一个线程处理IO读/写,其余的处理数据,例如作为生产者消费者。
答案 2 :(得分:1)
您可以考虑使用内存映射文件进行并发读取访问。
它将避免将数据复制到每个进程地址空间的开销。