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性能差异相关推荐

  1. R语言使用caretEnsemble包的caretList函数一次性构建多个机器学习模型、使用lattice包的bwplot函数使用箱图对比多个模型在多个指标上的性能差异

    R语言使用caretEnsemble包的caretList函数一次性构建多个机器学习模型.并使用caret包的resamples函数比较在同一数据集上多个机器学习模型的比较结果.使用lattice包的 ...

  2. Mysql之count(*),count(1),count(field)区别、性能差异

    目录 前言 COUNT(*)与 COUNT(1) MyISAM引擎中的COUNT(*)与 COUNT(1) Innodb引擎中的COUNT(*)与 COUNT(1) 实验 原理 结论 Count(1) ...

  3. MySQL数据库az排序_RDS Mysql Single-AZ和Multi-AZ性能差异

    RDS Mysql Single-AZ和Multi-AZ性能差异 发布时间:2020-07-14 22:56:21 来源:51CTO 阅读:4401 作者:hsbxxl 高可用性,是很多数据库工程师/ ...

  4. DL之DNN优化技术:自定义MultiLayerNet【5*100+ReLU】对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化、He参数初始化)性能差异

    DL之DNN优化技术:自定义MultiLayerNet[5*100+ReLU]对MNIST数据集训练进而比较三种权重初始值(Xavier参数初始化.He参数初始化)性能差异 导读 #思路:观察不同的权 ...

  5. sql in转换为join_同一个SQL语句,为啥性能差异咋就这么大呢?(1分钟系列)

    <数据库允许空值,往往是悲剧的开始>一文通过explain来分析SQL的执行计划,来分析null对索引命中情况的影响,有不少朋友留言,问explain结果中的type字段,ref,ALL等 ...

  6. 剖析 epoll ET/LT 触发方式的性能差异误解(定性分析)

    平时大家使用 epoll 时都知道其事件触发模式有默认的 level-trigger 模式和通过 EPOLLET 启用的 edge-trigger 模式两种.从 epoll 发展历史来看,它刚诞生时只 ...

  7. 从一个真实案例看性能差异问题处理方法论

    墨墨导读:本文来自墨天轮用户"取名浪费我半小时"投稿,个人主页:https://www.modb.pro/u/397063. 数据技术嘉年华,十周年盛大开启,点我立即报名!大会以& ...

  8. 同一个SQL语句,为啥性能差异咋就这么大呢?

    墨墨导读:本文和大家说明常见的type结果及代表的含义,并且通过同一个SQL语句的性能差异,说明建对索引多么重要. explain结果中的type字段代表什么意思? MySQL的官网解释非常简洁,只用 ...

  9. 服务器磁盘IO是什么意思?SATA和固态硬盘的性能差异

    服务器磁盘IO是什么意思?SATA和固态硬盘的性能差异 服务器磁盘IO概念 SATA和固态硬盘概念 固态硬盘(SSD)的优点与不足 一.固态硬盘的优点 A.数据存取速度快 B.经久耐用.防震抗摔 C. ...

最新文章

  1. 破解32位NT6内核系统(vista/win7 8G以上)的内存限制,完美支持4GB至128GB内存,全新教程!
  2. 转贴 CxImage类库使用说明
  3. webpack代理配置打包后接口404_webpack 从零开始
  4. Spring Cloud Gateway 源码解析(4)-- filter
  5. 汇编语言中MOV和OFFSET指令的两个问题?
  6. mysql connection_id 表锁的应用
  7. hdu 4496 D-City 并查集
  8. 10-11-根据文章标题搜索文章
  9. 对于vue的评价:没事情做可以学
  10. 23解析函数的级数表示(二)
  11. latex数学符号加粗_latex的安装与数学公式的书写
  12. beetl html 转义,Beetl解决XSS问题
  13. php pos机刷卡,POS机刷卡的正确使用方法和注意事项
  14. 【中科院】分子生物学-朱玉贤第四版-笔记-第2-4讲 DNA 染色体 DNA复制
  15. Excel数据导入___你hold住么(二)
  16. 老九学堂 学习 C++
  17. html获取当前网页ip和端口,js获取当前访问者的IP地址和所属地市代码
  18. 帮优质粉丝脱单|【英国女】No.33|22岁,硕士,喜欢旅行爱好做饭,消费者心理学...
  19. 配置有误:由于权限不足而无法读取配置文件
  20. up考研资料更新目录

热门文章

  1. redis 实现直播聊天(后台逻辑)
  2. MPI 易懂笔记
  3. 《Cisco IPv6网络实现技术(修订版)》一1.5 IPv5
  4. CXF之七 传输文件
  5. docker-compose(部署微服务+MySQL)
  6. 【O2O领域】外卖订餐APP用户端Axure原型作品(覆盖外卖APP主流功能)
  7. 6年拉力工作经验,学了阿里P8级架构师的7+1+1落地项目,跳槽阿里年薪直接40W+
  8. 智能优化算法:北方苍鹰优化算法-附代码
  9. 初识基于 Web 的可视化编程工具Google Blockly
  10. springboot微服务注册到nacos平台