加餐|单服务器高性能模式性能对比
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了作者对Linux服务器网络模型的性能测试对比结果,包括iterative、forking、preforked、threaded、prethreaded、poll、epoll等7种模式的实现原理、实现代码、性能对比。作者通过横向对比和纵向转折的方式解读了测试数据,得出了一些重要发现:创建进程的消耗是创建线程的消耗的4倍左右;在并发数较低时,preforked和prethreaded模式的性能相近,甚至有时稍高;当并发数达到8000以上,只有pthreaded和epoll模式能够继续运行,但性能也有下降;epoll在并发数超过10000的时候性能开始下降,但下降比较平稳。此外,作者还提到了C10K问题对性能的影响,以及不同模式在不同应用场景下的适用性。总的来说,本文通过详细的性能测试数据对比,为读者提供了对不同网络模型性能特点的深入理解,并指导了在实际架构设计中选择合适模式的建议。
《从 0 开始学架构》,新⼈⾸单¥68
全部留言(8)
- 最新
- 精选
- 两只狮子华哥,请教一下concurrence列下面的数据是指的绝对并发数还是指的每秒的请求量呢?
作者回复: 并发连接数,每个连接压满,然后计算得到每秒请求数
2021-02-209 - YHKprethread 好强啊。比 poll和select都强,那epoll没出来之前,怎么还有人用多路复用
作者回复: prethread解决不了c10k问题,其实c10k问题出现前,多路复用用的不多
2021-05-264 - leesper我用Go写过一个网络库,得益于Go语言的强大,我对每个网络连接开了三个goroutine,一个负责读,一个负责写,一个负责配合工作者线程执行业务逻辑,但我一直想写一个基于epoll的网络库出来,https://github.com/leesper/tao
作者回复: 自己练手java可以直接参考Doug lee 的Java NIO编程的PPT,里面给个样例。 Go语言这样设计我感觉没有发挥Go的优势,三个goroutine之间的消息传递可能比较耗费性能,我觉得直接用一个goroutine处理一个连接比较好,意见供参考
2021-01-134 - Geek_798202看了老师的分析后,反思自己对技术太浅尝辄止了,只是做到了理解,然后缺少总结和实践,后面希望自己能加强学习,认识到差距
作者回复: 多实践,多问问为什么,你也可以做到的 :)
2023-09-22归属地:广东1 - Join太棒了华仔, 之前看Linux高性能服务器开发中提到Reactor模式,可以没有测试数据支撑,这下可以弥补这个缺失了
作者回复: 找了好久才找到 :)
2022-03-101 - Geek_c25f25神文,都说reactor模式好,但是到底怎么个好还是要有测试数据支撑。老师的分析能力好强大啊,特别是redis,c10k这两个分析真的太精彩了,其他地方看不到这两个情况的分析。
作者回复: 如果有多核服务器测试,效果会更明显 :)
2021-12-011 - FuriousEric老师,请教下,表格中concurrency(并发连接数)这栏,作者是使用什么工具模拟这么多并发连接数的呢?也就是用啥工具测试的能产生这么多concurrency, 一般我做测试,用wrk, connections设置20个左右。但是图中concurrency高达1w+,是怎么模拟出来的?
作者回复: jmeter,ab,loadrunner这些测试工具都可以设定并发数(或者叫线程数),然后在多台机器上启动多个测试工具一起压测就可以达到很大的并发数了。
2022-08-02归属地:广东 - Geek_c25f25从表格中发现另外一个数据,不管并发连接数是多少个,从epoll的数据看,都是2000+一点,也就是这个系统的QPS只能达到2000+。
作者回复: 对的,单核2000已经不错了 :)
2021-12-01