我们以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参数,在结果生成的时候,返回给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中怎么遇到锁了?肯定是你使用不当!

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相关的函数。 

 
 

gen_server边缘的更多相关文章

  1. gen_server port 调用receive_match 问题

    问题由来 前些天对系统做了一个优化,将原来从queue 轮询刷出数据后每条消息一个 spawn 进程单独处理,修改为批量刷出.一条一条刷轮询刷 queue 存在问题:刷queue 进程太多时,占用CP ...

  2. geotrellis使用(十六)使用缓冲区分析的方式解决投影变换中边缘数据值计算的问题

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 问题探索 采样说明 实现方案 总结 一.前言     ...

  3. geotrellis使用(十七)使用缓冲区分析的方式解决单瓦片计算边缘值问题

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 需求分析 实现方案 总结 一.前言        最 ...

  4. Shader实例:边缘发光和描边

    效果图: 1.边缘发光 思路:用视方向和法线方向点乘,模型越边缘的地方,它的法线和视方向越接近90度.点乘越接近0 那么用 1-减去上面点乘的结果,来作为颜色分量,来反映边缘颜色强弱. Shader ...

  5. 实例浅析epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO

    一.基本概念                                                          我们通俗一点讲: Level_triggered(水平触发):当被监控的 ...

  6. python数字图像处理(17):边缘与轮廓

    在前面的python数字图像处理(10):图像简单滤波 中,我们已经讲解了很多算子用来检测边缘,其中用得最多的canny算子边缘检测. 本篇我们讲解一些其它方法来检测轮廓. 1.查找轮廓(find_c ...

  7. 去掉SrollView、GrdiView、ListView、ViewPager等滑动到边缘的光晕效果

    当我们使用SrollView.GrdiView.ListView.ViewPager带有滑动功能的组件时,滑动到边缘时总会出现类光晕效果.这是用于提示用户已经滑动到了组件的边缘,不能再滑动了,但有时候 ...

  8. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数004·edge,边缘处理

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数004·edge,边缘处理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“ ...

  9. transition、animation在macbook air上图片动画边缘抖动

    示例: BUG描述: 最近同事一项目中,产品提出在macbook air上,列表图片放大效果边缘出现抖动现象.在retina屏上没有此问题. 调试过程: 1.单独把结构分离.确定是否由其他元素引起. ...

随机推荐

  1. 专访阿里巴巴研究员“赵海平”:Facebook的PHP底层性能优化之路(HipHop,HHVM)

    专访阿里巴巴研究员“赵海平”:Facebook的PHP底层性能优化之路 http://www.infoq.com/cn/articles/interview-alibaba-zhaohaiping

  2. MySQL第三方客户端工具

    如前所述,MySQL是一个基于客户机--服务器的DBMS,因此,为了使用MySQl,你需要有一个客户机软件给MySQL提供要执行的命令.即你需要一个编写和测试MySQL脚本的工具. 1.MySQL命令 ...

  3. winform 窗体实现增删改查(CRUD)共用模式

    转载:http://www.csframework.com/archive/2/arc-2-20110617-1632.htm 高度封装的编辑窗体 http://www.cnblogs.com/wuh ...

  4. RocketMQ(7)——通信协议

    RocketMQ(7)——通信协议 RocketMQ的通信协议其实很简单,但是无论是官方的用户手册,还是网上的博客,并没有很清晰简单地把其中所有的内容和原理讲明白. 对于需要扩展其他语言SDK的开发来 ...

  5. HashMap深度解析(二)

    本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/16890151,转载请注明.       上一篇比较深入的分析了HashM ...

  6. [Git] 关于refs/for/ 和refs/heads/

    转载自: http://lishicongli.blog.163.com/blog/static/146825902013213439500/ 1.     这个不是git的规则,而是gerrit的规 ...

  7. pkav漏洞之精华部分

    影响巨大的逻辑型漏洞 TOM邮箱任意密码秒改 网易手机邮箱任意密码重置强行绑定 交通银行免费买车漏洞 中国建设银行刷人民币漏洞 腾讯任意QQ号码注册 微信任意用户密码修改漏洞 新浪微搏修改任意用户密码 ...

  8. 渗透笔记0x00

    今天朋友在入侵织梦的网站系统,通过最新的Exp获得了织梦后台的账号和密码 账号:admin 密码:abc123456 但是,找来找去找不到后台,就让我提权试试. 我看了下:http://pxc.nci ...

  9. Hive中日期函数总结

    --Hive中日期函数总结: --1.时间戳函数 --日期转时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数 select unix_timestamp(); --获得当前时区 ...

  10. [转载]深入理解java多态性

    FROM:http://blog.csdn.net/thinkGhoster/article/details/2307001 昨天看到一个关于多态性的帖子,参考了回帖者的理解,加入了一些自己的看法,整 ...