Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 服务器中进程间线程分布的性能影响_Multithreading_Performance_Concurrency_Server_Multiple Processes - Fatal编程技术网

Multithreading 服务器中进程间线程分布的性能影响

Multithreading 服务器中进程间线程分布的性能影响,multithreading,performance,concurrency,server,multiple-processes,Multithreading,Performance,Concurrency,Server,Multiple Processes,问题的标题很尴尬,很抱歉 我目前正在设计一台服务器,我的一位同事提出了一条意见,认为我们应该使用多个进程,因为在一个进程中有太多线程会对性能造成一定的影响(而不是在同一台机器上的多个进程中分布相同数量的线程) 我能想到的唯一会导致这种情况的原因(除了糟糕的操作系统调度)是竞争加剧(例如在内存分配器上),但我不确定这有多重要 这是“最佳实践”吗?有没有人可以和我分享一些基准?当然,答案可能取决于平台(我主要对windows/linux/osx感兴趣,尽管我需要在某种程度上关心HP-UX、AIX和S

问题的标题很尴尬,很抱歉

我目前正在设计一台服务器,我的一位同事提出了一条意见,认为我们应该使用多个进程,因为在一个进程中有太多线程会对性能造成一定的影响(而不是在同一台机器上的多个进程中分布相同数量的线程)

我能想到的唯一会导致这种情况的原因(除了糟糕的操作系统调度)是竞争加剧(例如在内存分配器上),但我不确定这有多重要

这是“最佳实践”吗?有没有人可以和我分享一些基准?当然,答案可能取决于平台(我主要对windows/linux/osx感兴趣,尽管我需要在某种程度上关心HP-UX、AIX和Solaris)

当然,使用多进程体系结构还有其他好处,例如进程隔离可以限制崩溃的影响,但我对这个问题的性能感兴趣

对于某些上下文,服务器将为长时间运行的有状态连接提供服务(因此无法将它们迁移到其他服务器进程),这些连接将发送回大量数据,并且还可能导致服务器机器上的大量本地数据库处理。它将使用过程中的PROTER架构,并在C++中实现。服务器预计将运行数周/数月而无需重新启动(尽管这可以通过在某些代理下透明地旋转新实例来实现)


此外,我们将使用多进程体系结构,我更关心的是调度到进程的连接。

确认该理论的一个原因可能是堆内存设施(malloc)上的锁争用。与文件系统访问相关的锁可能也是如此。基本上所有线程同时使用的“公共基础设施”,通常没有人考虑。从纯调度相关的角度来看,我无法理解为什么多个进程应该产生更好的性能。如果我会选择多线程少进程/一进程的方法,因为这样就有机会优化访问的局部性(缓存未命中等)。是的,另一方面,您需要平衡这一影响与进程上下文切换增加的成本,这可能会更大程度地破坏处理器缓存(…这是一件事,对吗?)不久前,当我将一些(嵌入式)代码移植到FreeBSD时,我在BSD irc中问到,为什么没有定制的堆API。他们指出,他们的malloc使用线程本地存储进行了优化,以避免堆锁争用。我可以接受这个答案,有点。