成都网站建设设计

将想法与焦点和您一起共享

rust和go语言哪个快 rust和go该学哪个

对比Go 语言,Rust 有什么优势和劣势

对于Rust的优势我的体会如下:

创新互联-云计算及IDC服务提供商,涵盖公有云、IDC机房租用、雅安服务器托管、等保安全、私有云建设等企业级互联网基础服务,欢迎咨询:13518219792

* Error Handling机制好太多,用Result封装函数运行结果灵活性大大提高,代码也大大简洁

* 函数式编程支持较好,有Lambda这种东西,使得它写起来甚至有Ruby的感觉

* 效率高,没有了GC和Runtime,速度是没得说的

* 支持范型

* 有宏和编译器插件这些黑客技,语言扩展性较好

* 社区活跃度更高,更强调社区的作用,有[RFC](GitHub - rust-lang/rfcs: RFCs for changes to Rust)。[中文社区](Rust China)也有了

Rust的劣势是:

* 语言特性复杂,对新手就不会那么友好

* 稳定性不够,语言的进化较激进

* 第三方库的成熟度还落后于Go,商业化的应用也还不够

对比 Go 语言,Rust 有什么优势和劣势?

我并没有什么编程的经验,觉得编程实在是太复杂了,不喜欢去研究太多,对这个也不怎么懂,只能说自己是个半吊子,就是所掌握的知识,也是东拼西凑的,朋友和我说点儿,自己去书上看一点儿,只能说根据自己的体验给出一些体会吧。

Rust的优势是:

1、Rust把安全、精确的内存管理作为一切的中心放在首要的位置。

2、Rust同时拥有特别强的控制性和特别强的安全性。

3、Rust语言通过: 优秀的类型系统设计、 严格的编译器静态审查、 配合程序员局部核对、加上少量的运行时校验,保障了内存安全。

4、Rust的语言特别的复杂,导致学习曲线比较陡峭,对于初学者来说难度较大。但学通之后将终生受益。

5、效率高,速度特别的快

6、 支持范型

7、 社区活跃度很高,更加的强调了社区的作用。

8、Rust 有更强的语义,更容易捕获错误的逻辑,编译器直接检查出你代码中的不安全的部分

Rust的劣势是:

1、 语言相对来说比较复杂,对于新手来说,让新手摸不着头脑。

2、还不算太稳定。

其实我觉得什么代码啊编程啊这些东西还是比较适合理工的学生去研究,我一看脑袋就大,完全不明白在讲什么。我大概了解的就是这些,语言的话大家可以多方面的去了解,也不是说有缺点就是不好,看配置看个人吧,每个人习惯不一样,也许有的人用不稳定的还觉得挺好呢,有的人就喜欢比较完美的,在我看来编程这个东西真的是很复杂,会有很多的代码,这些代码弄得我自己头都大了,有的时候还得去恶补一下。

rust/warp 比 go/fasthttp 要快数倍

上周我发现了关于超性能的帖子。它表示 rust tokio/hyper 性能高于 go http。这是意料之中的,但有一条评论与 fasthttp 相比,其中 rust 的表现稍差。

我决定自己执行基准测试。使用以下命令在 AWS r5n.8xlarge实例上执行所有基准测试:

go/fasthttp 代码:

生锈/扭曲代码:

请注意,需要额外的标头来匹配 fasthttp 实现。

初始基准测试结果

去/快速http:

生锈/翘曲:

fasthttp 比 rust 版本高出 10% 左右!

优化 rust 版本

很少有已知的技巧可以使 rust 版本更好地工作。让我们一步一步地应用它们,看看我们能走多远。

启用 LTO

LTO 是一种链接时优化,可减少生成的二进制大小并提高性能。了解有关 LTO 的更多信息。

与初始版本相比,我们获得了 +5% 的收益。

使用 Jemalloc

默认情况下,rust 代码使用 libc 内存分配器,通常不建议将其用于高负载的关键应用程序。有很多替代分配器。根据我的经验,jemalloc 在性能和内存利用率方面是最好的。了解有关使用 jemalloc 的更多信息。

与 LTO 版本相比,我们得到了 +1.8%。

启用不稳定的管道

带有wrk 的Benchmark是一个非常简单的 HTTP/1 小明文测试。这种基准有一些细节。让我们unstable_pipeline在 warp 实例上启用。

与 LTO+jemalloc 版本相比,我们获得了额外的 +3.8%。

太好了,在这一步我们已经超越了 fasthttp!

修复一些 tokio

让我们检查一下火焰图,看看运行代码是否有明显的无效性。我不会发布它,以免叙述过多。

引起我注意的特殊功能是wake0 (见这里)。

该wakers数组是在每个函数调用上创建的,用于收集所有需要通知并实际通知它们的唤醒者。我开始使用这段代码,并意识到减少会NUM_WAKERS提高性能!让我们在这里注意,它是一个数组(不是 vec),它是在堆栈上分配的,所以不会发生分配。性能不足的原因是rust在初始化数组时,会将None值复制到数组的每个槽中。NUM_WAKERS当增加时,这会导致减速。

我们获得了额外的 +2.8%,并且以 3.7% 的成绩超过了 go/fasthttp!

什么做得不好

我尝试了更多技巧,但没有显示出有意义的影响:


当前文章:rust和go语言哪个快 rust和go该学哪个
文章来源:http://chengdu.cdxwcx.cn/article/hgdoeo.html