Go vs .NET Core 2.1

.NET Core 2.1 正式发布之际,微软团队在博客的中提到了 .NET Core 2.1 中的性能提升。这让我想起了去年 Go 语言 Iris MVC 框架作者做的 Go 与 .NET Core 2.0 之间的性能对比(具体可看https://hackernoon.com/go-vs-net-core-in-terms-of-http-performance-7535a61b67b8 ),当时的 Iris 在各个方面的表现都基本超出 .NET Core 至少 1 倍,测试结果在社区中引发了不小的讨论,事后,微软团队的成员与 Iris 的作者进行了亲切友好的会谈,并就 Web 框架性能调优相关方面展开了深入的讨论。现在 .NET Core 2.1 版本正式发布,让我们来看看现在的 .NET Core 性能到底如何。

跑分仅供参考

测试项目地址:https://github.com/zeekozhu/iris

原文地址:https://hackernoon.com/go-vs-net-core-in-terms-of-http-performance-7535a61b67b8

硬件配置

  • 处理器: Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz 2.50GHz

  • 内存容量: 16.00 GB

软件版本

  • OS: Microsoft Windows [版本号 10 1803 17134.48], 电源计划:“最佳性能”

  • HTTP 跑分工具: https://github.com/codesenberg/bombardier, 最新版本 1.1

  • .NET Core SDK: https://www.microsoft.com/net/core, 最新版本 2.1.300

  • Iris: https://github.com/kataras/iris, 最新版本 10.6.5 使用 go1.10.2-windows/amd64 编译

本次测试分三轮进行。第一轮测试中,服务器只返回简单的纯文本。第二轮测试中,服务器需要响应渲染出来的 HTML 模板。第三轮测试中,服务器都使用低层 API 来处理请求,并响应简单的纯文本。

响应简单文本内容

为了避免特定格式(如,JSONXML)序列化以及编码带来的影响,所以这次测试中仅测试了对简单文本的响应速度与稳定性。为了公平起见,Go 与 .NET Core 都使用了日常开发中最常用的 MVC 模式。

.NET Core MVC

$ cd netcore-mvc
$ dotnet run -c Release
Hosting environment: Production
Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore-mvc
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.
Application is shutting down...
$ bombardier -c 125 -n 5000000 http://localhost:5000/api/values/5
Bombarding http://localhost:5000/api/values/5 with 5000000 request(s) using 125 connection(s)5000000 / 5000000 [================================================================================] 100.00% 2m16s
Done!
Statistics        Avg      Stdev        MaxReqs/sec     36682.65    7344.86  125924.45Latency        3.40ms   449.42us   254.50msHTTP codes:1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0others - 0Throughput:     8.09MB/s

Iris MVC

$ cd iris-mvc
$ go run main.go
Now listening on: http://localhost:5000
Application started. Press CTRL+C to shut down.
$ bombardier -c 125 -n 5000000 http://localhost:5000/api/values/5
Bombarding http://localhost:5000/api/values/5 with 5000000 request(s) using 125 connection(s)5000000 / 5000000 [================================================================================] 100.00% 1m11s
Done!
Statistics        Avg      Stdev        MaxReqs/sec     70416.19   10167.84   89850.59Latency        1.77ms    74.69us    31.50msHTTP codes:1xx - 0, 2xx - 5000000, 3xx - 0, 4xx - 0, 5xx - 0others - 0Throughput:    13.09MB/s

简单文本性能测试结果

  • 完成 5000000 请求 的时间 - 越小越好。

  • Reqs/sec - 越大越好。

  • Latency - 越小越好。

  • Throughput - 越大越好。

.NET Core MVC 程序,使用了 2 分 16 秒完成了测试,平均每秒能够处理:36682.65 个请求,平均的响应延迟在 3.40ms 左右,最大延迟为 254.50ms

Iris MVC 程序,使用了 1 分 11 秒完成了测试,平均每秒能够处理:70416.19 个请求,平均的响应延迟在 1.77ms 左右,最大延迟为 31.50ms

MVC + Templates

接下来就是 MVC 服务端模板渲染性能测试,在这个测试中,服务端程序一共需要处理 1000000 个请求,并响应通过视图引擎渲染出来的 HTML。

.NET Core MVC with Templates

$ cd netcore-mvc-templates
$ dotnet run -c Release
Hosting environment: Production
Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore-mvc-templates
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.
Application is shutting down...
$ bombardier -c 125 -n 1000000 http://localhost:5000
Bombarding http://localhost:5000 with 1000000 request(s) using 125 connection(s)1000000 / 1000000 [=================================================================================] 100.00% 1m18s
Done!
Statistics        Avg      Stdev        MaxReqs/sec     13043.07    4754.11  120734.38Latency        9.74ms     2.07ms   464.00msHTTP codes:1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0others - 0Throughput:    92.25MB/s

Iris MVC with Templates

$ cd iris-mvc-templates
$ go run main.go
Now listening on: http://localhost:5000
Application started. Press CTRL+C to shut down.
$ bombardier -c 125 -n 1000000 http://localhost:5000
Bombarding http://localhost:5000 with 1000000 request(s) using 125 connection(s)1000000 / 1000000 [==================================================================================] 100.00% 37s
Done!
Statistics        Avg      Stdev        MaxReqs/sec     26927.88    4174.31   33129.39Latency        4.64ms   206.76us    34.00msHTTP codes:1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0others - 0Throughput:   194.24MB/s

视图性能测试结果

  • 完成 1000000 请求 的时间 - 越小越好。

  • Reqs/sec - 越大越好。

  • Latency - 越小越好。

  • Throughput - 越大越好。

.NET Core MVC 程序,使用了 1 分 18 秒完成了测试,平均每秒能够处理:13043.07 个请求,平均的响应延迟在 9.74ms 左右,最大延迟为 464.00ms

Iris MVC 程序,使用了 37 秒完成了测试,平均每秒能够处理:33129.39 个请求,平均的响应延迟在 4.64ms 左右,最大延迟为 34.00ms

低层 API 简单文本性能测试

在本次测试中,服务端程序需要处理 1000000 个请求,并返回一个简单的纯文本响应。.NET Core 不再使用 ASP.NET Core MVC,而是直接通过 Kestrel 处理请求,Iris 也会使用底层的 Handlers 来处理请求。

.NET Core (Kestrel)

$ cd netcore
$ dotnet run -c Release
Hosting environment: Production
Content root path: C:\mygopath\src\github.com\kataras\iris\_benchmarks\netcore
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.
$ bombardier -c 125 -n 1000000 http://localhost:5000/api/values/5
Bombarding http://localhost:5000/api/values/5 with 1000000 request(s) using 125 connection(s)1000000 / 1000000 [==================================================================================] 100.00% 17s
Done!
Statistics        Avg      Stdev        MaxReqs/sec     55937.72    4492.32   66770.94Latency        2.23ms   328.65us    87.00msHTTP codes:1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0others - 0Throughput:    10.13MB/s

Iris

$ cd iris
$ go run main.go
Now listening on: http://localhost:5000
Application started. Press CTRL+C to shut down.
$ bombardier -c 125 -n 1000000 http://localhost:5000/api/values/5
Bombarding http://localhost:5000/api/values/5 with 1000000 request(s) using 125 connection(s)1000000 / 1000000 [==================================================================================] 100.00% 12s
Done!
Statistics        Avg      Stdev        MaxReqs/sec     80559.83    6029.77   92301.38Latency        1.55ms   185.02us    34.50msHTTP codes:1xx - 0, 2xx - 1000000, 3xx - 0, 4xx - 0, 5xx - 0others - 0Throughput:    14.98MB/s

低层 API 简单文本性能测试结果

  • 完成 1000000 请求 的时间 - 越小越好。

  • Reqs/sec - 越大越好。

  • Latency - 越小越好。

  • Throughput - 越大越好。

.NET Core MVC 程序,使用了 17 秒完成了测试,平均每秒能够处理:55937.72 个请求,平均的响应延迟在 2.23ms 左右,最大延迟为 87.00ms

Iris MVC 程序,使用了 12 秒完成了测试,平均每秒能够处理:80559.83 个请求,平均的响应延迟在 1.55ms 左右,最大延迟为 34.50ms

总结

尽管微软在发行说明中提到了 .NET Core 2.1 有较大幅度的性能提升,但是在我的测试结果中与去年 Iris 作者运行的测试结果相差并不是很大。如果你认为本文的测试代码有问题,欢迎在评论区指出。

原文地址:https://www.cnblogs.com/JacZhu/p/9120817.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF786E-ALT【网络流,倍增】

正题 题目链接:https://www.luogu.com.cn/problem/CF786E 题目大意 nnn个点的一棵树,mmm个人每个人走一个路径。 给一些人狗或者一些边狗每个人要求要么它自己有狗要么它走的路径上都有狗。 解题思路 考虑最小割,其实就是要么割一个人要么割一整条路径…

HDU6038 - Function

HDU6038 - Function 做法: 展开后有,\(f(i) b_{f(a_i)} b_{b_{f(a_{a_i})}} ... b_{b_{..b_{f(i)}}}\),可以发现当 \(a_i\) 所在的循环节中确定一个时,整个循环都确定了,根据这个式子还可以发现,对于一…

.NET Core TDD 前传: 编写易于测试的代码 -- 依赖项

第1篇: 讲述了如何创造"缝". "缝"(seam)是需要知道的概念.第2篇, 避免在构建对象时写出不易测试的代码.本文是第3篇, 讲述依赖项和迪米特法则.迪米特法则 (Law of Demeter)还是使用建造汽车的例子. 生产汽车的时候需要轮胎, 组装时需要什么型号的轮胎, 就…

【dfs】家族(jzoj 1985)

家族 jzoj 1985 解题思路: 在一个只含空格,‘*’号和小写字母的图上,问有多少个连在一起(上下左右四个方向)的小写字母块 输入样例 4 *zlw**pxh l*zlwk*hx* w*tyy**yyyzzl输出样例 3数据范围 10%的数据&#xf…

51nod1325-两棵树的问题【最大权闭合图,网络流】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId1325 题目大意 两棵树。要求选出一组权值和最大的点使得这两个点集在两棵树上都是连通的。 解题思路 我们枚举一个中间点iii,然后从这个点开始扩展连通块。那么如果这个点作为根的话&#x…

【背包】作业(jzoj 1986)

作业 jzoj 1986 解题思路: ‘光光’在暑假有很多作业,但他不能全部做完,他只有一定的时间,某一项作业没做完(有一点没做完也算),他就会有一个不开心值,现在问不开心值最小是多少 …

HDU5875 - Function

HDU5875 - Function 做法&#xff1a;st表二分的经典题。不能使用数学函数log&#xff0c;否则会tle&#xff0c;需要预处理 #include <bits/stdc.h> #define rep(i,a,b) for(int ia;i<b;i) #define per(i,a,b) for(int ia;i>b;--i) #define mem(a,b) memset(a,b,s…

.Net Core中的日志组件(Logging)

1、介绍Logging组件是微软实现的日志记录组件包括控制台(Console)、调试(Debug)、事件日志(EventLog)和TraceSource&#xff0c;但是没有实现最常用用的文件记录日志功能(可以用其他第三方的如NLog、Log4Net。之前写过NLog使用的文章)。2、默认配置新建.Net Core Web Api项目&a…

51nod1551-集合交易【hall定理,最大权闭合图,网络流】

正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId1551 题目大意 nnn个集合&#xff0c;nnn个物品&#xff0c;每个集合有一些物品&#xff0c;一个价钱。满足任意kkk个集合都有kkk种不同的物品。 要求一个最低的价格来购买集合且购买集合数等于里面不同…

HDU5874 - Friends and Enemies

HDU5874 - Friends and Enemies 题意&#xff1a;m个人&#xff0c;n种颜色的石头&#xff0c;两个人不是朋友就是敌人&#xff0c;朋友之间至少有一个同种颜色的石头&#xff0c;敌人之间不能有相同的石头&#xff0c;问用最多种的石头的情况下&#xff0c;n能否满足要求 做法…

纪中C组模拟赛总结(2019.7.9)

成绩&#xff1a; 注&#xff1a;rankrankrank是有算其他dalaodalaodalao的 rankrankranknamenamenamescorescorescoreT1T1T1T2T2T2T3T3T3T4T4T4111hkyhkyhky400400400100100100100100100100100100100100100303030tjhtjhtjh240240240100100100303030101010100100100696969fyfy…

将 ASP.NET Core 2.0 项目升级至 ASP.NET Core 2.1.3X

阅读文本大概需要 3.3 分钟。在上一篇文章《ASP.Net Core 运行错误 Http Error 502.5 解决办法》的最后有提到说&#xff0c;最推荐的升级办法是从2.0升级到2.1X版本.操作如下项目的例子直接使用https://github.com/52ABP/52ABP.School 作为对象&#xff0c;毕竟他正好是.NET C…

CF55D-Beautiful numbers【数位dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF55D 题目大意 求[l,r][l,r][l,r]中有多少个数使得它可以被它的所有非000位整除。 解题思路 因为这些数的lcmlcmlcm一定是lcm(1,2,3,4,5,6,7,8,9,10)2520lcm(1,2,3,4,5,6,7,8,9,10)2520lcm(1,2,3,4,5,6,7,8,9,10)2520的约数…

【DP】合唱队形(jzoj 1122)

合唱队形 jzoj 1122 题目大意&#xff1a; 有n个人&#xff0c;按一定的顺序站成一排&#xff0c;最少减去多少个人可以使队列以一个人为中心&#xff0c;两边分别递减 输入样例 8 186 186 150 200 160 130 197 220输出样例 4数据范围 对于50&#xff05;的数据&#xf…

HDU5877 - Weak Pair

HDU5877 - Weak Pair 做法&#xff1a;dfs的时候&#xff0c;用树状数组维护当前节点到跟节点的权值树状数组&#xff0c;离散化一下即可&#xff0c;类似统计树上逆序对。此题数据范围好像是假的&#xff0c;节点数开到200000可过。 #include <bits/stdc.h> #define pb …

jzoj5248-[NOIP2017提高A组模拟8.10]花花的聚会【倍增,树形dp】

正题 题目链接:https://gmoj.net/senior/#main/show/5248 题目大意 nnn个点的一棵树&#xff0c;有mmm张票(v,k,w)(v,k,w)(v,k,w)表示可以在点vvv买&#xff0c;可以走kkk步以内&#xff0c;价格为www。 一个时间只能有一个票&#xff0c;每次询问一个点到根节点需要的最少票…

【高精】Gift(jzoj(gz) 1763)

Gift jzoj&#xff08;gz&#xff09; 1763 题目大意&#xff1a; 有9个数&#xff1a;a,b,c……i,计算出2a2b……2hi2^a2^b……2^hi2a2b……2hi 输入样例 1 21 30 0 0 0 0 0 0 2147483647输出样例 3223322629数据范围 40% t<1000 100% t<100000 a,b,c,d,e,f,g,h&…

.net core 多版本如何选择

在讲述.net core多版本之前&#xff0c;我们先理解一下.net core sdk与.net core runtime之前的联系与区别&#xff0c;根据官网的解释我们可以简单地理解为&#xff1a;sdk是在开发过程中进行使用&#xff0c;而runtime是在项目发布后作为运行环境进行安装的&#xff0c;runti…

P3226-[HNOI2012]集合选数【状压dp】

正题 题目链接:https://www.luogu.com.cn/problem/P3226 题目大意 1∼n1\sim n1∼n选出一些组成集合&#xff0c;一个集合里如果有xxx则不能有2x,3x2x,3x2x,3x。求有多少合法集合。 解题思路 我们可以构造一个矩阵 13927…2618…412…8… 这样选择一个位置后它相邻的位置就不…

HDU5120 - Intersection

HDU5120 - Intersection 做法&#xff1a;答案就是\(A1 \cap B1 - A2 \cap B1 - A1 \cap B2 A2 \cap B2\)&#xff0c;圆形面积交码了好久&#xff0c;先把两个圆转到x轴上&#xff0c;大的放到原点&#xff0c;小的放在大圆的左边&#xff0c;计算一下交点坐标&#xff0c;然…