代码之家  ›  专栏  ›  技术社区  ›  Will

进程与线程的性能影响

  •  5
  • Will  · 技术社区  · 15 年前

    显然,如果性能是关键的,那么原型和概要文件是有意义的。不过,在StackOverflow上也可以寻求智慧和建议。

    对于处理任务间通信不频繁或适合消息传递的高度并行任务,使用进程(fork()等)或线程是否存在性能劣势?

    线程之间的上下文切换比进程之间的上下文切换便宜吗?有些处理器有单指令上下文切换,不是吗?主流操作系统是否更好地利用多线程或多进程的SMP?如果进程从未写入这些页,fork()的cow开销是否比线程更昂贵?

    等等。谢谢!

    5 回复  |  直到 12 年前
        1
  •  7
  •   Kyle    15 年前

    流程创建缓慢的想法是一个古老的想法,在过去更为真实。谷歌的Chrome团队在某个地方做了一小段关于它如何不再有那么大的影响的文章,下面是Scott Hanselman的主题: http://www.hanselman.com/blog/MicrosoftIE8AndGoogleChromeProcessesAreTheNewThreads.aspx

    我的看法是线程更快吗?”C,但只是中等程度的,而且目前在线程方面更容易出错。

    我听说.NET 4.0将扩展线程库…关于system.threading.thread.for?我能想到一些我想去的地方…对于这一千个项目列表中的每一个项目,去做一些事情。

    http://reedcopsey.com/?p=87

        2
  •  2
  •   Frunsi    15 年前

    在下面的URL中,您将找到一个真实世界的基准,并将fork与pthread_在真实世界的应用程序中创建的结果进行比较,尽管它从2003年起可能发生了一些变化。从这个基准快速地进行推理,如果您有500多个进程或线程,那么fork的伸缩性似乎更好。

    http://bulk.fefe.de/scalable-networking.pdf -第29至32页

        3
  •  1
  •   Björn Pollex    15 年前

    我的猜测是,线程更快,因为它们是更轻量的解决方案。流程设计为彼此隔离。每个进程使用它自己的TLB,而线程共享一个虚拟地址空间(afaik),因此这可能是一个参数。如果你想做某种分布式计算,进程是有用的。

    一般来说,关于线程和一些东西,我建议您研究OpenMP或IntelTBB。这些人对多线程和高性能计算非常了解。

        4
  •  1
  •   jldupont    15 年前

    归根结底是 隔离成本 :进程彼此独立(例如,单独的内存资源、保护、单独的文件句柄等),而线程可以在进程内共享资源。这需要时间和资源来支持和实施 隔离 .

    就像这个宇宙中的任何东西一样, 你必须为你得到的东西“付钱”。

        5
  •  0
  •   amdmax    12 年前

    根据这本书: http://reiber.org/nxt/pub/Linux/LinuxKernelDevelopment/Linux.Kernel.Development.3rd.Edition.pdf Linux将所有线程实现为标准进程。考虑到你在写关于cow的文章,那是linux。然而,更多内容见第33-34页。