最近更新文章

gen_tcp 应对对端半关闭

当tcp对端调用shutdown(RD/WR) 时候, 宿主进程默认将收到{tcp_closed, Socket}消息, 如果这个行为不是你想要的,那么请看: shutdown(Socket, How) -> ok | {error, Reason} Types: Socket = socket() How = read | write | read_write Reason = pos ...
mryufeng 评论 (0) 有 2358 人浏览 网络编程章节 2011-06-01

group_leader的设计和用途

一直对erlang的group_leader这个概念很困惑,因为*nix系统也有类似的名词但是只是和进程组管理有关系。查了很多文档才知道,erlang的group_leader的设计意图和作用,解释如下: 先看下着段代码运作: log_group_leader(OGL) -> receive Msg -> io:format(user, "Got message ~p~ ...
mryufeng 评论 (0) 有 1822 人浏览 开发实战章节 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) 有 2912 人浏览 底层研究章节 2011-06-01

Erlang分布的核心技术浅析

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

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

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

erlang运行期的自省机制

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

erlang的进程调度器工作流程

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

Erlang里的OO和Java里的OO

[Updated: Feb 18, 2007, 增加了关于Java中静态方法的内容] 首先,这里的OO中的Object仅指包含可变状态的Object,暂不涉及有关OO的多态、继承等概念。 一、Erlang的OO 1、保存在函数调用栈中的状态 Erlang是函数式语言,一般而言,对于事物可变的状态(参数和中间状态)尽可能局限在函数调用中处理完,在调用过程中这些状态全部保存在函数的调用堆栈中,也就是说 ...
dcaoyuan 评论 (0) 有 3944 人浏览 入门介绍章节 2011-06-01

Programming Erlang读书笔记1:Why Erlang?

公司产品终于上线了,一切告一段落,可以有大把时间看书写字了。 新年最令人激动事:可以开始系统的学习Erlang了! Erlang的书籍和教材还很少,《Programming Erlang》是Erlang的发明者Joe Armstrong自己写的学习Erlang的书,可谓经典 为什么要学习Erlang?现在还不知道,学完了才知道Erlang值不值得学。 搞程序的需要宗教信仰啊。 Five reaso ...

Programming Erlang读书笔记2:Getting Started

去http://www.erlang.org/download.html下载Windows版本的Erlang,将bin目录加入到系统path中 cmd进去输入erl回车,就进入Eshell了,输入q().或者Ctrl+C/Break可以退出Eshell(命令末尾加.然后回车才会执行函数) 在Eshell里输入help().可以看到命令列表(实际上是函数列表) 基于Debian的Linux系统下可 ...

知识库信息

最新评论

相当不错的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