我知道这完全是一个无意义的问题,但由于我对编程技能的文盲,这个问题浮现在我的脑海中。 使用 Cats 和 scalaz,以便我们可以像 Haskell 那样以纯函数式编程方式在 Scala 中进行编码。但为了实现这一目标,我们需要在我们的项目中额外添加这些库。最终,为了使用它们,我们需要用它们的对象和函数来包装我们的代码。它是添加额外代码和依赖项的东西。 我不知道这些是否会在内存中创建更大的对象。 这些都让我思考。所以我的问题是:如果我使用 cats/scalaz ,我会面临任何性能问题,例如更多内存消耗吗? 或者如果我的应用程序需要性能,我应该避免这些吗?
cats 和 scalaz 会给应用程序带来性能开销吗?
绝对可以。
就像任何一行代码都会增加性能开销一样。
所以,如果这是您关心的问题,那么就不要编写任何代码(好吧,实际上,如果我们从未尝试过这一切,世界可能会更简单)。
现在,迪克在外面回答。您应该问的正确问题是:“X 库的开销对我的软件有害吗?”;请记住,这适用于任何库,实际上适用于您编写的任何代码,您选择的任何算法等。 并且,为了回答这个问题,我们之前需要做一些事情。
定义您正在编写的软件必须具备的 SLO。如果没有这些,您所做的任何性能问题/观察都是毫无意义的。如果您不知道某件事对您和您的客户是否有意义,那么速度更快/更慢并不重要。
Fibers
而不是 Threads
这样的架构解决方案,而不是尝试优化小功能。此外,有时更简单和更便宜的解决方案是更好的基础设施).当您发现瓶颈时,您需要制定一些替代方案,实施这些替代方案,不仅对它们进行基准测试,还进行统计假设检验以验证所提出的更改是否值得。当然,还要验证它们是否足以满足 SLO。
而且,请相信我,使用
cats、cats-effect、fs2 等工具将在这方面有所帮助。此外,它们实际上在核心上进行了相当优化,因此您应该适合很多用例。
现在,最大的例外是,如果您知道您正在做的工作将非常受 CPU 和内存限制,那么您几乎可以确定所有这些抽象都会有害。在这些情况下,您甚至可能希望远离,而是用 Rust 之类的语言编写相当低级的代码,这将为您提供解决此类问题的适当工具,并且仍然比普通的安全得多老C.