
Erlang
文章平均质量分 83
skyman_2001
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
在gen_server中实现定时功能(方法二)
在gen_server的init、handle_call、handle_cast 或handle_info函数里的返回元祖的第3个元素是个整数,代表timeout的间隔,则时间到时会发送timeout消息给进程,该消息通过handle_info()来处理。原创 2011-07-04 01:18:58 · 1919 阅读 · 0 评论 -
Erlang performance profiling
Geoff Cant:To figure out if you have a CPU problem, I'd take a look at etop/dtop/entop and see if there are processes consuming a lot of reductions. If they're consuming these reductions in prop转载 2012-06-26 20:01:02 · 1345 阅读 · 0 评论 -
游戏服务器性能测试总结
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001游戏快要上线测试了,所以要测试一下性能,我们游戏服务器是用erlang写的,所以自然而然的选择用erlang来写测试机器人。用erlang写机器人挺方便的,因为erlang对网络通信支持很强大,网络消息通过binary match就能很方便的处理。还有erlang OTP的gen_fsm用来实现状态机很方便。机器原创 2012-03-05 20:11:16 · 4181 阅读 · 0 评论 -
在Centos上编译安装Erlang R15B
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel(如果已经安装了这些就不用安装)wget http://www.erlang.org/download/otp_src_R15B.tar.gztar xfv原创 2012-03-29 16:25:37 · 1676 阅读 · 0 评论 -
Erlang的hidden节点
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001Erlang的节点之间的连接默认是transitive,即当节点A连接了节点B,节点B连接了节点C,那么节点A也与节点C互相连接,这样就组成了全连通网络。但有时我们希望连接一个节点而不去连接其他节点(比如某个节点只是用来查看集群的一些信息),这时可以通过指定该节点为hidden节点来实现(在节点启动时指定-hid原创 2012-02-19 19:10:25 · 3366 阅读 · 0 评论 -
Erlang explained: Selective receive
原文地址:http://ndpar.blogspot.de/2010/11/erlang-explained-selective-receive.htmlIf you worked with Erlang you've probably heard about selective receive. But do you actually know how it works? I want to转载 2012-10-18 16:30:25 · 1291 阅读 · 0 评论 -
Erlang学习时间曲线
招新人时可以借鉴下:转载 2012-10-22 22:13:12 · 2418 阅读 · 0 评论 -
谈谈erlang:exit/2
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001有同学用erlang:exit(Pid, normal)来关闭Pid进程,其实这样Pid进程是不会自动退出的。官方文档上对erlang:exit/2的说明讲得很清楚:Sends an exit signal with exit reason Reason to the processPid.原创 2012-10-27 18:01:43 · 4708 阅读 · 0 评论 -
gen_server, trap_exit和terminate/2
转载请注明:来自http://blog.youkuaiyun.com/skyman_20011. 若gen_server进程自己终止(比如返回stop或在回调里触发exit,这里的exit可以是正常退出或异常退出,比如代码运行异常时会导致异常退出),则terminate/2总是被调用(即不管有没有设置捕捉退出消息);否则 2. 若gen_server进程没设置捕捉退出消息,则不会有terminate/原创 2011-11-09 17:10:48 · 2330 阅读 · 0 评论 -
页游外网玩家数据转档总结
转载请注明,来自:http://blog.youkuaiyun.com/skyman_20011. 转档之前策划要和程序、运营一起商量制定周详的转档方案,要三方根据自己的专业知识和经验来统计出哪些数据需要转档,怎么转比较平滑和完美,能够尽最大努力照顾到每个玩家的利益,但又不至于实现成本太高,总之转档数据要全面,不要有遗漏,特别是和其他系统有交互的数据,更要注意,还有就是综合权衡,制定出一个最优原创 2012-11-17 20:03:40 · 2118 阅读 · 0 评论 -
erlang调用外部程序如何得到其退出状态
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001经常会有erlang程序调用外部程序的需求,比如调用shell命令程序,一般是用os:cmd/1,比如:1> os:cmd("pwd")."/home\n"不过os:cmd/1是不能获知外部程序的退出状态的,比如外部程序是正常退出还是异常退出。怎么获知外部程序的退出状态呢?可以用erlang:ope原创 2012-12-11 21:57:52 · 2800 阅读 · 0 评论 -
Erlang VM汇编指令
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001可以用erts_debug:instructions()得到Erlang虚拟机的所有的汇编指令。以R15B01版本为例,共有452个汇编指令:"allocate_tt","allocate_heap_tIt","allocate_heap_zero_tIt", "allocate_init_tIy","a原创 2013-01-25 21:05:44 · 3307 阅读 · 0 评论 -
关于erlang节点显示“*** Terminating erlang”的问题
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001在ssh子shell里启动erlang节点,会显示“*** Terminating erlang”,然后节点退出。解决方法是启动时加上-noshell标记,下面是官方文档对-noshell标记的说明:-noshellStarts an Erlang runtime system with no she原创 2013-03-07 15:39:17 · 2781 阅读 · 0 评论 -
Erlang Tips(持续更新)
说明:本文的内容有些是来自网络,有些是自己的经验,我会尽量注明出处。转载请注明:来自http://blog.youkuaiyun.com/skyman_2001一、ets1. ets效率建议(原文出处:http://pro.it165.net/html/201110/950.html)(1) ets表的底层是由哈希表实现的,不过有序集例外,它是由平衡二叉树实现的。 所以不管是插入还是查找,集合原创 2011-11-25 22:45:45 · 2633 阅读 · 0 评论 -
关于erlang:halt的更新说明
摘自:http://www.erlang.org/download/otp_src_R15B01.readmeOTP-9985 == erts stdlib == When an escript ends now all printout to standard output and standard error gets out on the termina转载 2013-03-17 21:40:31 · 2193 阅读 · 0 评论 -
关于erlang socket被动模式和delay_send合用的问题
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001有项目反应服务器遇到ports()里的port,其port_info/1返回是undefined的问题,而且出现这个后,erlang:halt()不能正常关闭节点,要用erlang:halt(Status, [{flush, false}])才能关闭节点。在很多客户端同时关闭时比较容易重现。我在网上erlang论原创 2013-03-30 11:02:30 · 3935 阅读 · 0 评论 -
Erlang Distribution Tips
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001一、连通节点的方式1. .hosts.erlang方式:(1) 创建.hosts.erlang文件(在$HOME目录、当前工作目录或$OTP_ROOT目录下都可以),在文件里写上集群的所有host名;(2)启动所有节点;(3)检查.hosts.erlang文件有无成功加载:net_adm:host原创 2012-10-14 00:46:35 · 2577 阅读 · 0 评论 -
The layout of PID & PORT in the ERTS
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001我在调试erts时发现PID和PORT ID在底层是个整型,但是在erlang层的表示是和#Port的格式,它们之间是怎么转换的呢?通过grep发现在erts/emulator/beam/erl_term.h里有关于PID和PORT的layout说明,这里只谈论本节点情况下的layout: * PI原创 2013-03-24 01:29:58 · 1758 阅读 · 0 评论 -
Erlang ETop输出结果格式说明
摘自官方文档:http://www.erlang.org/documentation/doc-5.2/lib/observer-0.9/doc/html/etop_ug.htmlThe header includes some system information:Loadcpu is Runtime/Wallclock, i.e. the percentage of time where转载 2012-05-12 15:44:58 · 2637 阅读 · 0 评论 -
使用OTP原理构建一个非阻塞的TCP服务器
原文地址:http://www.iucai.com/?paged=8Erlang OTP设计原理已经被shiningray兄翻译透了。请参见。http://erlang.shiningray.cn/otp-design-principles/index.html这里翻译了一篇余锋老大和lzy.je老大推荐的文章,闲话不说,奉上。使用OTP原理构建一个非阻塞的TCP服务器原文网址转载 2012-05-09 21:51:12 · 3162 阅读 · 0 评论 -
Erlang HIPE/x86尾调用优化
摘自:《The HiPE/x86 Erlang Compiler: System Description and Performance Evaluation》 Tailcall optimisation is implemented by having the caller overwrite its incomingparameter area on the stack with转载 2012-05-01 22:42:49 · 1227 阅读 · 0 评论 -
在gen_server中实现定时功能(方法一)
使用erlang:send_after()函数原创 2011-07-04 00:44:51 · 1338 阅读 · 0 评论 -
Erlang TCP Socket
Erlang的TCP套接字的使用。原创 2011-07-04 10:37:02 · 3147 阅读 · 0 评论 -
Erlide中文设置
如何让erlide支持中文。原创 2011-07-08 19:20:23 · 1481 阅读 · 0 评论 -
erlang和as3 socket的二进制通信
erlang和as3 socket的二进制数据传输。原创 2011-07-21 21:42:01 · 1871 阅读 · 0 评论 -
Erlang监控事件管理器进程
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001 gen_event:start_link()可以产生一个事件管理器进程(an event manager),可以加到监控树里接受监控,这时Supervisor 的Child Specification中的Modules必须是dynamic。下面看一个简单的例子: logger_sup.erl:-mo原创 2011-11-22 22:22:25 · 1820 阅读 · 0 评论 -
gen_fsm中send_event和send_all_state_event的区别
文档原文:The difference between send_event and send_all_state_event is which callback function is used to handle the event. This function is useful when sending events that are handled the same way in原创 2011-11-24 23:26:00 · 1942 阅读 · 1 评论 -
Supervisor with gen_server
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001 当gen_server进程加到监督树里,要想让它的supervisor终止时回调该gen_server进程的terminate()(可以在terminate()函数里做些清理工作),可以:1. 该gen_server进程设置了捕捉退出信号:erlang:process_flag(trap_exit, t原创 2011-11-07 22:12:41 · 1199 阅读 · 0 评论 -
Erlang如何判断某个进程(process)的负载
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001erlang:process_info(Pid, [message_queue_len, stack_size])说明:message_queue_len:当前消息队列里的消息数目 - 判断消息的负载;stack_size:堆栈大小(单位:字)- 判断处理数据的负载。 详见:Load原创 2011-11-24 23:53:04 · 2159 阅读 · 0 评论 -
Erlang中的本地Pid/Socket和远程Pid/Socket
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001Erlang中的Pid/Socket有本地和远程之分,它们之间的区别是什么?对Pid来说,是格式,其中A为0表示本地节点,为其他值表示远程节点(值为该远程节点在dist_entry中的内部索引);B为4字节无符号整数,代表的是进程id(index,范围是0~MAXPROCS,这里MAXPROCS等于32767原创 2011-12-02 23:42:24 · 2639 阅读 · 0 评论 -
Erlang OTP 热更新
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001分一下4步:1. 挂起要更新的进程:sys:suspend();2. 重加载模块:c:l()或code:purge(). code:load_file();3. 通知进程改变代码:sys:change_code() ---> 对应module:code_change()回调;4. 恢复挂起的进程:原创 2012-01-08 17:46:34 · 1582 阅读 · 0 评论 -
Browsing SASL error reports in the remote shell
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001游戏服务器运行一般是detach模式,要想操作某个node,可以通过remote shell远程连接上去,但这时是不能在shell中用rb打印SASL的错误报告的,这是因为rb_server进程的group leader不是当前shell的group leader,解决方法是:> rb:start原创 2012-02-01 00:20:06 · 1121 阅读 · 1 评论 -
Erlang的random:uniform()函数
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001看它的代码实现:uniform() -> {A1, A2, A3} = case get(random_seed) of undefined -> seed0(); Tuple -> Tuple end, B1 = (A1*171) rem 3原创 2012-02-05 15:03:13 · 4381 阅读 · 1 评论 -
说说Erlang的Special Process和SASL Error Logging
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001一、什么是Special Process请看文档说明:Special Process is a process which comply to the OTP design principles. Such a process should:be started in a way原创 2012-02-17 16:09:43 · 1231 阅读 · 0 评论 -
【转载】Erlang精彩讨论-回“老赵”关于“Erlang中最大的问题”
原文:http://erlang-china.org/study/puzzle-in-erlang_pattern_match.html/comment-page-1#comments http://www.douban.com/group/topic/11354877/回“老赵”关于“Erlang中最大的问题” July 10th, 2009 :: ja转载 2012-02-27 22:43:00 · 5242 阅读 · 0 评论 -
Erlang的“ERROR: Shell process terminated!”错误
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001今天写了个测试模块,命名为io_lib_format,编译运行时,出现“ERROR: Shell process terminated!”错误,百思不得其解,最后google了一下,搜索到了答案:http://erlang.2086793.n4.nabble.com/Getting-a-strange-error原创 2012-03-13 22:52:50 · 2958 阅读 · 0 评论 -
说说Erlang的异常处理
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001Erlang的异常处理一般是try catch,虽然erlang比较推荐Let It Crash,不怎么推荐防御式编程,但try catch在以下两个方面还是很有用的:1. 处理用户输入,因为你不能确保输入的数据的正确性,这时为了稳定性,可以使用try catch(比如网游服务器,稳定性是很重要的);2.原创 2012-03-19 23:27:18 · 5665 阅读 · 0 评论 -
Erlang JAM二三话
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001JAM即Joe's Abstract Machine.下面是摘录自http://www.erlang.org/faq/academic.html的关于JAM的说明:First I designed an abstract machine to execute Erlang. This was called原创 2012-05-01 22:13:00 · 1571 阅读 · 0 评论 -
关于Erlang Socket的三种消息接收模式
转载请注明,来自:http://blog.youkuaiyun.com/skyman_2001erlang的socket有3种消息接收模式:active、passive和active once,可以在gen_tcp:connect/3或gen_tcp:listen/2里设置{active, true | false |once}来实现,也可以用inet:setopts/2来动态设置。这3种模式的区别是:原创 2013-04-11 10:51:21 · 3506 阅读 · 0 评论