sth*_*tfo 5 linux multithreading multiprocessing
为了在Linux上开发高度网络密集型服务器应用程序,首选哪种架构?这个想法是这个应用程序通常在具有多个核心(虚拟或物理)的机器上运行.考虑到性能是关键标准,选择多线程应用程序或具有多进程设计的应用程序是否更好?我知道共享资源和同步以从多个进程访问这些资源是很多编程开销,但如前所述,整体性能是关键要求,因此我们可以忽略这些事情.编程语言是C/C++.
我听说即使是多线程应用程序(单个进程)也可以利用多个内核并独立地在不同的内核上运行每个线程(只要没有同步问题).这个调度由内核完成.如果是这样,多线程应用程序和多进程应用程序之间的性能差异不大吗?Nginx使用多进程架构并且速度非常快,但是可以通过多线程应用程序获得相同的性能吗?
谢谢.
Linux 上的进程和线程彼此非常相似 - 主要区别在于整个虚拟内存是共享的以及信号处理等某些方面的不同。
这使得线程之间的上下文切换更便宜(不需要昂贵的 MMU 重新加载等),但不一定会导致速度上的太大差异(特别是在线程创建之外)。
对于设计高度网络密集型应用程序,基本上唯一的解决方案是使用事件架构(否则您将因大量进程/线程而使系统陷入困境,并在其管理上花费比实际运行工作代码更多的时间),其中您对套接字上的 I/O 做出反应,并根据哪些套接字表现出活动来执行适当的操作。
关于这种情况下面临的问题的著名文章是“C10k 问题”,可从http://www.kegel.com/c10k.html获取- 它描述了不同的 I/O 方法,因此尽管有点过时,但它是一个很好的介绍。
不过,在深入研究类似反应堆的设计之前要小心——它们可能会变得笨拙和复杂,所以看看你是否不能使用提供更好抽象的库/语言(Erlang 是我个人最喜欢的,带有协程的语言)像 Go 也很有用)。
| 归档时间: |
|
| 查看次数: |
6355 次 |
| 最近记录: |