`
mryufeng
  • 浏览: 982237 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
文章列表
erlang的tools application下包含了一系列的profile工具, 包括 eprof cprof fprof, 具体的使用可以参看文档和<< erlang effective guide>>. 我这里要说的是他们的工作原理。 这些模块的核心都是根据erlang的trace机制实现的。在模块执行的时候,trace机制会通知那个函数被调用 返回。根据这些信息就可以统计出来函数调用的频度,调用栈等。 但是利用这个机制会有严重的性能损失。因为每个函数调用都要发送一条trace信息,每个trace 信息会引起上下文切换 而且要耗费2-3的时间。这个对大型的系统 ...
我们先看下cover模块的功能: The module cover provides a set of functions for coverage analysis of Erlang programs, counting how many times each executable line of code is executed when a program is run. 那它是如何做到的呢? 它是这样实现的: cover一个模块的时候要先编译, 这个过程中, 根据模块的abstract code 里面的行号,在每个有效的语句前面插入一个 ets:update_couter() ...
erlang的binary在这个网络程序里面占着非常重要的地位,所以otp团队采用了非常多的优化手段包括: 1.  binary操作对应着 opcode 2. 根据生命期和作用,有4种类型的binary 3. hipe优化,把bs_操作直接翻译成asm指令 4. 编译器层面消除无必须的操作。 下面的例子就是演示4的特性: yu-fengdemacbook-2:~ yufeng$ cat bin.erl -module(bin). -export([start/1]). start(A)->     B1= <<12>>,     B2 = << ...
前些天在erlang的源码里面闲逛的时候发现了 bin目录下的cerl,一看原来是个调试的高级货。 我之前写过一篇文章http://mryufeng.iteye.com/blog/113852 如何调试erlang 但是这是土八路的方法, cerl才是现代化工业。 # This is a script to start Erlang/OTP for debugging. PATH is set to # include this script so if slave nodes are started they will use this # script as well. # #  usa ...
原文地址:http://hyperstruct.net/2007/6/26/literal-xml-in-erlang-with-parse-transform-2 One of the things I dislike about Erlang is that it severely impairs bragging opportunities. Yesterday I wrote a module that allows writing literal XML in the source and have it parsed into Erlang structures at compi ...
erlang的abstract code是编译的中间代码,很多工具如 erl_pp lint什么的都是根据这个做调整的。还有进一步的parse_transform也是基于它的。 所以,了解它非常重要。 erts user guide里面详细了描述了它的定义。我这里展示的是如何获取到某个模块的abstract code 以便进一步研究: [root@localhost ~]# erl -s hello Erlang R13B02 (erts-5.7.3) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-pol ...
原文地址:http://erlang-factory.com/upload/presentations/167/KennethLundin-LatestnewsfromtheErlangOTPteamatEricssonErlang_Workshop2009.pdf Coming Open Source releases OTP R13B02 September 23 OTP R13B03 November 25 OTP R13B04 Jan-Feb 2010 OTP R13B05 ??? OTP R14B May-June 2010 OTP R14B01 OTP R14B02 Plans ...
erlang otp包里的 cryto很好的贯彻了下面的原则,是个很好的教材: 9 Drivers This chapter provides a (very) brief overview on how to write efficient drivers. It is assumed that you already have a good understanding of drivers. 9.1 Drivers and concurrency The run-time system will always take a lock before running any code in ...
Parameterized modules in Erlang 请参考这篇文章 http://ftp.sunet.se/pub/lang/erlang/workshop/2003/paper/p29-carlsson.pdf 我这里讲述的重点是如何实现的。先看代码: root@nd-desktop:~/test/m# cat main.erl % File: main.erl -module(main). -export([start/0]). start() -> M1 = print:new("Humpty"), M2 = print:new("Du ...
在处理文本文件的时候,基本上是以行为单位处理,特别是unix,无数的工具和算法基于这个line. erlang在这方面支持的也非常好,极大的方便了用户。 erlang的数据大概有4个来源,在最近的R13B02这些来源都支持行读。 1. IO比如标准输入。 io:get_line([IoDevice,] Prompt) -> Data | eof | {error,Reason} Types: Reads a line from the standard input (IoDevice), prompting it with Prompt. 2. port,就是unix的管道,从其他 ...
erlang的标准用法是尽可能的把函数调用写出尾递归的方式,实际的结果靠参数传递。尾递归的方式对进程的堆栈使用很小, 只要一个WORD, 但是非尾递归就要看递归的层数,如果数量很大,会把堆栈撑的很大。我们在汇编一级看下如何实现的: root@nd-desktop:~# cat tailcall.erl  -module(tailcall). -export([start/1]). -compile(export_all). start(N)->     X = loop(N),     Y = tail_loop(N),     X = Y,     done. loop(0)-& ...
erlang在smp模式下 默认开启的线程数目是 4 + 调度器数量 + 异步线程的数量。 其中调度器默认=cpu的数目 异步线程的数量默认是0, 可以通过 +A来设置,主要用于文件异步IO操作。 对于现在的机器 可能有大量的cpu  那么默认开启的 ...
erlang节点间通讯是可以配置的,默认的是inet_tcp 。当2个节点要沟通的时候,net_kernel模块会负责建立必要的连接。 inet_tcp会调用底层的gen_tcp进行数据发送接受。 rpc或者节点间的消息交互都是通过这个port出去的。 在分布节点间,有时候会有大量的消息流动,那么所有的消息都是通过这个port出去 进来,所以这个port的性能极大的影响了节点间通讯的效率。那么有时候, 我们会想微调这个port的参数,根据业务的特点实现效率最大化,但是port如何得到呢? node_port(Node)->     {_, Owner}=lists:keyfind(o ...
Erlang作为一门FP语言,和传统的语言结构一样, 有模块, 有函数, 有语句, 有判断, 有循环, 还有特别的模式匹配。 那么这些在底层是如何运作的。 我在底下给大家做个简单的实验,让大家一窥内部的细节,让大家写码的时候知道个大概。 erlang的VM作为register based的VM, 大概有400条指令.指令分为hot, normal, cold  3大类别。beam_emu.c是vm的实现,hot和cold指令在编译的时候 由脚本生成的,include到beam_emu去的。 hot是热门的操作如list, tuple操作, cold的就是比较偏的指令。 erlang的编译器支 ...
不小心在 lib/mnesia/doc/misc/implementation.txt中找到的, 对于深入理解mnesia实现,阅读源码是很好的参考资料。 Mnesia 1 Introduction This document aims to give a brief introduction of the implementation of mnesia, it's data and functions. Håkan has written other mnesia papers of interest, (see ~hakan/public_html/): o Resource c ...
Global site tag (gtag.js) - Google Analytics