亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Erlang中的注冊(cè)進(jìn)程使用實(shí)例

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

之前看到 Erlang 中的注冊(cè)進(jìn)程時(shí),對(duì)注冊(cè)并不理解,主要是不理解注冊(cè)的原子的作用域。剛才突然想明白了:

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

注冊(cè)進(jìn)程關(guān)聯(lián)的原子具有全局作用域

也就是說(shuō)關(guān)聯(lián)了注冊(cè)進(jìn)程之后的原子可以全局被使用

Erlang 中的并發(fā)機(jī)制是通過(guò)消息郵箱實(shí)現(xiàn)的,進(jìn)程間進(jìn)行通訊的方式只有消息郵箱,而進(jìn)程間通訊需要知道進(jìn)程的進(jìn)程號(hào),而使用 spawn 產(chǎn)生新進(jìn)程時(shí)會(huì)返回新進(jìn)程的進(jìn)程號(hào)供使用。

一個(gè)最簡(jiǎn)單的進(jìn)程間通信的程序如下

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

-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) 編譯這個(gè)模塊,之后就可以簡(jiǎn)單的使用了.

在下面的代碼中,語(yǔ)句前面的注釋表示解釋?zhuān)Z(yǔ)句后面的注釋表示輸出值, % => 后面的值表示語(yǔ)句的返回值

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

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

% 開(kāi)啟無(wú)限循環(huán)
Pid = test:start().
% Waiting for new message.                             % 新進(jìn)程 spawn 后立刻運(yùn)行
% => <0.35.0>                                          % 返回新進(jìn)程的進(jìn)程號(hào)

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


為了用戶不用每次都 Pid ! 'message',可以加入一個(gè) call 方法進(jìn)行包裝一下。
復(fù)制代碼 代碼如下:

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

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

但是這樣寫(xiě)還有個(gè)明顯的弊端,調(diào)用 call 時(shí)需要 Pid 參數(shù),但是又不能去掉,因?yàn)樾枰M(jìn)程號(hào)才能通信,所以使用時(shí)需要用戶維護(hù)一個(gè)進(jìn)程號(hào)。

而 Erlang 提供了注冊(cè)進(jìn)程的機(jī)制用來(lái)把原子關(guān)聯(lián)到進(jìn)程中,可以解決這個(gè)問(wèn)題

使用 register(atom, Pid) 可以將 atom 關(guān)聯(lián)到進(jìn)程號(hào)為 Pid 的進(jìn)程上,這個(gè)原子就

修改上面的 start 函數(shù)為

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

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

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

testp ! 'message'

于是可以修改上面的 call 函數(shù),去掉 Pid 參數(shù),而使用關(guān)聯(lián)后的原子,這個(gè)關(guān)聯(lián)后的原子不止在模塊內(nèi)有效,在全局作用域中都是有效的。
復(fù)制代碼 代碼如下:

call(M) ->
    testp ! M.

因此使用注冊(cè)進(jìn)程修改后的程序如下
復(fù)制代碼 代碼如下:

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


注冊(cè)相關(guān)的 BIF
復(fù)制代碼 代碼如下:

% 注冊(cè) atom 到 Pid

register(atom, Pid).

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

% 返回 atom 關(guān)聯(lián)的進(jìn)程號(hào),如果未關(guān)聯(lián),返回 undefined
whereis(atom).

% 返回系統(tǒng)中所有已注冊(cè)的進(jìn)程名
registered().

相關(guān)文章

  • Erlang中的匹配模式總結(jié)

    Erlang中的匹配模式總結(jié)

    這篇文章主要介紹了Erlang中的匹配模式總結(jié),本文講解了賦值時(shí)匹配、流程控制中的匹配、消息傳遞匹配等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • Erlang中的并發(fā)程序簡(jiǎn)介

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

    這篇文章主要介紹了Erlang中的并發(fā)程序簡(jiǎn)介,本文講解了Erlang中基本的并發(fā)函數(shù)、并發(fā)程序模板、程序在出錯(cuò)時(shí)立即崩潰的優(yōu)點(diǎn)、為了在互聯(lián)網(wǎng)上執(zhí)行并發(fā)程序等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Erlang中的模塊與模式匹配介紹

    Erlang中的模塊與模式匹配介紹

    這篇文章主要介紹了Erlang中的模塊與模式匹配介紹,本文分別對(duì)模塊與模式匹配做了講解,需要的朋友可以參考下
    2015-03-03
  • Erlang初學(xué):Erlang的一些特點(diǎn)和個(gè)人理解總結(jié)

    Erlang初學(xué):Erlang的一些特點(diǎn)和個(gè)人理解總結(jié)

    這篇文章主要介紹了Erlang初學(xué):Erlang的一些特點(diǎn)和個(gè)人理解總結(jié),本文總結(jié)了函數(shù)式編程、一切都是常量、輕量進(jìn)程、進(jìn)程端口映射及典型缺點(diǎn)等內(nèi)容,需要的朋友可以參考下
    2015-02-02
  • Erlang語(yǔ)法學(xué)習(xí)筆記:變量、原子、元組、列表、字符串

    Erlang語(yǔ)法學(xué)習(xí)筆記:變量、原子、元組、列表、字符串

    這篇文章主要介紹了Erlang語(yǔ)法學(xué)習(xí)筆記:變量、原子、元組、列表、字符串,本文簡(jiǎn)明總結(jié)了這5種類(lèi)型的相關(guān)知識(shí),需要的朋友可以參考下
    2015-01-01
  • erlang?on_load_function_failed排查過(guò)程解析

    erlang?on_load_function_failed排查過(guò)程解析

    這篇文章主要為大家介紹了erlang?on_load_function_failed的排查過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Erlang并發(fā)編程介紹

    Erlang并發(fā)編程介紹

    這篇文章主要介紹了Erlang并發(fā)編程介紹,本文講解了進(jìn)程的創(chuàng)建 、進(jìn)程間通信、超時(shí)設(shè)置以及給出代碼實(shí)例,需要的朋友可以參考下
    2015-01-01
  • Erlang中3種生成隨機(jī)數(shù)的方法

    Erlang中3種生成隨機(jī)數(shù)的方法

    這篇文章主要介紹了Erlang中3種生成隨機(jī)數(shù)的方法,它們分別是random:uniform()、erlang:now()、crypto:strong_rand_bytes(N),需要的朋友可以參考下
    2015-01-01
  • Erlang實(shí)現(xiàn)的百度云推送Android服務(wù)端實(shí)例

    Erlang實(shí)現(xiàn)的百度云推送Android服務(wù)端實(shí)例

    這篇文章主要介紹了Erlang實(shí)現(xiàn)的百度云推送Android服務(wù)端實(shí)例,本文先是講解了實(shí)現(xiàn)步驟,然后給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-01-01
  • Erlang中的OTP簡(jiǎn)介

    Erlang中的OTP簡(jiǎn)介

    這篇文章主要介紹了Erlang中的OTP簡(jiǎn)介,OTP包含了一組庫(kù)和實(shí)現(xiàn)方式,可以構(gòu)建大規(guī)模、容錯(cuò)和分布式的應(yīng)用程序,包含了許多強(qiáng)大的工具,能夠?qū)崿F(xiàn)H248,SNMP等多種協(xié)議,需要的朋友可以參考下
    2015-03-03

最新評(píng)論