一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Erlang - Erlang中的并發程序簡介

Erlang中的并發程序簡介

2020-05-28 11:27腳本之家 Erlang

這篇文章主要介紹了Erlang中的并發程序簡介,本文講解了Erlang中基本的并發函數、并發程序模板、程序在出錯時立即崩潰的優點、為了在互聯網上執行并發程序等內容,需要的朋友可以參考下

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(),這一過程稱為尾遞歸,無需消耗堆??臻g可以一直循環下去。
 
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運行在可信網絡,通常在同一局域網的集群上,并受防火墻保護?;趕ocket的分布式模型基于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,所有來自外部程序的消息都會發往相連進程。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美一区二区三区四区五区六区 | 男插女的下面免费视频夜色 | 成年人在线观看视频 | 日本一区免费观看 | www.色婷婷.com| 厨房高h| 亚洲欧美国产在线 | 亚洲 欧美 另类 中文 在线 | 美女舒服好紧太爽了视频 | 国产一区二区视频免费 | 嫩草影院永久在线播放 | 天选之王漫画顾长歌免费阅读 | 久久国产影院 | 清清草在线视频 | 国产精品福利在线观看入口 | 动漫肉在线观看 | 海派甜心完整版在线观看 | 国内在线观看 | 免费国产成人高清视频网站 | 高清欧美videossexo免费 | 日本高清免费不卡在线 | 男人添女人 | 视频一区二区三区在线 | a黄毛片 | 亚洲国产三级在线观看 | 12345国产精品高清在线 | 日本视频在线免费播放 | 99久久精品久久久久久清纯 | 国产拍拍视频一二三四区 | 亚洲毛片免费看 | 日本色资源 | 欧美精品1区| 天堂伊人网 | 嫩草在线视频www免费观看 | 国产精品国产高清国产专区 | 成人福利在线播放 | 免费视频精品一区二区 | 教师波多野结衣在线播放 | 无码中文字幕热热久久 | 亚洲男人的天堂在线 | 男人含玉势出嫁束器 |