之前看到 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().
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 吕方《爱一回伤一回》[WAV+CUE][454M]
- 鸿雁组合.2013-《草原最强音》天艺[WAV+CUE]
- 群星.1987-地球大合唱(LP版)【WAV+CUE】
- 金海心-《拥抱爱》[WAV+CUE]
- 杨千嬅《千嬅盛放》3CD[WAV+CUE][1.8G]
- 《莫扎特经典代表作品集》[FLAC][1.7G]
- 张信哲《梦想》[WAV分轨][459M]
- 拥金卓玛-伊敏河[正版CD低速原抓WAV+CUE]
- 辛宝儿《浅唱岁月》天弦文化醉美暖声拥吻梦想[WAV+CUE]
- 梁紫丹《城市足臃[母带级重生金CD正版CD低速原抓WAV+CUE
- 中唱唱片群星《好歌珍藏-感恩.赞美1》WAV+CUE
- 中唱唱片群星《好歌珍藏-故乡.家园》2CD【WAV+CUE】
- ChrisBotti-ChrisBottiInBoston(克里斯·波提:波士顿音乐会)(2008-9-18)[WAV+CUE]
- 乡村民谣Paul O′Brien《Walk Back Home》[DFF][1.6G]
- 郑秀文《华纳超极品音色系列》[FLAC][927M]