- 浏览: 32904 次
- 性别:
- 来自: 北京
最新评论
-
liumengfan:
{beam_dynamic_libraries, get_dy ...
system_info模块 -
liumengfan:
{environment, [split_env( ...
system_info模块 -
liumengfan:
其中{environment_erts, os_getenv ...
system_info模块 -
liumengfan:
centos再安装erlang之前,先安装如下软件:yum i ...
SystemTap and Erlang: a tutorial -
liumengfan:
判断是否是内部port的程序:#define is_inter ...
erlang判断内部pid的方法
文章列表
在rabbitMQ看到一段关于转换地址的代码:
留着以后用
%% inet_parse:address takes care of ip string, like "0.0.0.0"
%% inet:getaddr returns immediately for ip tuple {0,0,0,0},
%% and runs 'inet_gethost' port process for dns lookups.
%% On Windows inet:getaddr runs dns resolver for ip string, which may fail. ...
今天阅读rabbitMQ代码,遇到一段代码很疑惑:
try
log(info, "liufan the #v is ~p~n", [#v1.stats_timer]),
run({?MODULE, recvloop,
run({?MODULE, recvloop,
[Deb, switch_callback(rabbit_event:init_stats_timer(
State, #v1.stats_timer), ...
翻译自(http://www.rabbitmq.com/blog/2014/02/19/distributed-semaphores-with-rabbitmq/)
在这篇博客里面,我们将定位“在一个分布式系统里面,如何实现对特殊资源的访问控制”的问题,解决该问题的方案在计算机界广为人知,那就是被成为信号量的东东。“信号量”是在1965年Dijkstra的“Cooperating Sequential Processes”论文里出现的,下面我们将要讨论如何使用AMQP的构建快(consumers,producers,queues)来实现信号量。
需要信号量的地方
在我们讨论解决方案之前,让我 ...
工作中总会遇到一些困难的事,每个人面对这些事的时候,会有不同的心态:直接放弃、凑活着做,将过且过、破罐子破摔,尽量想通过其它途径来使事情向好的方向发展,能使自己看到一点点希望。在这个过程中,你的心里会进行激烈的挣扎,而自己能挺过这段难熬的时间,把事情做下去,也许你会看到不一样的风景。
一个积极向上的人,在能力上的进步是不用担心的,但心态的成长是需要过程的,希望自己越做越好。 相信自己永远是最棒的
自己接到了一个领导派发的任务,而在任务的执行过程中,自己会遇到各种各样的问题:与相关人员的沟通交流、遇到了难题、遇到了需要和相关人员沟通交流才能解决的问题、还有自己无法处理的意外情况。
当自己遇到各种情况的时候,需要分清事情的轻重缓急,有些自己可以解决,有些需要协商的,还有些是自己hold不住的。当自己遇到自己hold不住的问题,这时就需要向自己的上级领导反映了,不能让事情压在自己这里,而不暴露出事情的严重性给相关的人员。到时候,责任可能是自己负担不起的。就像程序一样,当函数自己catch住自己处理不了的异常的时候,就要补它throw出去,总有地方可以处理的。如果自己用错误的方式处理了这 ...
在看了Erlang新增全面的系统信息收集器-system_information模块之后,自己下载最新的代码,查看该模块,仔细看了一下
report() -> [
{init_arguments, init:get_arguments()},
{code_paths, code:get_path()},
{code, code()},
{system_info, erlang_system_info()},
{erts_compile_info, erlang:system_info(compile_info ...
当我们完成erlang的正常配置和编译后,我们可以构建一个debug模式的erlang运行时系统,过程如下:
首先我们再源代码的根目录导出ERL_TOP环境变量:export ERL_TOP=`pwd`
然后进入$ERL_TOP/erts/emulator目录下面,执行:make debug FLAVOR=smp或者make debug FLAVOR=plain
我们要调试的时候 就可以在otp的binx目录下运行 cerl -debug -gdb -break main
详细的步骤可以参考$ERL_TOP/HOWTO/INDTALL.md文件。
再霸爷的博客里搜集到了下面的知识
引用
1 ...
今天看到erl启动脚本的时候,看到
ROOTDIR="/usr/local/lib/erlang"
BINDIR=$ROOTDIR/erts-5.10.2/bin
EMU=beam
PROGNAME=`echo $0 | sed 's/.*\///'`
export EMU
export ROOTDIR
export BINDIR
export PROGNAME
exec "$BINDIR/erlexec" ${1+"$@"}
这个脚本首先初始化一些环境变量,其中:
PROGNAME=`echo $0 | sed ...
参照该文章安装SystemTap and Erlang: a tutorial
今天读到riak_sysmon时,看到列表解析的特殊用法,以前没见过,特做下笔记。
%%--------------------------------------------------------------------
%% @private
%% @doc
%% Initializes the server
%%
%% @spec init(Args) -> {ok, State} |
%% {ok, State, Timeout} |
%% i ...
自己尝试使用erl_eval做一些联系,发掘改模块的功能:
[root@dev-emp-com work]# erl
Erlang R14B (erts-5.8.1) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.8.1 (abort with ^G)
1> Binding1 = erl_eval:new_bindings().
[]
2> Binding2 = erl_eval:add_binding('A', 1, Bindin ...
通过erlang,我们可以使用
{ok, Ts, _} = erl_scan:string(String).
来获取Tokens,然后调用:
{ok, Expr} = erl_parse:parse_exprs(Ts).
转换成可以执行的表达式,之后通过
erl_eval:exprs(Expr, Binding).
来执行表达式。
实验步骤如下:
1> F =fun(Str,Binding) ->
1> {ok,Ts,_} = erl_scan:string(Str),
1> io:format("~p~n", [Ts]), ...
今天看到Erlang 动态执行和erlang动态解释,
实验的代码如下:
-module(dsl).
-compile([export_all]).
broker() ->
receive
{buy, Quantity, Ticker} ->
% 向外部系统下单的具体代码放在这里
%
Msg = "Order placed: buying ~p shares of ~p~n",
io:format(Msg, [Quantity, Ti ...
引用Erlang如何查看gen_server系列的状态 (高级)
引用
gen_server在erlang otp编程中的地位是无可撼动的,几乎都是gen_server或者gen_fsm的模型。那么程序运行起来的时候 我们如何查看gen_server的内部状态呢。有2种方法:
1. 自己写个类似于info这样的函数,来获取状态。
2. 利用系统现有的架构。sasl应用带了一个si的东西 全名是status inspector, 这个东西就是设计来帮用户解决这个问题的。
实验开始:
root@nd-desktop:~# cat abc.erl
-module(abc).
-behaviour( ...
今天看了霸爷的节点间通讯的通道微调和谁引起busy_dist_port之后,自己将两章的内容连起来,组合成一个小程序,通过节点名查到相应的port,然后通过port查到相应的节点名,代码如下:
-module(busyPort).
-compile([export_all]).
start(Node) ->
Port = node_port(Node),
annotate_port(busy_dist_port, Port, get_node_map()).
node_port(Node)->
{_, Owner}=lists:keyfind( ...