erlang receive 理解和幾個簡單測試?yán)?/h1>

關(guān)于receive的理解实牡,總算理解到了诗祸,相關(guān)見erlang面試題中receive的理解缎岗。
下面給出三個例子
第一個例子來實現(xiàn):

  • 清空郵箱一個消息
  • 清空郵箱一個指定消息
  • 清空郵箱所有消息

來證明

  • receive 只會遍歷郵箱一次粪躬;下一次遍歷瑰排,是在受到新消息的時候
  • 遍歷郵箱的時候捉貌,匹配到一個支鸡,立刻結(jié)束匹配的過程,不回繼續(xù)進(jìn)行
  • 不加after語句的話趁窃,receive 遍歷郵箱完畢苍匆,如果沒有匹配到,就會阻塞在receive這里棚菊;如果匹配到了浸踩,就會執(zhí)行receive end后面的代碼塊;

第二個例子是實現(xiàn)消息先后順序接受的實現(xiàn)统求,即:
只能處理消息'a'后检碗,才能開始處理消息'b';
如果消息'b'先到据块,那么不會處理

第三個例子是實現(xiàn)消息的優(yōu)先級的接受,來自
《learn you some erlang for great good》

例子1:

%%%-------------------------------------------------------------------
%%% @author mohe
%%% @copyright (C) 2016, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 02. 九月 2016 下午3:07
%%%-------------------------------------------------------------------
-module(test).
-author("mohe").
%% API
-compile(export_all).
init() ->  %%初始化
  Pid = spawn(fun() -> loop() end),
  register(test, Pid).
loop() -> %%主循環(huán)
  io:format("loop in"),
  receive
    ok ->
      io:format("receive ok,begin process"),
      io:format("receive ok,begin end"),
      loop();
    'flush' ->
      flush(),
      loop();
    {'flush', Msg} ->
      flush(Msg),
      loop();
    'flush_all' ->
      flush_all()
  end.
flush() ->  %%清除一個消息
  receive
    Msg ->
      io:format("flush:~p", [Msg])
  after 0 ->
    ok
  end.
flush(Msg) ->  %%清除一個指定消息
  receive
    Msg ->
      io:format("flush:~p", [Msg])
  after 0 ->
    ok
  end.
flush_all() ->    %%清除所有的消息
  receive
    Msg ->
      io:format("flush:~p", [Msg]),
      flush_all()
  after 0 ->
    ok
  end.

運行過程
<pre>
test:init(). //初始化
test!ok1. //發(fā)送'ok1'消息
test!ok2. //發(fā)送'ok2'消息
test!ok3. //發(fā)送'ok3'消息
test!ok1. //發(fā)送'ok1'消息
erlang:process_info(whereis(test),messages). //查看郵箱結(jié)果折剃,結(jié)果為:{messages,[ok1,ok2,ok3,ok1]}
//清空郵箱一個消息
test!flush.
erlang:process_info(whereis(test),messages). //查看郵箱結(jié)果另假,結(jié)果為:{messages,[ok2,ok3,ok1]},
證明郵箱消息順序是按序到達(dá)的

// 清空郵箱指定消息
test!ok1. //發(fā)送'ok1'消息
erlang:process_info(whereis(test),messages).

{messages,[ok2,ok3,ok1,ok1]}
test!{flush,'ok1'}.
erlang:process_info(whereis(test),messages).
{messages,[ok2,ok3,ok1]
說明只會遇到匹配成功后,立刻停止匹配過程怕犁,
因為匹配前有兩個'ok1'边篮,匹配后,還剩下一個'ok1'
</pre>

例子2

receive
  'a' ->
    io:format("receive and process msg:~")
    receive
       'b' ->
          io:format("receive and process msg:~")
    end
end.

例子3

-module(multiproc).
important() ->
receive
{Priority, Message} when Priority > 10 ->
[Message | important()]
after 0 ->
normal()
end.
 
normal() ->
receive
{_, Message} ->
[Message | normal()]
after 0 ->
[]
end.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末奏甫,一起剝皮案震驚了整個濱河市戈轿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌阵子,老刑警劉巖思杯,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挠进,居然都是意外死亡色乾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門领突,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暖璧,“玉大人,你說我怎么就攤上這事君旦∑嶙玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵于宙,是天一觀的道長。 經(jīng)常有香客問我悍汛,道長捞魁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任离咐,我火速辦了婚禮谱俭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宵蛀。我一直安慰自己昆著,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布术陶。 她就那樣靜靜地躺著凑懂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梧宫。 梳的紋絲不亂的頭發(fā)上接谨,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天摆碉,我揣著相機與錄音,去河邊找鬼脓豪。 笑死巷帝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扫夜。 我是一名探鬼主播楞泼,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼笤闯!你這毒婦竟也來了堕阔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤望侈,失蹤者是張志新(化名)和其女友劉穎印蔬,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脱衙,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡侥猬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捐韩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片退唠。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖荤胁,靈堂內(nèi)的尸體忽然破棺而出瞧预,到底是詐尸還是另有隱情,我是刑警寧澤仅政,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布垢油,位于F島的核電站,受9級特大地震影響圆丹,放射性物質(zhì)發(fā)生泄漏滩愁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一辫封、第九天 我趴在偏房一處隱蔽的房頂上張望硝枉。 院中可真熱鬧,春花似錦倦微、人聲如沸妻味。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽责球。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棕诵,已是汗流浹背裁良。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留校套,地道東北人价脾。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像笛匙,于是被迫代替她去往敵國和親侨把。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理妹孙,服務(wù)發(fā)現(xiàn)总珠,斷路器睦授,智...
    卡卡羅2017閱讀 134,662評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,167評論 25 707
  • 世界是并行的志电,Erlang程序反應(yīng)了我們思考和交流的方式彻消,人作為個體通過發(fā)送消息進(jìn)行交流,如果有人死亡嚣崭,其他人會注...
    abel_cao閱讀 2,765評論 1 4
  • 今天是周日笨触,昨天和今天發(fā)生的兩件小事讓槽點君突然想上來更新一下,關(guān)于個人發(fā)展戰(zhàn)略最新版本的一個雛形想法雹舀。 兩件小事...
    槽點君Ezra閱讀 172評論 1 1
  • 徐志摩不是好老公说榆?那是對于張幼儀虚吟。 而對于陸小曼,他滿足我對于好男人的所有想象签财。 不信串慰?來看看…… 01.先看顏值...
    淡一典閱讀 2,946評論 17 44