Multithreading 对于大型多核机器上的数据密集型任务,多线程性能影响是什么?

Multithreading 对于大型多核机器上的数据密集型任务,多线程性能影响是什么?,multithreading,performance,operating-system,multiprocessing,numa,Multithreading,Performance,Operating System,Multiprocessing,Numa,我正在读一篇关于大规模多核机器上多线程性能问题的帖子: 这篇文章的一位作者声称,在大规模多核系统中,多线程应用程序比多处理应用程序对性能的影响要大得多 AFIAK多线程比现在的多处理更便宜(在系统管理和上下文切换方面)。 为了简单起见,我们假设不需要使用锁 如果我们不使用锁来保护共享内存,那么在管理多线程应用程序及其对资源的访问方面是否存在任何系统限制? 当多线程对性能有巨大影响时(这是本文作者所做的),是否存在与非用户空间实现相关的原因? 换句话说:与类似的多进程解决方案相比,导致数据密集型多

我正在读一篇关于大规模多核机器上多线程性能问题的帖子: 这篇文章的一位作者声称,在大规模多核系统中,多线程应用程序比多处理应用程序对性能的影响要大得多

AFIAK多线程比现在的多处理更便宜(在系统管理和上下文切换方面)。 为了简单起见,我们假设不需要使用锁

如果我们不使用锁来保护共享内存,那么在管理多线程应用程序及其对资源的访问方面是否存在任何系统限制?

当多线程对性能有巨大影响时(这是本文作者所做的),是否存在与非用户空间实现相关的原因?
换句话说:与类似的多进程解决方案相比,导致数据密集型多线程应用程序性能差的系统级属性是什么


我知道线程和进程之间的语义差异

线程共享进程不共享的内存视图。如果执行者经常需要更改内存视图,则多线程方法可能比多进程方法慢,因为争用内部保护内存视图的锁

线程还共享文件描述符。如果您经常打开和关闭文件,线程可能会相互阻塞以访问进程文件描述符表。多进程方法不会有这个问题

库函数中也可能存在内部同步开销。在单线程情况下,保护进程级结构的锁可以是无操作的。在多线程情况下,这些锁可能需要昂贵的原子操作


最后,多线程进程可能需要频繁访问线程本地存储以实现类似
errno
的功能。在某些平台上,这些访问可能非常昂贵,并且可以在单线程过程中避免。

我无法理解您的问题。你到底在问什么?我刚刚更新了这个问题。还要检查正文中的链接,它显示了作者在使用多线程时注意到的性能影响。谢谢。看起来只有第二个和第四个案例与操作系统级属性相关。