开发serverless,我用官网提供的代码测试了一下,go和rust明显比python和nodejs 有更低的执行时间 和内存用量,是不是从性能上来说 go 或 rust更好?
可能是 web 框架慢了些,也可能是挂载的层慢了,可以选第一个 linux debian9 那个试试。
此答案来自钉钉群“阿里函数计算官网客户"
从性能上来说,Go和Rust确实比Python和Node.js有更低的执行时间和内存用量,但是这并不意味着Go和Rust就一定更好。实际上,在开发Serverless应用时,还需要考虑其他因素,比如开发效率、可维护性、可扩展性等,这些因素也会影响最终的性能。因此,在选择开发语言时,应该根据实际情况来考虑,而不是仅仅从性能上来考虑。
Go 有一个相当不错的 image 标准库模块,以及命令行 flag 解析库。 Python 实现使用了相当重量级的第三方模块Pillow。Go 的标准库更有条理,而且经过深思熟虑,而 Python 的会逐步发展,它们是多年来由许多作者创建的,有许多不同的约定。 用 Go 有可能在没有任何依赖关系的情况下建立一个真正可用的 Web 服务。Python 号称“自带电池(batteries-included)”,感觉Go 做得更好。 Go 的一个常见缺点是它没有用户可实现的泛型类型。它会减缓开发速度。 Go 使用接口和结构,而 Python 使用类。 Go 强烈建议组合而不是继承。 在 Go 中,有些情况下我无法重用代码,不过在 Python 中可以。 Go 是静态类型的,当你编写的代码会导致运行时错误时,编译器 / 源码分析器(linter)会告诉你。Python 源码分析器也可以有一点这样的功能。 在 Python 中,当你试图访问一个可能不存在的方法或属性时,由于语言的动态性,Python 源码分析器无法确切地知道什么方法 / 属性存在,直到运行时。静态定义的接口和结构是唯一在编译时和开发过程中知道什么可用的方法,这使得编译时报错的 Go 比运行时报错的 Python 更可靠。 Go 只有可变函数,类似于 Python 的关键字参数,但不那么有用,因为参数需要是相同的类型。 Python 有异常,而 Go 在可能出错的地方通过从函数返回元组 value, error 来传播错误。Python 允许你在调用栈中的任何位置捕获错误,而不需要你一次又一次地手动将错误传递回去。 Python 有更多的特性,因此有更多的方法来做一些事情,找到最快、最易读或“最聪明”的解决方案可能会很有趣。Go 会积极地阻止你变得“聪明”。我认为,Go 的优势在于它并不聪明。 手动内存管理:Python 和 Go 会帮你捡垃圾。C 允许你乱丢垃圾,但当它踩到你丢的香蕉皮时,它会大发脾气。Rust 会拍你一下,并要求你自己清理干净。 Rust 强烈鼓励函数式的方法:它有 FP 友好的类型系统(类似 Haskell)、不可变类型、闭包,迭代器,模式匹配等,但也允许命令式代码。 Rust 利用枚举类型:Result 返回 Ok(value) 或 Err(error)。这和 Go 的方式更接近,但更明确一些,而且利用了类型系统。 Rust 标准库中也有一些基本的线程特性,看上去比 Python 的更容易使用,Go 似乎仍然有最好的特性。 Python 和 Go 的插件,但相比于其他两种语言,Rust 插件更容易设置,更有用、更一致。 Rust 是一门很大的语言。Python 也有很多特性,Go 和 Python 是两种类似 / 存在竞争关系的语言。
仅比较原生代码的性能,Go 完胜 Python,但许多有速度要求的 Python 库是对速度更快的 C 实现的封装——实际情况比这种天真的比较更复杂。
【回答】
如果开发serverless的话,理论上 Go更合适一些。
但是, 既然serverless可以适配那么多种编程语言, 也就是说, 各个编程语言都有自己的优势。
如果你非常熟悉是Go语言,那么,不用多想,你直接使用Go开发就行了。
如果Go和rust你都不熟悉,那么,相对来说, 你直接学习Go,然后进行serverless开发,更合适。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。