首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无状态编程的优点?

无状态编程的优点?
EN

Stack Overflow用户
提问于 2009-05-10 02:09:53
回答 5查看 63.6K关注 0票数 148

我最近一直在学习函数式编程(特别是Haskell,但我也学过关于Lisp和Erlang的教程)。虽然我发现这些概念非常有启发性,但我仍然看不到“无副作用”概念的实际一面。它的实际优势是什么?我试着用函数式思维来思考,但有些情况看起来过于复杂,没有能力以一种简单的方式保存状态(我不认为Haskell的monads“容易”)。

是否值得继续深入学习Haskell (或另一种纯函数式语言)?函数式或无状态编程实际上比过程性编程更有效率吗?我以后会继续使用Haskell或另一种函数式语言吗?或者我应该只为了理解而学习它?

我更关心的是工作效率,而不是性能。所以我主要问的是,在函数式语言中,我是否会比过程语言/面向对象语言/其他语言更有效率。

EN

回答 5

Stack Overflow用户

发布于 2009-05-10 02:31:04

无状态函数的一个优点是它们允许预先计算或缓存函数的返回值。甚至一些C编译器也允许您显式地将函数标记为无状态,以提高它们的可优化性。正如其他许多人所指出的,无状态函数更容易并行化。

但效率并不是唯一的关注点。纯函数更容易测试和调试,因为任何影响它的东西都是显式声明的。当用函数式语言编程时,人们养成了让尽可能少的函数“脏”的习惯(通过I/O等)。尽可能的。以这种方式分离出有状态的东西是设计程序的好方法,即使是在非函数式语言中也是如此。

函数式语言可能需要一段时间才能“理解”,并且很难向没有经历过该过程的人解释。但大多数坚持了足够长时间的人最终意识到,即使他们最终并没有太多地使用函数式语言,这种小题大做也是值得的。

票数 8
EN

Stack Overflow用户

发布于 2009-05-10 02:12:40

在没有状态的情况下,很容易实现代码的自动并行化(因为CPU的内核越来越多,这一点非常重要)。

票数 7
EN

Stack Overflow用户

发布于 2013-08-22 20:47:10

当你开始有更高的流量时,无状态web应用程序是必不可少的。

例如,出于安全原因,您可能不希望将大量用户数据存储在客户端。在这种情况下,您需要将其存储在服务器端。您可以使用web应用程序的默认会话,但如果您有多个应用程序实例,则需要确保每个用户始终指向相同的实例。

负载均衡器通常具有“粘性会话”的能力,其中负载均衡器如何知道将用户请求发送到哪个服务器。但这并不理想,例如,这意味着每次您重新启动web应用程序时,所有连接的用户都将丢失其会话。

一种更好的方法是将会话存储在web服务器后面的某种数据存储中,现在有很多很棒的nosql产品可用于此(redis、mongo、elasticsearch、memcached)。这样,web服务器是无状态的,但您仍然拥有状态服务器端,并且可以通过选择正确的数据存储设置来管理此状态的可用性。这些数据存储通常具有很大的冗余性,因此几乎总是可以在不影响用户的情况下对web应用程序甚至数据存储进行更改。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/844536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档