底层研究

erts运行期内存使用情况查看

翻erlang的代码发现erlang对memory的管理非常重视 内置了多种内存allocator: B: binary_alloc D: std_alloc E: ets_alloc F: fix_alloc H: eheap_alloc L: ll_alloc M: mseg_alloc S: sl_alloc T: temp_alloc Y: sys_a ...
mryufeng 评论 (0) 有 1455 人浏览 底层研究章节 2011-06-01

erl_call erlang cnode 功能强大

otp_src_R11B-5\lib\erl_interface\src\prog\erl_call.c 是个不错的工具, 就是ei的前端能够通过cnode给erlang的后端发各种请求。 具体的见 主题: 如何把erlang应用在项目中? http://www.iteye.com/topic/100425 where: -a apply(Mod,Fun,Args) (e.g -a 'erla ...
mryufeng 评论 (0) 有 1919 人浏览 底层研究章节 2011-06-01

Erlang: 当你net_adm:ping(Node)的时候发生了什么?

当你net_adm:ping(Node)的时候发生了什么? 这个涉及到很复杂的流程。让我为你解刨: 这个流程很长而且在erlang代码和c代码里面窜来窜去,重要的点 我用红字标注 请各位耐心。 1. net_adm.erl: ping(Node) when is_atom(Node) -> case catch gen:call({net_kernel, Node}, '$gen_call' ...
mryufeng 评论 (0) 有 4093 人浏览 底层研究章节 2011-06-01

erlang driver和热部署(重要)

erlang的热部署包括2个方便的 beam(.beam)级别的和driver(.dll .so)级别的. beam级别的就简单。但是driver级别的就相对复杂很多。 先看下erl_ddll的说明: Loading and reloading for code replacement This scenario occurs when the driver code might need re ...
mryufeng 评论 (0) 有 1182 人浏览 底层研究章节 2011-06-01

file:read_file的注意细节

arbow发现的问题如下: 4> file:read_file("/proc/cpuinfo"). {ok,<<>>} 11> {ok, IoDevice} = file:open("/proc/cpuinfo", [binary]),file:read(IoDevice, 1024). {ok,<<&quo ...
mryufeng 评论 (0) 有 3030 人浏览 底层研究章节 2011-06-01

Async线程pool及其作用

erlang能够利用多核心cpu的基础设施有2个 1. 进程调度器 2. async 线程池。 其中 async 线程池主要设计用来 能够在driver里面异步的执行费时操作, 因为driver是在调度器里面调用的 不过费时操作的话 会block掉整个调度器 而且调度器资源有限。 细节参见 erl_async.c Driver API: Asynchronous calls The lat ...
mryufeng 评论 (0) 有 2930 人浏览 底层研究章节 2011-06-01

Erlang分布的核心技术浅析

Erlang系统在我看来有3个特性 1. 分布 2. 多核心支持 3. fp。 这这3个特性中分布我认为是erlang最强大的,从第一个版本就支持到现在,相对非常成熟,而多核心支持是这几年才加进去的。 erlang的分布系统做到了2点 1.节点的位置无关性。 2. 对用户分布式透明的。具体体现就是node是靠名字识别的, 进程也是靠pid来识别。 分布系统就要实现节点间通讯,erlang也不列外 ...
mryufeng 评论 (0) 有 3141 人浏览 底层研究章节 2011-06-01

erlang内置的port相关的驱动程序

erlang能够利用多核心的优势不仅体现在多线程的smp调度器,更在port上面上体现。通过执行外部程序,接管它的输入输出, 实现了安全性和充分利用cpu计算资源。 erlang的io设计体现了unix一切以文件为中心的思想。在port设计上也是.这3个驱动程序都是把相关的东西转化成文件句柄,登记到poll上面,利用强大的IO poll来实现上层语义的整合。 ErlDrvEntry spawn ...
mryufeng 评论 (0) 有 1103 人浏览 底层研究章节 2011-06-01

smp下async_driver的用途和匠心

/* INTERNAL use only */ struct erl_drv_entry async_driver_entry; erlang beam里面有个async_driver设计的比较有意思。 在多处理器beam里面,线程间需要通讯。常规的情况下用condition再有个队列之类的辅助。 但是这个设计不能充分利用io的优势,而且使用起来很麻烦。async_driver就是设计给这个用途的 ...
mryufeng 评论 (0) 有 836 人浏览 底层研究章节 2011-06-01

erlang的timer和实现机制

对于任何网络程序来讲,定时器管理都是重头戏。erlang更是依赖于定时器。基础的timer主要是由time.c erl_time_sup.c实现。timer是基于time wheel的实现,支持time jump detection and correction。 上层的erl_bif_timer.c io.c中实现。 erl +c Disable compensation for sudden ...
mryufeng 评论 (1) 有 3441 人浏览 底层研究章节 2011-06-01

erlang的IO调度

erlang的调度有2种: 1. 进程调度 2. IO调度。网络程序的事件来源基本上只有2种:IO和定时器。IO事件有可能是大量的, 不可预期的,所以在设计上要考虑和进程调度平衡。erlang的 erl_port_task就是为这个目标设计的。 poll检查到io时间的时候,会回调iread和oready函数。这2个会把这个队列加到porttask的调度队列去。 static ERTS_INLI ...
mryufeng 评论 (0) 有 1897 人浏览 底层研究章节 2011-06-01

erlang运行期的自省机制

erlang运行期最值得称道的地方之一就是完备的自省机制,也就是说你可以通过这些信息了解整个系统运行的方方面面,给系统的调试,排错,调优,运营提供非常大的便利。在beam的c实现代码中至少1/4的代码在为这个目标服务,信息非常的到位详细,这和爱立信作为商业公司运营交换机的需求有很大的关系。自省分为2个层面的:提供erts运行期信息的和用户进程相关的信息。包括一下一个基础设施:system_flag, ...
mryufeng 评论 (0) 有 3472 人浏览 底层研究章节 2011-06-01

erlang对port子进程退出的处理

erlang通过port来spawn外部程序 重定向外部程序的stdin, stdout到一对pipe行通信的,利用poll来检测外部程序的读写事件。但是如果外部程序退出的话,erts如何知道并且加以处理的呢? erts运行的时候会初始化smp_sig_notify,开启一个信号处理线程,在这个线程里面做具体的信号处理。 static void init_smp_sig_notify(void) ...
mryufeng 评论 (0) 有 1337 人浏览 底层研究章节 2011-06-01

erlang的进程调度器工作流程

在多处理器机器上erlang默认是有几个cpu就有几个调度器线程,除非你通过+S N 参数来改变。每个调度器线程的入口函数是process_main, 外加一个主线程阻塞在select上等待中断事件的发生. process_main会调用schedule选择一个合适的process来执行。每个process里面都包含了要执行的的MFA,执行funtcion的opcode。beam_emu的opcod ...
mryufeng 评论 (0) 有 2220 人浏览 底层研究章节 2011-06-01

erlang进程退出时清扫的资源

ERTS要终止一个经常的时候调用一下函数 void erts_do_exit_process(Process* p, Eterm reason) { ErtsLink* lnk; ErtsMonitor *mon; #ifdef ERTS_SMP erts_pix_lock_t *pix_lock = ERTS_PID2PIXLOCK(p->id); #endif p->ar ...
mryufeng 评论 (0) 有 1439 人浏览 底层研究章节 2011-06-01

知识库信息

最新评论

相当不错的erlang,我们通信后台自从改成elrang后基本没出过什么大问题
406656983 评论了 进入Erlang的世界
听说几百万进程都不高cpu的
xlaohe1 评论了 进入Erlang的世界
有没有自己的例子公布一个
wrj913 评论了 gen_server入门
我是erlang 菜鸟,弱弱的问一下,erlang帮助文档,那有怎么用,连 Mod名、Func名,是什 ...
wrj913 评论了 Programming Erlang读书笔记8: Concurrency ...
winstars 写道这篇文章排版不错哈哈。。楼主一定是经常写文档的
suu 评论了 进入Erlang的世界
在学精JAVA语言之前,我是不会学其它语言的,无论它有多好、多美。
lshhjxlj 评论了 进入Erlang的世界
坚持学,会有成果的,正在感受erlang带来的快乐和便利
acme_ltt 评论了 进入Erlang的世界
学过一段时间,没有认真静下心来学,就没再坚持看
mj-beijing 评论了 进入Erlang的世界
这篇文章排版不错
winstars 评论了 进入Erlang的世界
Erlang目前还没打算学习,不过长见识了;多谢楼主分享
blues1021 评论了 进入Erlang的世界
在本文中,self表示的是实际执行中创建的那个进程,也就是 start(Mod,Env) -> ...
fsword 评论了 Erlang新手进阶笔记(3) - 通用的server
最后一句,在erlang中所有的self()我见过的都是表示进程的……
松秋明 评论了 Erlang新手进阶笔记(3) - 通用的server
self()实际表示如下% 实际执行体 % loop(Mod, State) -> rece ...
松秋明 评论了 Erlang新手进阶笔记(3) - 通用的server
% 初始化服务,注册名称,启动init方法,初始化服务时接受一个参数 % init(Mod, Env) ...
松秋明 评论了 Erlang新手进阶笔记(3) - 通用的server
应该不错吧,我正在学习Erlang哦。
kangdiji 评论了 进入Erlang的世界
更好的解决方案是指设置{packet,size}?
erlangguy 评论了 Erlang网络编程-Binary
不明白为什么第一个例子handler(Socket)中close(Socket)后还调用了handle ...
erlangguy 评论了 Erlang中的half-sync/half-async和Leader/F ...
解释得不错。
erlangguy 评论了 OTP Design Principles: Supervisor Behavi ...
再说明一下和init里{ok,State}的关系,容易理解一些。
erlangguy 评论了 OTP Design Principles: Gen_Event Behavio ...
event manager本质上是维护一个{Module, State}对的list,每个Module ...
erlangguy 评论了 OTP Design Principles: Gen_Event Behavio ...
Global site tag (gtag.js) - Google Analytics