分享好友 编程语言首页 频道列表

Erlang中的并发程序简介

Erlang  2015-06-30 10:170

Erlang中基本的并发函数

1)  Pid =spwan(Mod,Func,Args) 创建一个新的进程来执行apply(Mod,Func,Args),与调用进程并列运行,会使用最新的代码定义模块。
2)  Pid!Message 向Pid进程异步发送Message,!为发送操作符
3)  Receive … end 接收消息

复制代码 代码如下:

 receive
           Pattern1[when Guard1]-> Expression1;
           Pattern2[whenGuard2]->Expression2;

         aftertime->
                   Expressions
         end.

内置函数erlang:system_info(process_limit)可找出所允许的最大进程数,默认为262144.
进程注册的内置函数有:
register(AnAtom,Pid)用名称注册Pid
uregister(AnAtom) 注销关联注册
whereis(AnAtom)->Pid|undefined 检查Pid是否注册
registered()->[AnAtom::atom()]返回系统里所有注册进程的列表。
 
并发程序模板:
复制代码 代码如下:

-module(ctemplate).
-compile(export_all).
 
start() ->
         Spwan(MODULE,loop,[]).
 
rpc(Pid,Request) ->
         Pid! {self(),Request},
         receive
                   {Pid,Respone}->
                            Response
         end.
 
loop(X) ->
         receive
                   Any->
                            Io:format(“Received:~p ~n”, [Any]),
                            loop(X)
         end.

每当收到消息时会处理它并再次调用loop(),这一过程称为尾递归,无需消耗堆栈空间可以一直循环下去。
 
Erlang并发程序的错误处理建立在远程监测和处理错误的基础上,重点在补救而不是预防,几乎没有防御性代码,只有在错误后清理系统的代码,即让其他进程修复错误和任其崩溃。
 
程序在出错时立即崩溃的优点:
1)  不编写防御性代码,直接崩溃简单
2)  别人来修复
3)  不会使错误恶化
4)  第一时间举旗示意
5)  修复时不担心原因重在清理
6)  简化了系统架构
监视和连接类似,但监视是单向的,如果被监视的进程挂了会向监视进程发一“宕机“消息,而不是退出信号。基本错误处理函数有:
复制代码 代码如下:

-spec spwan_link(Fun) ->Pid
-spec spwan_monitor(Fun)-> {Pid,Ref}
-spec process_flag(trap_exit,true)
-spec link(Pid) ->true
-spec unlink(Pid) -> true
-spec erlang:monitor(process,Item) ->Ref
-spec exit(Why) -> none()

分布式模型:分布式erlang 和基于socket的分布式模型。分布式erlang运行在可信网络,通常在同一局域网的集群上,并受防火墙保护。基于socket的分布式模型基于TCP/IP不可信网络.
分布式Erlang的主要问题在于客户端可以自行决定在服务器上分裂出多种进程,适合于你拥有全部的机器,并且想在单台机器上控制他们。lib_chan 模块让用户能够显式控制自己的机器分裂出哪些进程。
 
为了在互联网上执行并发程序:

1)  确保4369端口对TCP和UDP都开发,该端口保留给epmd(Erlang端口映射守护进程)
2)  选择1个或一段连续的端口给分布式erlang使用,确保这些端口开放,例如:

复制代码 代码如下:

$erl  -name …-setcookie …  -kernelinet_dist_listen_min Min \
           Inet_dist_listen_maxMax

Rpc提供了许多远程调用服务,global里的函数可以用来在分布式系统里注册名称以及维护一个全连接的网络。

Erlang集群就是一组带有相同cookie的互连节点。创建cookie的三种方法:
1)  在文件$HOME/.erlang.cookie存放相同的cookie
2)  在Erlang启动时,可以用 –setcookie,例如

复制代码 代码如下:

$erl  -setcookieABCDEFG2048

3)  内置函数erlang:set_cookie(node(),C)在程序中指定

Erlang通过名为端口的对象与外部程序通信,如果想端口发送一个消息,这一消息就会被发往与端口相连的外部程序,来自外部程序的消息会变成来自端口的Erlang消息。创建端口的进程成为端口的相连进程,所有发往端口的消息都必须标明相连进程的PID,所有来自外部程序的消息都会发往相连进程。

查看更多关于【Erlang】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Erlang和Ruby的Socket通讯
server.erl Java代码 -module(server).  -export([start/0,start/1,process/1]).  -define(defPort, 8888).    start() - start(?defPort).    start(Port) -    case gen_tcp:listen(Port, [binary, {packet, 0}, {active, fals

0评论2023-02-09782

github上的Lua in Erlang
https://github.com/rvirding/luerl

0评论2023-02-08449

Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
如果要比较两个数,如果两个数之间是不同的类型,比如float和int那么,==操作会首先把两个数字转换成相同的相同类型

0评论2015-11-0948

php实现与erlang的二进制通讯实例解析
这篇文章主要介绍了php实现与erlang的二进制通讯实例解析,需要的朋友可以参考下

0评论2015-09-1795

Erlang中的匹配模式总结
这篇文章主要介绍了Erlang中的匹配模式总结,本文讲解了赋值时匹配、流程控制中的匹配、消息传递匹配等内容,需要的朋友可以参考下

0评论2015-06-3060

Erlang并发编程介绍
这篇文章主要介绍了Erlang并发编程介绍,本文讲解了进程的创建 、进程间通信、超时设置以及给出代码实例,需要的朋友可以参考下

0评论2015-06-30142

ErlangIO编程之文件目录操作常用方法小结
这篇文章主要介绍了Erlang IO编程之文件目录操作常用方法小结,本文讲解了常用的文件操作如打开文件、读取文件、写入文件、删除文件等,需要的朋友可以参考下

0评论2015-06-3062

Erlang语法学习笔记:变量、原子、元组、列表、字符串
这篇文章主要介绍了Erlang语法学习笔记:变量、原子、元组、列表、字符串,本文简明总结了这5种类型的相关知识,需要的朋友可以参考下

0评论2015-06-3071

Erlang中的函数与流程控制介绍
这篇文章主要介绍了Erlang中的函数与流程控制介绍,本文先是讲解了函数的一些知识,然后讲解了case语句和if语句及算术表达式等内容,需要的朋友可以参考下

0评论2015-06-30126

Erlang中3种生成随机数的方法
这篇文章主要介绍了Erlang中3种生成随机数的方法,它们分别是random:uniform()、erlang:now()、crypto:strong_rand_bytes(N),需要的朋友可以参考下

0评论2015-06-30111

Erlang中执行linux命令的两种方法
这篇文章主要介绍了Erlang中执行linux命令的两种方法,本文着重讲解了erlang:open_port的使用,需要的朋友可以参考下

0评论2015-06-30107

Erlang实现的百度云推送Android服务端实例
这篇文章主要介绍了Erlang实现的百度云推送Android服务端实例,本文先是讲解了实现步骤,然后给出实现代码,需要的朋友可以参考下

0评论2015-06-3040

Erlang的一些编程技巧分享
这篇文章主要介绍了Erlang的一些编程技巧分享,本文是是实际编程中的个人总结,需要的朋友可以参考下

0评论2015-06-3090

CentOS6.5源码安装Erlang教程
这篇文章主要介绍了CentOS 6.5源码安装Erlang教程,本文讲解了源码编译安装的过程和遇到的一些错误处理方法,需要的朋友可以参考下

0评论2015-06-30104

Erlang项目内存泄漏分析方法
这篇文章主要介绍了Erlang项目内存泄漏分析方法,本文讲解了分析方法、分析流程并找到问题原因和解决方法,需要的朋友可以参考下

0评论2015-06-30116

Erlang程序设计(第2版)读书笔记:Erlang安装和基础语法
这篇文章主要介绍了Erlang程序设计(第2版)读书笔记:Erlang安装和基础语法,需要的朋友可以参考下

0评论2015-06-3072

Erlang中的注册进程使用实例
这篇文章主要介绍了Erlang中的注册进程使用实例,本文给出正常进程通信实例和使用使用注册进程通信实例,需要的朋友可以参考下

0评论2015-06-30142

Erlang分布式节点中的注册进程使用实例
这篇文章主要介绍了Erlang分布式节点中的注册进程使用实例,本文直接给出实例代码,需要的朋友可以参考下

0评论2015-06-3055

Erlang中的映射组Map详细介绍
这篇文章主要介绍了Erlang中的映射组Map详细介绍,本文讲解了创建映射组、更新映射组、两种操作符的区别、映射的增加、删除、获取等内容,需要的朋友可以参考下

0评论2015-06-3074

Erlang初学:Erlang的一些特点和个人理解总结
这篇文章主要介绍了Erlang初学:Erlang的一些特点和个人理解总结,本文总结了函数式编程、一切都是常量、轻量进程、进程端口映射及典型缺点等内容,需要的朋友可以参考下

0评论2015-06-3076

更多推荐