我正在阅读一篇关于大型多核机器上多线程性能问题的文章: http://www.reddit.com/r/Python/comments/1mn12l/what_you_do_not_like_in_python/ccbc5h8 该帖子的作者声称,在大型多核系统中,多线程应用程序比多处理应用程序具有更大的性能影响。
AFIAK多线程现在比多处理便宜(在系统管理和上下文切换方面)。 为简单起见,我们假设我们不需要使用锁。
如果我们不使用锁来保护共享内存,管理多线程应用程序及其对资源的访问是否有任何系统限制?
当多线程产生巨大的性能影响时(作者有哪些),是否存在非用户空间实现相关的原因? 换句话说:与类似的多进程解决方案相比,什么是导致数据密集型多线程应用程序执行不良的系统级属性?
我知道线程和进程之间的语义差异。
答案 0 :(得分:1)
线程共享进程没有的内存视图。如果您遇到执行程序经常需要更改内存视图的情况,那么多线程方法可能比多进程方法慢,因为争用内部保护内存视图的锁。
线程还共享文件描述符。如果您经常打开和关闭文件,则线程可能会相互阻塞以访问进程文件描述符表。多进程方法不会遇到这个问题。
库函数中也可能存在内部同步开销。在单线程情况下,保护进程级结构的锁可以是无操作。在多线程情况下,这些锁可能需要昂贵的原子操作。
最后,多线程进程可能需要频繁访问线程本地存储来实现errno
之类的事情。在某些平台上,这些访问可能很昂贵,并且可以在单线程进程中避免。