seastar与go的http性能差异
golang的coroutine好用,但是coroutine本身切换是需要有代价的,主要体现在内存栈的上下文切换。之前看过一个C++的go风格的库,叫libgo, 根据其github主页的benchmark,协程切换速率是要优于go的。但是这篇文章并非要和libgo比较,由于笔者之前接触过scylladb,对seastar这个c++框架念念不忘,下面就来对比一下两者差异
OS:Ubuntu 18.04
go: 1.12
seastar: 18.08 (非dpdk模式)https://github.com/miaomiao3/seastar (从seastar fork出来的可以编译通过的分支)
wrk: 4,1,0
CPU: Ryzen 1700 8core 16 thread
Mem: 16GB 2400MHz
http server单线程模式
- wrk 命令
wrk -t1 -c30 -d10 http://localhost:10000/
-t 用于指定线程数
-c 用于指定并发连接数
seastar: 使用例程apps/httpd, 指定-c 1参数
golang 测试代码:
package mainimport ("fmt""github.com/julienschmidt/httprouter""log""net/http""runtime"
)func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {fmt.Fprint(w, "Welcome!\n")
}
func main() {router := httprouter.New()runtime.GOMAXPROCS(1)router.GET("/", Index)log.Fatal(http.ListenAndServe(":8082", router))
}
下面是qps比较:
wrk 并发连接 | 30 | 50 | 100 |
---|---|---|---|
seastar 1thread | 105716 | 107852 | 110265 |
golang 1thread | 55106 | 55235 | 53679 |
http server 2线程模式
- wrk 命令
wrk -t1 -c30 -d10 http://localhost:10000/
-t 用于指定线程数
-c 用于指定并发连接数
seastar: 使用例程apps/httpd, 指定-c 2参数
golang 测试代码:
package mainimport ("fmt""github.com/julienschmidt/httprouter""log""net/http""runtime"
)func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {fmt.Fprint(w, "Welcome!\n")
}
func main() {router := httprouter.New()runtime.GOMAXPROCS(2)router.GET("/", Index)log.Fatal(http.ListenAndServe(":8082", router))
}
下面是qps比较:
wrk 并发连接 | 30 | 50 | 100 |
---|---|---|---|
seastar 2thread | 167313 | 170687 | 171913 |
golang 2thread | 92529 | 95436 | 92773 |
小结
上面只是一个简单的测试,足以看到seastar的威力,性能接近go的两倍。对于http api服务,seastar的性能基本无敌,所以阿里的x-deeplearning推荐框架用了seastar来做参数服务器的后端框架(ps: 但是x-deeplearning用的blaze推理后端框架是libevent, 这操作就有点昏了~~)但是开发效率不如go。go的性能虽然稍微差一点,但是胜在开发效率优于c++。由于实际开发的时候,网络栈的处理延时远小于rpc/dbquery的等待时间,从实用的角度来看,go其实还是很棒的。
seastar与go的http性能差异相关推荐
- R语言使用caretEnsemble包的caretList函数一次性构建多个机器学习模型、使用lattice包的bwplot函数使用箱图对比多个模型在多个指标上的性能差异
R语言使用caretEnsemble包的caretList函数一次性构建多个机器学习模型.并使用caret包的resamples函数比较在同一数据集上多个机器学习模型的比较结果.使用lattice包的 ...
- Mysql之count(*),count(1),count(field)区别、性能差异
目录 前言 COUNT(*)与 COUNT(1) MyISAM引擎中的COUNT(*)与 COUNT(1) Innodb引擎中的COUNT(*)与 COUNT(1) 实验 原理 结论 Count(1) ...
- MySQL数据库az排序_RDS Mysql Single-AZ和Multi-AZ性能差异
RDS Mysql Single-AZ和Multi-AZ性能差异 发布时间:2020-07-14 22:56:21 来源:51CTO 阅读:4401 作者:hsbxxl 高可用性,是很多数据库工程师/ ...
- DL之DNN优化技术:自定义MultiLayerNet【5*100+ReLU】对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化、He参数初始化)性能差异
DL之DNN优化技术:自定义MultiLayerNet[5*100+ReLU]对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化.He参数初始化)性能差异 导读 #思路:观察不同的权 ...
- sql in转换为join_同一个SQL语句,为啥性能差异咋就这么大呢?(1分钟系列)
<数据库允许空值,往往是悲剧的开始>一文通过explain来分析SQL的执行计划,来分析null对索引命中情况的影响,有不少朋友留言,问explain结果中的type字段,ref,ALL等 ...
- 剖析 epoll ET/LT 触发方式的性能差异误解(定性分析)
平时大家使用 epoll 时都知道其事件触发模式有默认的 level-trigger 模式和通过 EPOLLET 启用的 edge-trigger 模式两种.从 epoll 发展历史来看,它刚诞生时只 ...
- 从一个真实案例看性能差异问题处理方法论
墨墨导读:本文来自墨天轮用户"取名浪费我半小时"投稿,个人主页:https://www.modb.pro/u/397063. 数据技术嘉年华,十周年盛大开启,点我立即报名!大会以& ...
- 同一个SQL语句,为啥性能差异咋就这么大呢?
墨墨导读:本文和大家说明常见的type结果及代表的含义,并且通过同一个SQL语句的性能差异,说明建对索引多么重要. explain结果中的type字段代表什么意思? MySQL的官网解释非常简洁,只用 ...
- 服务器磁盘IO是什么意思?SATA和固态硬盘的性能差异
服务器磁盘IO是什么意思?SATA和固态硬盘的性能差异 服务器磁盘IO概念 SATA和固态硬盘概念 固态硬盘(SSD)的优点与不足 一.固态硬盘的优点 A.数据存取速度快 B.经久耐用.防震抗摔 C. ...
最新文章
- 破解32位NT6内核系统(vista/win7 8G以上)的内存限制,完美支持4GB至128GB内存,全新教程!
- 转贴 CxImage类库使用说明
- webpack代理配置打包后接口404_webpack 从零开始
- Spring Cloud Gateway 源码解析(4)-- filter
- 汇编语言中MOV和OFFSET指令的两个问题?
- mysql connection_id 表锁的应用
- hdu 4496 D-City 并查集
- 10-11-根据文章标题搜索文章
- 对于vue的评价:没事情做可以学
- 23解析函数的级数表示(二)
- latex数学符号加粗_latex的安装与数学公式的书写
- beetl html 转义,Beetl解决XSS问题
- php pos机刷卡,POS机刷卡的正确使用方法和注意事项
- 【中科院】分子生物学-朱玉贤第四版-笔记-第2-4讲 DNA 染色体 DNA复制
- Excel数据导入___你hold住么(二)
- 老九学堂 学习 C++
- html获取当前网页ip和端口,js获取当前访问者的IP地址和所属地市代码
- 帮优质粉丝脱单|【英国女】No.33|22岁,硕士,喜欢旅行爱好做饭,消费者心理学...
- 配置有误:由于权限不足而无法读取配置文件
- up考研资料更新目录
热门文章
- redis 实现直播聊天(后台逻辑)
- MPI 易懂笔记
- 《Cisco IPv6网络实现技术(修订版)》一1.5 IPv5
- CXF之七 传输文件
- docker-compose(部署微服务+MySQL)
- 【O2O领域】外卖订餐APP用户端Axure原型作品(覆盖外卖APP主流功能)
- 6年拉力工作经验,学了阿里P8级架构师的7+1+1落地项目,跳槽阿里年薪直接40W+
- 智能优化算法:北方苍鹰优化算法-附代码
- 初识基于 Web 的可视化编程工具Google Blockly
- springboot微服务注册到nacos平台