#读书笔记# Erlang趣学指南

什么是并发

给并发建模

一段代码:

-module(person).
-export([init/1]).

-module(person).表示这个文件包含用于person模块的代码,应该与文件名一致。

模块名必须以小写字母开头

,技术上说,模块名是一个原子。

-export([init/1]).是一个导出声明,表示模块里哪些函数从模块外部进行调用。类似于其他语言中的public关键字。没有包括在到导出声明里的函数是私有的,无法在模块外调用。

  • init/1表示可导出init函数,这个函数包含一个参数。
  • []是一个列表,用于罗列可导出模块的所有函数。

开始模拟

spawn(ModName, FuncName, [Arg1, Arg2, ..., ArgN])

Erlang运行spawn时,会创建一个新进程,

这个进程不是操作系统的进程,而是一个Erlang系统管理的轻量级进程


当进程创建完毕后,它便开始执行参数所指定的代码。

  • spawn的返回值是一个进程标识符,可以用来与其他创建的进程交互。
  • ModName是包含想要执行代码的模块名。
  • FuncName是模块里的函数名。
  • [Arg1, Arg2, ..., ArgN]是一个参数列表,包含想要执行的函数参数。
  • Erlang里的模块类似于其他语言中的类,而Erlang进程类似于其他语言中的实例对象

发送消息

A想对B说你好,Erlang里会是类似于这么一句话:

B ! {self(), "你好"}.
# Pid ! Msg 语法的意思是,发送消息Msg到Pid。self()的意思是发送消息的进程,即当前进程。

接收消息

B想接收A发送的消息,类似下面的写法:

receive
{From, Message} ->
...
# From会绑定A,Message就是发送的消息内容。
end

并发的好处

  • 性能
  • 可扩展性
  • 容错性
  • 清晰性

并发程序与并行计算机

  • 并发程序是一种用并发语言写的程序,编写并发程序是为了提升性能,可扩展性和容错性。
  • 并发编程语言拥有专门用于编写并发程序的语言结构,这些结构是编程语言的主要部分,在所有操作系统上都有相同表现。
  • 并行计算机是一种有多个处理单元同时运行的计算机。

顺序和并发编程语言

编程语言有人两种:顺序和并发,顺序语言被设计用于编写顺序程序,没有描述并发计算的语言结构。并发语言被设计于编写并发程序,语言本身带有表达并发性的结构。

在Erlang里,并发性是由Erlang虚拟机提供的,非操作系统或外部库。大多数顺序编程语言里,并发性都是以接口形式提供,指向操作系统的内部并发函数。

因为不依赖操作系统或外部库,所以Erlang的并发在所有操作系统下的表现都是一致的。

Erlang速览

Shell

$ erl
Erlang R16B ...
Eshell V5.9 (abort with ^G)
1> 123456 * 223344.
27573156864
  • $是操作系统提示符。
  • erl命令启动了Erlang shell,erlang shell以横幅信息和计数提示符>1作为响应。
  • 表达式末尾必须加句号结束。

=操作符

可以用=绑定一个值,像这样:

2> X = 123.
123
3> X * 2.
246

如果想改变变量的值,奇怪的事就会发生:

4> X = 999.
** exception error: no match of right hand side value 999

变量和原子的语法

进程、模块和编译

在shell里编译并运行 Hello world

在Erlang shell外编译

标签: Erlang, 读书笔记, 技术

添加新评论