码迷,mamicode.com
首页 > 其他好文 > 详细

Joe Armstrong最喜欢的一段Erlang程序

时间:2020-11-08 16:36:00      阅读:18      评论:0      收藏:0      [点我收藏+]

标签:planet   arc   互联网   self   lis   image   actor   这就是我   十分钟   

Joe Armstrong最喜欢的一段Erlang程序

导读:最近网友又翻出一篇Erlang之父Joe Armstrong生前经典的帖子,并引发了热议,高可用架构翻译如下。

前几天,我收到了来自罗文大学的Dean Galvin的邮件。 Dean在做一个Erlang项目,所以他问“哪个示例程序最能体现Erlang的特性”。

他想要一段很小的代码,以便在十分钟的演讲中完美的展示这门语言。 我想了一会儿...并迅速编写了我最喜欢的程序,这就是“通用服务器”。

这就是我的“通用服务器”代码:

universal_server() ->
    receive
       {become, F} ->
           F()
    end.

代码还是挺容易理解的。 一旦创建了universal_server,它就会等待{become,F}消息,然后有消息到来的时候调用F。

阶乘服务器

阶乘服务器是等待整数并返回整数的阶乘的服务器。代码同样很简单:

factorial_server() ->
    receive
       {From, N} ->
           From ! factorial(N),
           factorial_server()
    end.

factorial(0) -> 1;
factorial(N) -> N * factorial(N-1).

现在万事俱备。

整合代码

我将编写一个很短小的函数来创建通用服务器,该服务器向其发送“become factorial_server”消息,然后向其发送一个整数,等待响应并输出返回值:

test() ->
    Pid = spawn(fun universal_server/0),
    Pid ! {become, fun factorial_server/0},
    Pid ! {self(), 50},
    receive
        X -> X
    end.

所有这些函数都位于模块/code/fav1.erl。

现在我们要做的就是启动一个Erlang shell并运行测试程序

$ erl
1 > c(fav1).
{ok, fav1}
2 > fav1:test().
30414093201713378043612608166064768844377641568960512000000000000

旁白

几年前,当我在SICS时,我可以使用Planet Lab。 Planet Lab是9000台计算机的研究网络。加入Planet Lab很容易,您所要做的就是购买一台标准PC,将其连接到网络,并将其捐赠给Planet Lab组织。将您的机器捐赠给网络后,您可以使用Planet Lab中的所有其他机器作为回报。

Planet Lab是用于分布式应用程序的实际测试平台,目前在562个站点上有1171个节点。

我想用Planet Lab做什么?我没有头绪。我最终要做的是编写一些脚本,以在所有Planet实验室机器上安装空的通用Erlang服务器(非常类似于本文中的代码)-然后,我建立了一个gossip算法,让become消息充斥网络。然后我有了一个空的网络,在几秒钟内它将变成我想要做的任何事情。

大约一年后,我不得不写一篇论文。成为研究人员的缺点之一是为了赚钱必须发表论文,也许论文内容你永远不会感兴趣,但是必须是研究项目期望的内容。

我在Planet Lab上建立了gossip网络,我可以说它变成了任何东西,后来我让它成为了内容分发网络,并使用gossip算法在网络上所有计算机上复制了同一文件,并写了一篇论文描述它。

原文链接:
https://joearms.github.io/published/2013-11-21-My-favorite-erlang-program.html

参考阅读:

  • 在生产环境运行Elasticsearch深度指南
  • Rust Web框架怎么选?研究本文就够了!
  • 1500字节为何成为互联网MTU标准?
  • 解决并发编程之痛的良药--结构化并发编程
  • Hulu如何扩展InfluxDB使其支持每秒百万TPS
  • Clojure 语言在 2020 年的现状

本文作者 Joe Armstrong,由高可用架构翻译。技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。

高可用架构

改变互联网的构建方式

技术图片

Joe Armstrong最喜欢的一段Erlang程序

标签:planet   arc   互联网   self   lis   image   actor   这就是我   十分钟   

原文地址:https://blog.51cto.com/14977574/2546286

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有
迷上了代码!