erlang与PHP,基于Erlang的并发程序简要

Erlang中基本的并发函数

1)  Pid =spwan(Mod,Func,Args) 创建1个新的进程来履行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(),这1进程称为尾递归,无需消耗堆栈空间可以1直循环下去。

Erlang并发程序的毛病处理建立在远程监测和处理毛病的基础上,重点在补救而不是预防,几近没有防御性代码,只有在毛病后清算系统的代码,即让其他进程修复毛病和任其崩溃。

程序在出错时立即崩溃的优点:

1)  不编写防御性代码,直接崩溃简单

2)  他人来修复

3)  不会使毛病恶化

4)  第1时间举旗示意

5)  修复时不担心缘由重在清算

6)  简化了系统架构

监视和连接类似,但监视是单向的,如果被监视的进程挂了会向监视进程发1“宕机“消息,而不是退出信号。基本毛病处理函数有:

-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运行在可信网络,通常在同1局域网的集群上,并受防火墙保护。基于socket的散布式模型基于TCP/IP不可信网络.

散布式Erlang的主要问题在于客户端可以自行决定在服务器上分裂出多种进程,合适于你具有全部的机器,并且想在单台机器上控制他们。lib_chan 模块让用户能够显式控制自己的机器分裂出哪些进程。

为了在互联网上履行并发程序:

1)  确保4369端口对TCP和UDP都开发,该端口保存给epmd(Erlang端口映照守护进程)

2)  选择1个或1段连续的端口给散布式erlang使用,确保这些端口开放,例如:

$erl  -name …-setcookie …  -kernelinet_dist_listen_min Min

Inet_dist_listen_maxMax

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

Erlang集群就是1组带有相同cookie的互连节点。创建cookie的3种方法:

1)  在文件$HOME/.erlang.cookie寄存相同的cookie

2)  在Erlang启动时,可以用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值