【问题标题】:Multiple threads on different cores reading same set of files不同内核上的多个线程读取同一组文件
【发布时间】:2015-03-24 08:00:18
【问题描述】:

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

【问题讨论】:

  • 与大多数事情一样,这取决于。它可能取决于文件的大小、线程在读取文件时的同步程度、文件的哪些部分被缓存或在缓冲区中、文件是在旋转盘(即普通旧硬盘驱动器)磁盘上还是在固态(即闪存)磁盘和许多其他东西。
  • 我有一个正在读取的内部 SSD。我没有做任何缓存。

标签: c multithreading performance file operating-system


【解决方案1】:

您可以考虑将内存映射文件用于并发读取访问。

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

【讨论】:

  • 感谢您的回答。我正在尝试这个,到目前为止结果是积极的!
  • @user1295872 欢迎您! PS - 在这里最好的感谢 - 投票给答案;-)
【解决方案2】:

从每个不同的线程读取相同的文件集可能会降低进程的性能,因为 IO 请求通常代价高昂且速度缓慢,此外还要为每个不同的线程重复相同的读取操作。

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

【讨论】:

    【解决方案3】:

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

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

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

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

    否则,如果我们假设所有文件都在同一个设备中,那么问题是同时从同一个设备读取多个文件很慢,并且取决于线程数和存储类型,它可能会明显变慢

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 1970-01-01
      • 2010-11-28
      • 2020-09-05
      • 2019-01-05
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多