multithreading - 多线程内存访问是否可以提高性能?

标签 multithreading performance memory

我在RAM中有一个大型阵列,想尽快从中读取数据。忽略任何可能的同步,我只对理论感到好奇。

将这些读取分布到多个线程比仅使用一个线程更快吗?

编辑:每个数据点大约20KB,我无法预测它们的读取顺序。

最佳答案

一般而言:,但要注意缓存未命中。

假设您有一个int []:考虑在后续元素的范围内对其进行分区,并让每个线程获得其自己的范围(thread1从0到127,thread2从128到255,...)。

当您读取数组的一个元素时,执行加载的处理器内核最有可能在其缓存中加载该数组的某些连续元素,因为在大多数情况下,紧接着需要它们(请想象(int i = 0 ;; i++)do(arra [i])):如果不以方式对数据进行分区,那么所有这些工作都将被浪费掉。

您可以在Joe Duffy的以下文章中了解有关此内容的更多信息:

  • Using concurrency for scalability
  • Solving 11 Likely Problems In Your Multithreaded Code

  • 并非严格相关:The 'premature optimization is evil' myth特别是“了解重要的数量级”部分

    正如@Alex所说,一般规则是您必须始终衡量并且绝不承担任何责任:通过并发进行有效的可伸缩性是一个复杂的主题,并且需要对基础架构进行大量深入的了解。

    关于multithreading - 多线程内存访问是否可以提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9265267/

    相关文章:

    javascript - 这个javascript语句会影响性能吗?

    python - Python 'for' 循环的更好方法

    python - 在长时间运行的 Python 进程中迭代大型数据集 - 内存问题?

    memory - NDIS 自旋锁是否充当 DMA 的内存屏障?

    Android AdMob 导致内存泄漏?

    python - 在 Queue.Queue.get() 中阻塞时处理 SIGTERM

    java - 测量垃圾收集时间的阻塞部分

    java - 线程优先级无法正常工作。我的代码中做错了什么?

    python - 如何以线程安全的方式快速更新列表列表?

    java - Java 5 中的线程安全 XML 验证