最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Erlang中的注冊進程使用實例

 更新時間:2015年02月09日 09:51:01   投稿:junjie  
這篇文章主要介紹了Erlang中的注冊進程使用實例,本文給出正常進程通信實例和使用使用注冊進程通信實例,需要的朋友可以參考下

之前看到 Erlang 中的注冊進程時,對注冊并不理解,主要是不理解注冊的原子的作用域。剛才突然想明白了:

復制代碼 代碼如下:

注冊進程關聯的原子具有全局作用域

也就是說關聯了注冊進程之后的原子可以全局被使用

Erlang 中的并發(fā)機制是通過消息郵箱實現的,進程間進行通訊的方式只有消息郵箱,而進程間通訊需要知道進程的進程號,而使用 spawn 產生新進程時會返回新進程的進程號供使用。

一個最簡單的進程間通信的程序如下

復制代碼 代碼如下:

-module(test).

start() ->
    spawn(?MODULE, loop, []).

loop() ->
    io:format("Waiting for new message.~n"),
    receive
        M -> io:format("New message: ~p~n", [M])
    end,
    loop().

在 Erlang Shell 中使用 c(test) 編譯這個模塊,之后就可以簡單的使用了.

在下面的代碼中,語句前面的注釋表示解釋,語句后面的注釋表示輸出值, % => 后面的值表示語句的返回值

復制代碼 代碼如下:

% 編譯這個模塊
c(test).

% 開啟無限循環(huán)
Pid = test:start().
% Waiting for new message.                             % 新進程 spawn 后立刻運行
% => <0.35.0>                                          % 返回新進程的進程號

% 向進程發(fā)送消息
Pid ! 'message'.
% New message: message                                 % 接收到消息
% Waiting for new message.                             % 繼續(xù)接收消息
% => message                                           % 語句返回值,而非進程返回消息


為了用戶不用每次都 Pid ! 'message',可以加入一個 call 方法進行包裝一下。
復制代碼 代碼如下:

call(Pid, M) ->
    Pid ! M.

這樣就可以使用 test:call(Pid, 'message') 發(fā)送消息了。

但是這樣寫還有個明顯的弊端,調用 call 時需要 Pid 參數,但是又不能去掉,因為需要進程號才能通信,所以使用時需要用戶維護一個進程號。

而 Erlang 提供了注冊進程的機制用來把原子關聯到進程中,可以解決這個問題

使用 register(atom, Pid) 可以將 atom 關聯到進程號為 Pid 的進程上,這個原子就

修改上面的 start 函數為

復制代碼 代碼如下:

start() ->
    register(testp, spawn(?MODULE, loop, [])).

這樣,新的進程將關聯到原子 testp,此時原子就可以當作 Pid 那樣使用 "消息發(fā)送操作符" !
復制代碼 代碼如下:

testp ! 'message'

于是可以修改上面的 call 函數,去掉 Pid 參數,而使用關聯后的原子,這個關聯后的原子不止在模塊內有效,在全局作用域中都是有效的。
復制代碼 代碼如下:

call(M) ->
    testp ! M.

因此使用注冊進程修改后的程序如下
復制代碼 代碼如下:

-module(test).

start() ->
    register(testp, spawn(?MODULE, loop, [])).

loop() ->
    io:format("Waiting for new message.~n"),
    receive
        M -> io:format("New message: ~p~n", [M])
    end,
    loop().

call(M) ->
    testp ! M.


注冊相關的 BIF
復制代碼 代碼如下:

% 注冊 atom 到 Pid

register(atom, Pid).

% 取消 atom 的注冊
unregister(atom).

% 返回 atom 關聯的進程號,如果未關聯,返回 undefined
whereis(atom).

% 返回系統中所有已注冊的進程名
registered().

相關文章

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

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

    這篇文章主要介紹了Erlang中的并發(fā)程序簡介,本文講解了Erlang中基本的并發(fā)函數、并發(fā)程序模板、程序在出錯時立即崩潰的優(yōu)點、為了在互聯網上執(zhí)行并發(fā)程序等內容,需要的朋友可以參考下
    2015-03-03
  • Erlang并發(fā)編程介紹

    Erlang并發(fā)編程介紹

    這篇文章主要介紹了Erlang并發(fā)編程介紹,本文講解了進程的創(chuàng)建 、進程間通信、超時設置以及給出代碼實例,需要的朋友可以參考下
    2015-01-01
  • Erlang語法學習筆記:變量、原子、元組、列表、字符串

    Erlang語法學習筆記:變量、原子、元組、列表、字符串

    這篇文章主要介紹了Erlang語法學習筆記:變量、原子、元組、列表、字符串,本文簡明總結了這5種類型的相關知識,需要的朋友可以參考下
    2015-01-01
  • Erlang實現的百度云推送Android服務端實例

    Erlang實現的百度云推送Android服務端實例

    這篇文章主要介紹了Erlang實現的百度云推送Android服務端實例,本文先是講解了實現步驟,然后給出實現代碼,需要的朋友可以參考下
    2015-01-01
  • Erlang的一些編程技巧分享

    Erlang的一些編程技巧分享

    這篇文章主要介紹了Erlang的一些編程技巧分享,本文是是實際編程中的個人總結,需要的朋友可以參考下
    2015-01-01
  • Erlang中的OTP簡介

    Erlang中的OTP簡介

    這篇文章主要介紹了Erlang中的OTP簡介,OTP包含了一組庫和實現方式,可以構建大規(guī)模、容錯和分布式的應用程序,包含了許多強大的工具,能夠實現H248,SNMP等多種協議,需要的朋友可以參考下
    2015-03-03
  • Erlang編程語言的第一印象

    Erlang編程語言的第一印象

    這篇文章主要介紹了Erlang編程語言的第一印象,本文對Erlang做了一個簡單總結,需要的朋友可以參考下
    2015-03-03
  • Erlang IO編程之文件目錄操作常用方法小結

    Erlang IO編程之文件目錄操作常用方法小結

    這篇文章主要介紹了Erlang IO編程之文件目錄操作常用方法小結,本文講解了常用的文件操作如打開文件、讀取文件、寫入文件、刪除文件等,需要的朋友可以參考下
    2015-01-01
  • Erlang項目內存泄漏分析方法

    Erlang項目內存泄漏分析方法

    這篇文章主要介紹了Erlang項目內存泄漏分析方法,本文講解了分析方法、分析流程并找到問題原因和解決方法,需要的朋友可以參考下
    2015-02-02
  • Erlang中執(zhí)行l(wèi)inux命令的兩種方法

    Erlang中執(zhí)行l(wèi)inux命令的兩種方法

    這篇文章主要介紹了Erlang中執(zhí)行l(wèi)inux命令的兩種方法,本文著重講解了erlang:open_port的使用,需要的朋友可以參考下
    2015-01-01

最新評論

长子县| 九龙坡区| 临湘市| 哈巴河县| 高邮市| 道真| 漳平市| 通州区| 略阳县| 新蔡县| 五家渠市| 扶绥县| 平潭县| 尉犁县| 南通市| 阳山县| 曲沃县| 安图县| 中方县| 平塘县| 黎平县| 凌海市| 娄烦县| 蚌埠市| 阜阳市| 昆山市| 长白| 洛川县| 炉霍县| 聊城市| 瓦房店市| 平原县| 辽中县| 治多县| 思南县| 六安市| 浪卡子县| 都兰县| 黄石市| 收藏| 章丘市|