【转载】gen_server 边缘

我们以 Module 代表 gen_server 的 callback 模块 

1, 实现 gen_server behaviour 的模块会产生一个新的 process 么? 
毫无疑问,太会了!通过调用 proc_lib:start_link/5 创建 process 。 

2, gen_server:start_link/3,4 中的 Options 参数有什么用处?  
Options 中只有这几个选项:{debug,Dbgs} | {timeout,Time} | {spawn_opt,SOpts},  

  • debug 是用来和 sys 模块相关联的;
  • 通过 proc_lib:start_link/5 创建 process 的时候,如果初始化等待的时间超过了 Time ,那么我们的 gen_server:start_link 会返回 {error, timeout}的错误;
  • spawn_opt 是给 spawn_opt 传递的参数。 

3, Module:init/1 的那些返回值都什么意思?  
{ok, State} 就不用说了,一切正常,State 将为 gen_server 的 State;  
{ok, State, Timeout} 也很正常,只是如果 process 在 Timeout(>=0,ms) 时间内没有收到任何消息,那么将产生一个 timeout 消 息,这个消息要在handle_info 中处理哦。  
{ok, State, hibernate} 还是正常,只是我们在 process 启动后,就让它先”睡眠“,因为我们知道最近一段时间内,我们还不用这个 process,此process 睡眠的好处就是可以最大限度的减少其内存占用,当有消息到达时,process 就会”惊醒“,重新工作。  
{stop, Reason},oops,出错了,process 将会调用 exit(Reason) 退出。如果 init 没有预期,我们就退出吧。  
ingore,既然要求忽略了,什么都不做,退出吧。  

4, gen_server:multi_call/2,3,4 这几个哥们是干嘛用的?  
multi 就是多的意思嘛,mulit_call 肯定就是进行多个调用请求哦。  
先说他们的关系:  
gen_server:multi_call(Name, Request)  
= gen_server:multi_call([node() | nodes()], Name, Request)  
= gen_server:multi_call([node() | nodes()], Name, Request, infinity)  
称他们为兄弟,我看称他们为三胞胎还不错。  
向多个 node 请求本地名为 Name 的 gen_server behaviour ,然后收集结果,返回。  
其返回值格式为:{Replies,BadNodes},其中 Replies 为 [{Node, Reply}] ;BadNodes,不用说就是那些没有正常返回应答的节点了。  
mulit_call/4 最后一个 Time 参数指定的是每个 Reply 等待的超时时间。  

5, gen_server:reply/2 有嘛用处?  
如果在 Module:handle_call/3 中,我们不能返回结果,我们可以保存 handle_call 中的 From 参数,在结果生成的时候,通过 gen_server:reply/2 返回给 Caller 。  

6, Module:handle_call/3 返回 {noreply,NewState} 会怎样?  
怎样?明明 handle_call 处理的是同步的请求,处理完了就应该告诉 Caller,是死是活,是成功是失败,可是你 noreply,  Caller 只能傻傻的等待了。等多久?默认的是 5 秒,gen_server:call/3 就调用 exit({timeout, Description}),退出了。。  

7, 我用 gen_server 竟然死锁了?  
天呀,在 erlang 中怎么遇到锁了?肯定是你使用不当! 

?


1

2

3

4

5

6

7

8

9

10

11

12

13

name() ->

    gen_server:call(?SERVER, name).

address() ->

    gen_server:call(?SERVER, address).

 

all_info() ->

    gen_server:call(?SERVER, all_info).

 

.....

handle_call(all_info, _From, State) ->

    Name = name(),

    Address = address(),

    {reply, {Name, Address}, State};

这么写,活该你死锁。  
handle_call 是同步调用,你在内部又调用 name() 、address() ,能不锁么?  
要求就是:不要在handle_call/3 内部调用另一个 gen_server:call 相关的函数。  

时间: 2025-01-16 20:32:06

【转载】gen_server 边缘的相关文章

搜索引擎潜规则:精文转载与采集天壤地别

转载就一定会被降权吗?搜索引擎优化中,内容执掌网站命脉,因此能原创的原创,做不到原创的伪原创,甚至工具采集.然而姑且不论伪原创是否可以真正瞒天过海取得内容优化效果,文章转载与采集是否性质等同呢?大多人认为"转载"就是"采集",而区别主要在于转载是人为行动,"采集"则更多的被定性为人为编制程序代码所为.殊不知,在搜索引擎优化过程中,搜索引擎潜规则对于两者的定性却截然不同,本文就此分析: 一:转载与采集的区别在哪里 互联网每天的新闻有多少是重复信息?

高仿今日头条(转载)

高仿今日头条 --- 第一篇:(android高仿系列)今日头条 --新闻阅读器 (一)    上次,已经完成了头部新闻分类栏目的拖动效果. 这篇文章是继续去完善APP 今日头条  这个新闻阅读器的其他功能. 这次所实现的功能清单: 1.通过SlidingMenu实现左右侧拉菜单效果 2.通过重写CompoundButton实现--昼夜模式切换按钮效果. 3.通过PopupWindow控件实现了列表中更多菜单弹框操作效果. 4.通过universal-image-loader库实现了图片的加载和

5G时代的智能边缘计算AI-EC平台

2017年9月初华为透露:首款搭载AI芯片的商务手机将于10月发布并提出:Mobile AI=On_Device AI + Cloud AI.无独有偶,一周后苹果公司也发布了搭载A11可以人脸识别的史上最贵手机.那么On_Device AI将不可避免吗?本文作者提出了另外一种选项供参考:Mobile AI=5G_Device + AI-EC. 所谓的智能边缘计算(AI over Edge Computing, 以下简称AI-EC)是指在5G边缘(可理解在基站端)提供各类AI推理算法资源和相应的可

在物联网上融合云和边缘计算的三个步骤

在过去的几年里,物联网已经迅速发展.根据摩尔定律,每个芯片的晶体管数量,每18个月会增加一倍,因此硬件开发人员能够在同样的空间中,加入更多的功能.这创造出更小的电脑,更小的手机和其他电子设备. 所有连接到互联网的设备,都需要芯片,但是直到最近,芯片才变得足够小.这与无线网络的迅速增长相结合,使得连接设备和为其提供远程功能,变得更方便. 这就是物联网:简单的设备可以通过大小合适的新型高性价比芯片进行控制和监控.随着苹果和微软这样的大公司继续大力投资开发这项技术,如何构建物联网,成为如何管理大量数据

微软走向“边缘”:Windows和Office?咱们还是聊聊云跟AI吧…

在日前召开的微软Build 2017开发者大会上,微软公司CEO Satya Nadella公布了Windows已经迎来新的发展里程碑--月度活跃用户超过5亿.此外,他亦对Windows与Office进行了少量介绍. 相反,他与微软云企业集团执行副总裁Scott Guthrie以及微软人工智能与研究部门执行副总裁Harry Shum一道,将大部分时间用在了讨论Azure云服务.数据库以及跨平台开发工具身上. 在本届开发者大会的开幕式上,Nadella在主题演讲中表示在这样一个阳光灿烂的日子里,"

转载 : 神经网络浅讲:从神经元到深度学习

神经网络是一门重要的机器学习技术.它是目前最为火热的研究方向--深度学习的基础.学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助你理解深度学习技术. 本文以一种简单的,循序的方式讲解神经网络.适合对神经网络了解不多的同学.本文对阅读没有一定的前提要求,但是懂一些机器学习基础会更好地帮助理解本文. 神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术.人脑中的神经网络是一个非常复杂的组织.成人的大脑中估计有1000亿个神经元之多. 图1 人脑神经网络   那

《Photoshop图像合成专业技法(修订版)》—第1章1.1节你最好的朋友:“快速选择工具”和“调整边缘”

第1章 选区的秘密 Photoshop图像合成专业技法(修订版) 第1章 选区的秘密 当Photoshop CS5于2010年刚刚上市的时候,我听到的最多的问题就是"你最喜欢CS5的哪个新功能?"由于我经常拍摄和制作HDR照片,我想他们认为我会说是"HDR Pro"(CS5中新增和改进了HDR很多性能).但你们都猜错了!我之后发现"调整边缘"(Refine Edge)对话框才是我最喜欢的新功能,因为我们在Photoshop中一切与选区有关的操作都

翻唱歌曲《伤心的站长》一炮走红 各大门户转载!

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断淘宝客 站长团购 云主机 技术大厅 功夫恰恰翻唱的歌曲<伤心的站长>在站长网(http://admin5.com)发布之后,得到了大家的热情支持.翻唱站长功夫恰恰也在昨日接受了半岛晨报的独家采访,以下为半岛晨报报道: 半岛晨报消息 近来,一曲由大连一个网名叫"功夫恰恰"翻唱的歌曲<伤心的站长>迅速在网络上蹿红,几天过去了,该歌

英特尔驱动边缘计算产业联盟国际化 拓展计算边界

近日,由英特尔联合发起的边缘计算产业联盟(Edge Computing Consortium,简称 ECC)在北京正式宣布成立,该联盟旨在搭建边缘计算产业合作平台,推动OT和ICT产业开放协作,孵化行业应用最佳实践,促进边缘计算产业健康与可持续发展.作为初创成员之一,英特尔借助领先技术与产业资源,驱动边缘计算产业联盟国际化,推动边缘计算创新,拓展计算边界. 就在前不久举办的2016英特尔物联网解决方案峰会上,英特尔提出,边缘计算的发展将经历互连.智能与自动自主三个阶段.在各个阶段的发展进程中,传