读取同一组文件的不同核心上的多个线程

时间:2015-01-25 20:28:39

标签: c multithreading performance file operating-system

我有一个多线程进程,每个线程在一个核心上运行。我正在从每个线程读取相同的文件集并处理它们。多个线程读取同一组文件会影响进程的性能吗?

3 个答案:

答案 0 :(得分:3)

不一定,但有几个因素需要考虑。

当你打开READING文件时,你不需要对它进行读锁定。

这意味着多个线程可以从同一个文件中读取。

实际上,进程中的所有线程共享进程内存,因此您可以通过缓存进程内存上的整个集(或部分内容,具体取决于大小)来使用它。这将减少访问时间。

否则,如果我们假设所有文件都在同一设备中,问题是同时从同一设备同时读取多个文件的速度很慢,并且根据线程数和存储类型的不同,它会明显变慢

答案 1 :(得分:2)

从每个不同的线程读取同一组文件可能会降低进程的性能,因为除了为每个差异线程重复相同的读取操作之外,IO请求通常成本高且速度慢。

解决这个问题的一个可能的解决方案是让一个线程处理IO读/写,其余的处理数据,例如作为生产者消费者。

答案 2 :(得分:1)

您可以考虑使用内存映射文件进行并发读取访问。

它将避免将数据复制到每个进程地址空间的开销。