linux – 性能 – 多线程或多进程应用程序
|
为了在 Linux上开发高度网络密集型服务器应用程序,首选哪种架构?这个想法是这个应用程序通常在具有多个核心(虚拟或物理)的机器上运行.考虑到性能是关键标准,选择多线程应用程序或具有多进程设计的应用程序是否更好?我知道共享资源和同步以从多个进程访问这些资源是很多编程开销,但如前所述,整体性能是关键要求,因此我们可以忽略这些事情.编程语言是C/C++. 我听说即使是多线程应用程序(单个进程)也可以利用多个内核并独立地在不同的内核上运行每个线程(只要没有同步问题).这个调度由内核完成.如果是这样,多线程应用程序和多进程应用程序之间的性能差异不大吗? Nginx使用多进程架构并且速度非常快,但是可以通过多线程应用程序获得相同的性能吗? 谢谢. 解决方法linux上的进程和线程彼此非常相似 – 主要区别在于整个虚拟内存是共享的,以及信号处理等某些事情不同.这使得线程之间的上下文切换更便宜(不需要昂贵的MMU重新加载等),但不一定会导致速度上的太大差异(特别是在线程创建之外). 对于设计高度网络密集型应用程序,基本上唯一的解决方案是使用一个公平的体系结构(否则你将使用大量的进程/线程使系统陷入困境,并在管理上花费更多的时间而不是实际运行的工作代码).对套接字上的I / O作出反应,并根据哪些套接字表示活动进行适当的操作. 关于在这种情况下遇到的问题的着名文章是“C10k问题”,可从http://www.kegel.com/c10k.html开始 – 它描述了不同的I / O方法,所以尽管有点过时,但它是一个非常好的介绍. 但是在深入跳入类似反应堆的设计之前要小心 – 它们会变得笨拙和复杂,所以看看你是否能够使用提供更好抽象的库/语言(Erlang是我个人最喜欢的,带有协程的语言)喜欢Go也很有用). (编辑:天瑞地安资讯网_瑞安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 如何在Linux中创建/使用LVM
- VirtualBox 6.1.8推出,支持RHEL8.2和CentOS 8.2
- debian – 带iSCSI的ZFS文件系统
- fatal: protocol error: bad line length character: This
- Full GC 和 Minor GC,傻傻分不清楚
- linux – 使用systemd服务单元的Restartamp;RestartSec或使
- 如何在 Ubuntu 20.04 上运用 Let s Encrypt 保护 Nginx
- 可执行文件在linux上删除
- linux – 如何将终端窗格分离到新窗口?
- Linux虚拟化Docker之Docker镜像


