对于大型多核机器上的数据密集型任务,多线程性能影响是啥? [关闭]

Posted

技术标签:

【中文标题】对于大型多核机器上的数据密集型任务,多线程性能影响是啥? [关闭]【英文标题】:What is a multithreading performance impact for data intensive tasks on a massive mulitcore machine? [closed]对于大型多核机器上的数据密集型任务,多线程性能影响是什么? [关闭] 【发布时间】:2013-09-24 02:38:04 【问题描述】:

我正在阅读一篇关于大型多核机器上的多线程性能问题的帖子: http://www.reddit.com/r/Python/comments/1mn12l/what_you_do_not_like_in_python/ccbc5h8 该帖子的一位作者声称,在大型多核系统中,多线程应用程序比多处理应用程序具有更大的性能影响。

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

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

当多线程具有巨大的性能影响(帖子作者有)时,是否有任何非用户空间实现相关的原因? 换句话说:与类似的多进程解决方案相比,导致数据密集型多线程应用程序性能不佳的系统级属性是什么?

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

【问题讨论】:

我无法理解你的问题。你到底在问什么? 我刚刚更新了这个问题。还要检查正文中的链接,它显示了作者在使用多线程时注意到的性能影响。 【参考方案1】:

线程共享进程不共享的内存视图。如果您遇到执行程序经常需要更改内存视图的情况,那么多线程方法可能会比多进程方法慢,因为会争用内部保护内存视图的锁。

线程也共享文件描述符。如果您遇到频繁打开和关闭文件的情况,线程可能会相互阻塞以访问进程文件描述符表。多进程方法不会有这个问题。

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

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

【讨论】:

谢谢。看起来只有第 2 和第 4 种情况与操作系统级别的属性有关。

以上是关于对于大型多核机器上的数据密集型任务,多线程性能影响是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

CPU上下文

py知识(每日更新) 7.25

python 多线程锁机制

多进程和多线程

协程Coroutine

day9-Python学习笔记(二十二)多线程,多进程