博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Erlang程序设计》——笔记
阅读量:4206 次
发布时间:2019-05-26

本文共 1222 字,大约阅读时间需要 4 分钟。

语法:

    1.模式匹配:=表示一个模式匹配操作。Lhs=Rhs实际上是这样一个过程,对右端求值(Rhs),然后将结果与左端(Lhs)进行模式匹配。

    2.分号:

    逗号(,)用来分隔函数调用,数据构造器以及模式中的参数。

    句号(.)(后跟一个空白符号)用来在shell中分隔完整的函数和表达式。

    分号(;)用来分隔字句。如分段的函数定义,case语句,if语句,try...catch语句以及receive表达式。

原理:

     1.Erlang采用消息模型,进程之间不共享任何数据,完全避免了引入锁的必要。对于多核而言,完全无锁。

     2.COP(面向并发编程):进程+消息的模型来建模现实世界中多人协作的场景。一个进程表示一个人,人与人之间并不存在任何共享的内存,彼此之间的协作完全通过消息交互来完成。

     3.Erlang工作机制:

  • Erlang程序由成百上千个进程组成,这些进程可以相互发消息。
  • 进程能否收到和理解这些消息是不确定的。如果你想知道一个消息是否被对方收到和理解,那么必须向这个进程发消息咨询并等待回应。
  • 两个进程可以相互链接。如果其中一个进程消亡,那么另外一个进程就会收到一条消息,指明第一个进程消亡的原因。 
特点:
    Erlang中可以使用一种叫做二进制(
binary)数据的结构来存储大量的原始数据。相对于列表或元组,二进制类型更加节省内存,而且运行时系统也对此进行了优化,对二进制的输入输出更加高效。
    Erlang里,
进程属于程序语言而非操作系统。
  •  创建和销毁进程非常迅速。
  •  在两个进程间收发消息非常迅捷。
  • 进程在所有的操作系统上行为相同。
  • 可以创建大量进程。
  • 进程之间不共享任何数据,彼此完全独立。
  • 进程间交互的唯一方法就是通过消息传递。  
客户端/服务端:
    send其实并非是把消息传递到一个进程去,而是把一个消息发送到这个进程的邮箱中去。同理receive则是在试图把一条消息从进程邮箱中删除。Erlang的每一个进程都有与之对应的邮箱。当向进程发消息时,消息就被送入邮箱之中。当系统对receive语句进行求值时,就是对进程邮箱进行检查的唯一机会。
尾递归:
    例子:
loop() ->	receive		{From,{rectangle,Width,Ht}} ->			From ! {self(),Width * Ht},			loop();        {From,{circle,R}} ->			From ! {self(),3.14 * R * R}, 			loop();		{From,Other} ->			From ! {self(),{error, Other}},			loop()    end.
    编译尾递归的函数可以使在一系列语句最后的一个函数调用,可以被替换为一个简单的跳转指令,指向被调用函数的开头。这就意味着一个尾递归的函数可以无限而不需要消耗栈空间。
参考资料:
《Erlang程序设计》。

转载地址:http://ypqli.baihongyu.com/

你可能感兴趣的文章
JAVA实现文件树
查看>>
linux -8 Linux磁盘与文件系统的管理
查看>>
linux 9 -文件系统的压缩与打包 -dump
查看>>
PHP在变量前面加&是什么意思?
查看>>
ebay api - GetUserDisputes 函数
查看>>
ebay api GetMyMessages 函数
查看>>
php加速器 - zendopcache
查看>>
手动12 - 安装php加速器 Zend OPcache
查看>>
set theme -yii2
查看>>
yii2 - 模块(modules)的view 映射到theme里面
查看>>
yii2 - controller
查看>>
yii2 - 增加actions
查看>>
网站加载代码
查看>>
php图像处理函数大全(缩放、剪裁、缩放、翻转、旋转、透明、锐化的实例总结)
查看>>
magento url中 uenc 一坨编码 base64
查看>>
强大的jQuery焦点图无缝滚动走马灯特效插件cxScroll
查看>>
Yii2.0 数据库查询
查看>>
yii2 db 操作
查看>>
mongodb group 有条件的过滤组合个数。
查看>>
yii2 用命令行操作web下的controller
查看>>