之前看到 Erlang 中的注册进程时,对注册并不理解,主要是不理解注册的原子的作用域。刚才突然想明白了:
复制代码 代码如下:
注册进程关联的原子具有全局作用域
也就是说关联了注册进程之后的原子可以全局被使用
Erlang 中的并发机制是通过消息邮箱实现的,进程间进行通讯的方式只有消息邮箱,而进程间通讯需要知道进程的进程号,而使用 spawn 产生新进程时会返回新进程的进程号供使用。
一个最简单的进程间通信的程序如下
复制代码 代码如下:
-module(test).
start() ->
spawn("Waiting for new message.~n"),
receive
M -> io:format("New message: ~p~n", [M])
end,
loop().
在 Erlang Shell 中使用 c(test) 编译这个模块,之后就可以简单的使用了.
在下面的代码中,语句前面的注释表示解释,语句后面的注释表示输出值, % => 后面的值表示语句的返回值
复制代码 代码如下:
% 编译这个模块
c(test).
% 开启无限循环
Pid = test:start().
% Waiting for new message. % 新进程 spawn 后立刻运行
% => <0.35.0> % 返回新进程的进程号
% 向进程发送消息
Pid ! 'message'.
% New message: message % 接收到消息
% Waiting for new message. % 继续接收消息
% => message % 语句返回值,而非进程返回消息
为了用户不用每次都 Pid ! 'message',可以加入一个 call 方法进行包装一下。
复制代码 代码如下:
call(Pid, M) ->
Pid ! M.
这样就可以使用 test:call(Pid, 'message') 发送消息了。
但是这样写还有个明显的弊端,调用 call 时需要 Pid 参数,但是又不能去掉,因为需要进程号才能通信,所以使用时需要用户维护一个进程号。
而 Erlang 提供了注册进程的机制用来把原子关联到进程中,可以解决这个问题
使用 register(atom, Pid) 可以将 atom 关联到进程号为 Pid 的进程上,这个原子就
修改上面的 start 函数为
复制代码 代码如下:
start() ->
register(testp, spawn("消息发送操作符" !
复制代码 代码如下:
testp ! 'message'
于是可以修改上面的 call 函数,去掉 Pid 参数,而使用关联后的原子,这个关联后的原子不止在模块内有效,在全局作用域中都是有效的。
复制代码 代码如下:
call(M) ->
testp ! M.
因此使用注册进程修改后的程序如下
复制代码 代码如下:
-module(test).
start() ->
register(testp, spawn("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,注册进程
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]