摘要: Erlang核心开发者Lukas Larsson在2014年3月份Erlang Factory上一个演讲的听写稿,详细介绍了Erlang内存体系的原理以及调优案例。 阅读全文
posted @ 2014-05-03 12:01 siyao 阅读(4838) 评论(1) 推荐(4) 编辑
摘要: 本文是对BEAM虚拟机指令中和内存分配/解除分配相关指令的简单介绍。本文简要介绍了Erlang进程的堆栈模型以及虚拟机寄存器的应用,还介绍了这些指令中live参数的意义。 阅读全文
posted @ 2014-03-26 23:31 siyao 阅读(1927) 评论(2) 推荐(0) 编辑
摘要: 本文简单分析了一下 Erlang R16 中新引入的数据结构 map。 阅读全文
posted @ 2014-03-09 23:25 siyao 阅读(10485) 评论(3) 推荐(1) 编辑
摘要: 最近在做一些和 NIF 有关的事情,看到 OTP 团队发布的 17 rc1 引入了一个新的特性“脏调度器”,为的是解决 NIF 运行时间过长耗死调度器的问题。本文首先简单介绍脏调度器机制的用法,然后简要分析虚拟机中的实现原理,最后讨论了一下脏调度器的局限性。 阅读全文
posted @ 2014-02-15 23:54 siyao 阅读(4166) 评论(1) 推荐(2) 编辑
摘要: 虽然 Erlang 是 share-nothing,而且变量 immutable 的,但是 Erlang 为了各种实用的需求还是会提供一些“后门”违反这些原则,因此在写 Erlang 程序的时候有时候也需要注意并发访问的情况。ETS 就是一个共享内存,本文描述了标准库中 digraph 模块中一个潜在的 bug。 阅读全文
posted @ 2014-01-21 07:43 siyao 阅读(2661) 评论(1) 推荐(2) 编辑
摘要: 这是一篇流水账,记录了优化一个对 binary 操作的 Erlang 程序,然后发现真正瓶颈所在的过程。本文纯粹是流水账,没有什么结论,只是觉得 Erlang 很好玩:) 阅读全文
posted @ 2013-12-22 16:51 siyao 阅读(11311) 评论(4) 推荐(6) 编辑
摘要: 在对 Erlang 虚拟机做 profiling 的时候,发现在 Vtune 中会出现源代码和汇编指令映射错误的现象。本文分析了这种映射错误的原因,那就是在源码文件中 #include 了另外的源码,所以编译器记录的是另外源码的行号。解决方法是手工将被 #include 的源码文件拷贝到被分析的源码中。 阅读全文
posted @ 2013-12-07 23:48 siyao 阅读(2233) 评论(0) 推荐(1) 编辑
摘要: 本文简单探讨了一下 Erlang 调度器发生进程抢占的条件,然后通过示例展示 Erlang 在大部分情况下都是能做到软实时的,但是在某些极端情况下一些 misbehave 的进程会阻塞整个调度器。本文不纠细节,只是提供一个感性的认识。 阅读全文
posted @ 2013-12-01 22:47 siyao 阅读(2704) 评论(3) 推荐(0) 编辑
摘要: 本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第五部分:binary。 阅读全文
posted @ 2013-12-01 18:15 siyao 阅读(7815) 评论(7) 推荐(1) 编辑
摘要: 本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第四部分:boxed 对象。 阅读全文
posted @ 2013-12-01 18:12 siyao 阅读(4532) 评论(3) 推荐(0) 编辑