当前位置: 首页 > 编程笔记 >

Erlang中的OTP简介

谈灵均
2023-03-14
本文向大家介绍Erlang中的OTP简介,包括了Erlang中的OTP简介的使用技巧和注意事项,需要的朋友参考一下

OTP包含了一组库和实现方式,可以构建大规模、容错和分布式的应用程序,包含了许多强大的工具,能够实现H248,SNMP等多种协议,核心概念是OTP行为,可以看作一个用回调函数作为参数的应用程序框架,类似一个J2EE容器。行为负责解决问题的非函数部分,回调函数负责解决函数部分。
 
通过gen_server模块可以实现事物语义和热代码交换,

1)      确定回调模块名
2)      编写接口函数
3)      在回调模块里编写6个必需的回调函数

当服务器崩溃时,需要一种机制来检测并重启它,要用到监测树,即创建一个监控器来管理服务器。监测树有两种:一对一和一对多。


$erl –boot start_sasl


会创建一个运行生产系统的环境,系统架构支持库(SASL,System Administration Support Libriaries)将负责错误记录和过载保护等工作。
 
使用gen_server, gen_supervisor,application等行为,可以构建可靠性为99.9999999的系统。
统一化的erlang消息:

1)  抽象了不同线路协议之间的区别
2)  Erlang消息无需解析,接收进程不必先解析消息再处理,而http服务器就必须解析就收到的所有消息
3)  Erlang消息可以包含任意复杂度的数据类型,而http消息必须被序列化成扁平化才能传输
4)  Erlang消息可以在不同处理器之间传送

常见的第三方库有rebar(https://github.com/basho/rebar)和cowboy(https://githun.com/extend/cowboy)。 Rebar是管理erlang项目的事实标准,用户可以通过rebar创建新项目、编译项目、打包它们,以及把它们与其他项目整合在一起,同时集成了github。Cowboy是一个用erlang编写的高性能web服务器,是嵌入式web的热门实现。另外,库mochiweb2(http://github.com/mochi/mochiweb)的编码和解码方法可以实现json字符串和erlang数据类型的相互转换。
 
Erlang程序在多核CPU上运行

1)  使用大量进程
2)  避免副作用,例如不使用共享式ETS或DETS
3)  避免顺序瓶颈,可以选择pmap代替map
4)  小消息,大计算
5)  用mapreduce使计算并行化
mapreaduce是一个并行高阶函数,定义如下


-specmapreduce(F1,F2,Acc0,L) ->Acc

         F1 = fun(Pid,X) ->void

         F2 = fun(Key,[Value],Acc0) ->Acc

         L = [X]

         Acc = X =term()


Mapreduce 是在并行高阶函数(phofs)模块中定义的。

 类似资料:
  • Erlang/OTP中文手册,英文版 Erlang/OTP 文档地址:http://erldoc.com/doc/R17.1/

  • 在 Erlang/OTP 中有一个基本概念叫监督树。这是一种建立在督程与佣程思想上的进程结构化模型。

  • 本文向大家介绍Erlang在Ubuntu上构建并安装Erlang / OTP,包括了Erlang在Ubuntu上构建并安装Erlang / OTP的使用技巧和注意事项,需要的朋友参考一下 示例 以下示例显示了在Ubuntu上安装Erlang / OTP的两种主要方法。 方法1-预先构建的二进制程序包 只需运行此命令,它将从Erlang Solutions下载并安装最新的稳定的Erlang版本。 方

  • Riak是一个分布式、容错和开放源代码的数据库,它展示了如何使用Erlang/OTP来构建大型可伸缩系统。Riak提供了一些其他数据库中并不常见的特性,比如高可用性、容量和吞吐量的线性伸缩能力等,很大程度上,这是借由Erlang对大规模可伸缩分布式系统的支持实现的。 要开发像Riak这样的系统,Erlang/OTP是一个理想的平台,因为它提供了可以直接利用的节点间通信、消息队列、故障探测和客户-服

  • 我目前正在努力使用erlang的OTP观察者。我的应用程序——gen_server和主管——运行良好,但是当我试图使用观察者来查看进程时,我只能在观察者GUI的“应用程序”选项卡中查看“内核”。 这些是导致节点连接的命令,但仅此而已: ------------------------观察家------------------------ /home/erlang#erl-pa ebin/-snam

  • 本文向大家介绍Erlang中的socket编程简单例子,包括了Erlang中的socket编程简单例子的使用技巧和注意事项,需要的朋友参考一下 Erlang 中gen_tcp 用于编写TCP程序,gen_udp用于编写UDP程序。一个简单的TCP服务器echo示例: Tcp 的echo客户端示例: UDP server示例 UDP client 示例: 注意,因为UDP是不可靠的,一定要设一个超时