主頁 > 知識庫 > Erlang中的并發(fā)程序簡介

Erlang中的并發(fā)程序簡介

熱門標(biāo)簽:在電子版地圖標(biāo)注要收費嗎 南京電銷外呼系統(tǒng)哪家好 外呼系統(tǒng)會封嗎 萬利達(dá)綜合醫(yī)院地圖標(biāo)注點 電銷機器人 深圳 實體店地圖標(biāo)注怎么標(biāo) 武漢AI電銷機器人 股票配資電銷機器人 地圖標(biāo)注如何弄全套標(biāo)

Erlang中基本的并發(fā)函數(shù)

1)  Pid =spwan(Mod,Func,Args) 創(chuàng)建一個新的進程來執(zhí)行apply(Mod,Func,Args),與調(diào)用進程并列運行,會使用最新的代碼定義模塊。
2)  Pid!Message 向Pid進程異步發(fā)送Message,!為發(fā)送操作符
3)  Receive … end 接收消息

復(fù)制代碼 代碼如下:

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

         aftertime->
                   Expressions
         end.

內(nèi)置函數(shù)erlang:system_info(process_limit)可找出所允許的最大進程數(shù),默認(rèn)為262144.
進程注冊的內(nèi)置函數(shù)有:
register(AnAtom,Pid)用名稱注冊Pid
uregister(AnAtom) 注銷關(guān)聯(lián)注冊
whereis(AnAtom)->Pid|undefined 檢查Pid是否注冊
registered()->[AnAtom::atom()]返回系統(tǒng)里所有注冊進程的列表。
 
并發(fā)程序模板:
復(fù)制代碼 代碼如下:

-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.

每當(dāng)收到消息時會處理它并再次調(diào)用loop(),這一過程稱為尾遞歸,無需消耗堆棧空間可以一直循環(huán)下去。
 
Erlang并發(fā)程序的錯誤處理建立在遠(yuǎn)程監(jiān)測和處理錯誤的基礎(chǔ)上,重點在補救而不是預(yù)防,幾乎沒有防御性代碼,只有在錯誤后清理系統(tǒng)的代碼,即讓其他進程修復(fù)錯誤和任其崩潰。
 
程序在出錯時立即崩潰的優(yōu)點:
1)  不編寫防御性代碼,直接崩潰簡單
2)  別人來修復(fù)
3)  不會使錯誤惡化
4)  第一時間舉旗示意
5)  修復(fù)時不擔(dān)心原因重在清理
6)  簡化了系統(tǒng)架構(gòu)
監(jiān)視和連接類似,但監(jiān)視是單向的,如果被監(jiān)視的進程掛了會向監(jiān)視進程發(fā)一“宕機“消息,而不是退出信號?;惧e誤處理函數(shù)有:
復(fù)制代碼 代碼如下:

-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運行在可信網(wǎng)絡(luò),通常在同一局域網(wǎng)的集群上,并受防火墻保護。基于socket的分布式模型基于TCP/IP不可信網(wǎng)絡(luò).
分布式Erlang的主要問題在于客戶端可以自行決定在服務(wù)器上分裂出多種進程,適合于你擁有全部的機器,并且想在單臺機器上控制他們。lib_chan 模塊讓用戶能夠顯式控制自己的機器分裂出哪些進程。
 
為了在互聯(lián)網(wǎng)上執(zhí)行并發(fā)程序:

1)  確保4369端口對TCP和UDP都開發(fā),該端口保留給epmd(Erlang端口映射守護進程)
2)  選擇1個或一段連續(xù)的端口給分布式erlang使用,確保這些端口開放,例如:

復(fù)制代碼 代碼如下:

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

Rpc提供了許多遠(yuǎn)程調(diào)用服務(wù),global里的函數(shù)可以用來在分布式系統(tǒng)里注冊名稱以及維護一個全連接的網(wǎng)絡(luò)。

Erlang集群就是一組帶有相同cookie的互連節(jié)點。創(chuàng)建cookie的三種方法:
1)  在文件$HOME/.erlang.cookie存放相同的cookie
2)  在Erlang啟動時,可以用 –setcookie,例如

復(fù)制代碼 代碼如下:

$erl  -setcookieABCDEFG2048

3)  內(nèi)置函數(shù)erlang:set_cookie(node(),C)在程序中指定

Erlang通過名為端口的對象與外部程序通信,如果想端口發(fā)送一個消息,這一消息就會被發(fā)往與端口相連的外部程序,來自外部程序的消息會變成來自端口的Erlang消息。創(chuàng)建端口的進程成為端口的相連進程,所有發(fā)往端口的消息都必須標(biāo)明相連進程的PID,所有來自外部程序的消息都會發(fā)往相連進程。

標(biāo)簽:汕頭 泰安 濟寧 濟源 安徽 廣東 臺州 武威

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Erlang中的并發(fā)程序簡介》,本文關(guān)鍵詞  Erlang,中的,并發(fā),程序,簡介,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Erlang中的并發(fā)程序簡介》相關(guān)的同類信息!
  • 本頁收集關(guān)于Erlang中的并發(fā)程序簡介的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章