不同内核上的多个线程读取同一组文件
Multiple threads on different cores reading same set of files
我有一个多线程进程,其中每个线程都在一个内核上运行。我正在从每个线程读取同一组文件并处理它们。多线程读取同一组文件会不会影响进程的性能?
不一定,但有几个因素需要考虑。
当您打开一个文件进行阅读时,您不需要对其设置读取锁定。
这意味着多个线程可以从同一个文件读取。
事实上,一个进程中的所有线程都共享进程内存,因此您可以通过在进程内存上缓存整个集合(或其中的一部分,取决于大小)来利用它。这将减少访问时间。
否则,如果我们假设所有文件都在同一设备中,问题是同时从同一设备同时读取多个文件会很慢,并且取决于线程数和存储类型明显变慢
从每个不同的线程读取同一组文件可能会降低进程的性能,因为 IO 请求通常成本高且速度慢,此外还会为每个不同的线程重复相同的读取操作。
一个可能的解决方案是让一个线程处理 IO reads/writes,其余线程处理数据,例如作为生产者消费者。
您可以考虑使用内存映射文件进行并发读取访问。
它将避免将数据复制到每个进程地址的开销space。
我有一个多线程进程,其中每个线程都在一个内核上运行。我正在从每个线程读取同一组文件并处理它们。多线程读取同一组文件会不会影响进程的性能?
不一定,但有几个因素需要考虑。
当您打开一个文件进行阅读时,您不需要对其设置读取锁定。
这意味着多个线程可以从同一个文件读取。
事实上,一个进程中的所有线程都共享进程内存,因此您可以通过在进程内存上缓存整个集合(或其中的一部分,取决于大小)来利用它。这将减少访问时间。
否则,如果我们假设所有文件都在同一设备中,问题是同时从同一设备同时读取多个文件会很慢,并且取决于线程数和存储类型明显变慢
从每个不同的线程读取同一组文件可能会降低进程的性能,因为 IO 请求通常成本高且速度慢,此外还会为每个不同的线程重复相同的读取操作。
一个可能的解决方案是让一个线程处理 IO reads/writes,其余线程处理数据,例如作为生产者消费者。
您可以考虑使用内存映射文件进行并发读取访问。
它将避免将数据复制到每个进程地址的开销space。