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

C 不同内核上的多个线程读取同一组文件,c,multithreading,performance,file,operating-system,C,Multithreading,Performance,File,Operating System,我有一个多线程进程,每个线程运行在一个核心上。我正在从每个线程读取同一组文件并对其进行处理。多线程读取同一组文件会影响进程的性能吗?不一定,但有几个因素需要考虑 当您打开一个文件进行读取时,不需要对其设置读取锁定 这意味着多个线程可以从同一个文件中读取 事实上,一个进程中的所有线程都共享进程内存,因此您可以通过在进程内存上缓存整个集合(或部分集合,具体取决于大小)来利用它。这将减少访问时间 否则,如果我们假设所有文件都在同一设备中,问题是同时从同一设备读取多个文件的速度很慢,根据线程的数量和存储

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

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

当您打开一个文件进行读取时,不需要对其设置读取锁定

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

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


否则,如果我们假设所有文件都在同一设备中,问题是同时从同一设备读取多个文件的速度很慢,根据线程的数量和存储类型,从每个不同的线程读取同一组文件可能会明显变慢,这可能会降低进程的性能,因为IO请求除了对每个不同的线程重复相同的读取操作外,通常成本高且速度慢


处理这个问题的一个可能的方法是用一个线程处理IO读写,其余的处理数据,例如生产者消费者。

< P>可以考虑内存映射文件来进行并发读访问。
这将避免将数据复制到每个进程地址空间的开销。

与大多数情况一样,这取决于具体情况。它可以取决于文件的大小、读取文件时线程的同步程度、文件的哪些部分被缓存或缓存在缓冲区中、文件是否位于旋转盘(即普通旧硬盘驱动器)磁盘或固态(即闪存)磁盘上,以及许多其他内容。我有一个内部SSD,可以从中读取。我没有做任何缓存。谢谢你的回答。我正在尝试,到目前为止,结果是积极的@user1295872不客气!PS-在此表示最衷心的感谢-投票选出答案;-)