为了开发在Linux上一个高度密集的网络服务器应用程序,最好什么样的架构?这个想法是,这个应用程序通常运行在具有多个内核(虚拟或物理)的机器上。考虑到性能是关键的标准,最好去多线程应用程序还是多进程设计的应用程序?我知道共享资源和同步从多个进程访问这些资源是很多编程开销,但正如前面提到的,整体性能是关键要求,所以我们可以忽略这些东西。编程语言是C/C++。性能 - 多线程或者多进程应用程序
我听说,即使是多线程应用程序(单个进程)可以利用多个内核的独立运行在不同核心的每个线程(只要没有同步问题)。这个调度是由内核完成的。如果是这样,多线程应用程序和多进程应用程序在性能上没有太大的区别? Nginx使用多进程架构,速度非常快,但是多线程应用程序可以获得相同的性能吗?
谢谢。
@ P-L:谢谢您的回答。是的,该计划将使用基于偶数的架构,并基于网络事件采取行动。在运行时不会创建额外的线程和进程。鉴于此,您看到多线程和多进程应用程序之间没有性能差异吗?例如:如果有一个带有4个内核的系统,两个架构之间的性能不会有明显差异? – sthustfo
可能的最大差异是在调度中,可以使用任务的cpu关联性修改,将每个任务(线程/进程)固定到特定的cpu。服务器进程完成的实际工作以及与网络部分的交互方式可能会有更多不同。 可能存在与内存访问方式有关的差异,但与线程/进程差异相关性较低,因为在NUMA系统上一般共享内存 - 尽管目前的内核有可能支持在不同的NUMA中创建代码段的副本区域(过去他们确实拥有内核本身)。 –