博客园 - siyao
uuid:6cbd1ba2-f883-4c34-aed1-30dde64a3a3e;id=683824
2014-05-03T04:05:14Z
siyao
https://www.cnblogs.com/zhengsyao/
feed.cnblogs.com
https://www.cnblogs.com/zhengsyao/p/erts_allocators_speech_by_lukas_larsson.html
Erlang 虚拟机内的内存管理(Lukas Larsson演讲听写稿) - siyao
Erlang核心开发者Lukas Larsson在2014年3月份Erlang Factory上一个演讲的听写稿,详细介绍了Erlang内存体系的原理以及调优案例。
2014-05-03T04:01:00Z
2014-05-03T04:01:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】Erlang核心开发者Lukas Larsson在2014年3月份Erlang Factory上一个演讲的听写稿,详细介绍了Erlang内存体系的原理以及调优案例。 <a href="https://www.cnblogs.com/zhengsyao/p/erts_allocators_speech_by_lukas_larsson.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/beam_allocation_instructions.html
Erlang 虚拟机 BEAM 指令集之内存管理相关的指令 - siyao
本文是对BEAM虚拟机指令中和内存分配/解除分配相关指令的简单介绍。本文简要介绍了Erlang进程的堆栈模型以及虚拟机寄存器的应用,还介绍了这些指令中live参数的意义。
2014-03-26T15:31:00Z
2014-03-26T15:31:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】本文是对BEAM虚拟机指令中和内存分配/解除分配相关指令的简单介绍。本文简要介绍了Erlang进程的堆栈模型以及虚拟机寄存器的应用,还介绍了这些指令中live参数的意义。 <a href="https://www.cnblogs.com/zhengsyao/p/beam_allocation_instructions.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/erlang_map_brief.html
Erlang 的新数据结构 map 浅析 - siyao
本文简单分析了一下 Erlang R16 中新引入的数据结构 map。
2014-03-09T15:25:00Z
2014-03-09T15:25:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】本文简单分析了一下 Erlang R16 中新引入的数据结构 map。 <a href="https://www.cnblogs.com/zhengsyao/p/erlang_map_brief.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/dirty_scheduler_otp_17rc1.html
Erlang/OTP 17.0-rc1 新引入的"脏调度器"浅析 - siyao
最近在做一些和 NIF 有关的事情,看到 OTP 团队发布的 17 rc1 引入了一个新的特性“脏调度器”,为的是解决 NIF 运行时间过长耗死调度器的问题。本文首先简单介绍脏调度器机制的用法,然后简要分析虚拟机中的实现原理,最后讨论了一下脏调度器的局限性。
2014-02-15T15:54:00Z
2014-02-15T15:54:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】最近在做一些和 NIF 有关的事情,看到 OTP 团队发布的 17 rc1 引入了一个新的特性“脏调度器”,为的是解决 NIF 运行时间过长耗死调度器的问题。本文首先简单介绍脏调度器机制的用法,然后简要分析虚拟机中的实现原理,最后讨论了一下脏调度器的局限性。 <a href="https://www.cnblogs.com/zhengsyao/p/dirty_scheduler_otp_17rc1.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/erlang_race_condition_in_digraph.html
Erlang 程序引发共享内存 bug 的一个例子 - siyao
<img src="http://images.cnitblog.com/blog/414649/201401/210643288752.png" class="desc_img"/>虽然 Erlang 是 share-nothing,而且变量 immutable 的,但是 Erlang 为了各种实用的需求还是会提供一些“后门”违反这些原则,因此在写 Erlang 程序的时候有时候也需要注意并发访问的情况。ETS 就是一个共享内存,本文描述了标准库中 digraph 模块中一个潜在的 bug。
2014-01-20T23:43:00Z
2014-01-20T23:43:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】<img src="http://images.cnitblog.com/blog/414649/201401/210643288752.png" class="desc_img"/>虽然 Erlang 是 share-nothing,而且变量 immutable 的,但是 Erlang 为了各种实用的需求还是会提供一些“后门”违反这些原则,因此在写 Erlang 程序的时候有时候也需要注意并发访问的情况。ETS 就是一个共享内存,本文描述了标准库中 digraph 模块中一个潜在的 bug。 <a href="https://www.cnblogs.com/zhengsyao/p/erlang_race_condition_in_digraph.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/why_is_erlang_slow_revcomp_example.html
为什么Erlang比C慢那么多倍? - siyao
这是一篇流水账,记录了优化一个对 binary 操作的 Erlang 程序,然后发现真正瓶颈所在的过程。本文纯粹是流水账,没有什么结论,只是觉得 Erlang 很好玩:)
2013-12-22T08:51:00Z
2013-12-22T08:51:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】这是一篇流水账,记录了优化一个对 binary 操作的 Erlang 程序,然后发现真正瓶颈所在的过程。本文纯粹是流水账,没有什么结论,只是觉得 Erlang 很好玩:) <a href="https://www.cnblogs.com/zhengsyao/p/why_is_erlang_slow_revcomp_example.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/profiling_beam_debug_line_info.html
Profile 分析 Erlang 虚拟机源码时要注意的一个问题 - siyao
在对 Erlang 虚拟机做 profiling 的时候,发现在 Vtune 中会出现源代码和汇编指令映射错误的现象。本文分析了这种映射错误的原因,那就是在源码文件中 #include 了另外的源码,所以编译器记录的是另外源码的行号。解决方法是手工将被 #include 的源码文件拷贝到被分析的源码中。
2013-12-07T15:48:00Z
2013-12-07T15:48:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】在对 Erlang 虚拟机做 profiling 的时候,发现在 Vtune 中会出现源代码和汇编指令映射错误的现象。本文分析了这种映射错误的原因,那就是在源码文件中 #include 了另外的源码,所以编译器记录的是另外源码的行号。解决方法是手工将被 #include 的源码文件拷贝到被分析的源码中。 <a href="https://www.cnblogs.com/zhengsyao/p/profiling_beam_debug_line_info.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/erlang_process_preemption_conditions.html
Erlang 进程被抢占的条件——一个进程长时霸占调度器的极端示例 - siyao
本文简单探讨了一下 Erlang 调度器发生进程抢占的条件,然后通过示例展示 Erlang 在大部分情况下都是能做到软实时的,但是在某些极端情况下一些 misbehave 的进程会阻塞整个调度器。本文不纠细节,只是提供一个感性的认识。
2013-12-01T14:47:00Z
2013-12-01T14:47:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】本文简单探讨了一下 Erlang 调度器发生进程抢占的条件,然后通过示例展示 Erlang 在大部分情况下都是能做到软实时的,但是在某些极端情况下一些 misbehave 的进程会阻塞整个调度器。本文不纠细节,只是提供一个感性的认识。 <a href="https://www.cnblogs.com/zhengsyao/p/erlang_process_preemption_conditions.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_5_binary.html
Erlang数据类型的表示和实现(5)——binary - siyao
本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第五部分:binary。
2013-12-01T10:15:00Z
2013-12-01T10:15:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第五部分:binary。 <a href="https://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_5_binary.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_4_boxed.html
Erlang数据类型的表示和实现(4)——boxed 对象 - siyao
本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第四部分:boxed 对象。
2013-12-01T10:12:00Z
2013-12-01T10:12:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第四部分:boxed 对象。 <a href="https://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_4_boxed.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_3.html
Erlang数据类型的表示和实现(3)——列表 - siyao
本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第三部分:列表。
2013-11-14T16:41:00Z
2013-11-14T16:41:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第三部分:列表。 <a href="https://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_3.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_2.html
Erlang数据类型的表示和实现(2)——Eterm 和立即数 - siyao
本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第二部分:Eterm 和立即数
2013-11-14T16:40:00Z
2013-11-14T16:40:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第二部分:Eterm 和立即数 <a href="https://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_2.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_1.html
Erlang数据类型的表示和实现(1)——数据类型回顾 - siyao
本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第一部分:Erlang 数据类型回顾。
2013-11-14T16:38:00Z
2013-11-14T16:38:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】本系列介绍 Erlang 语言中使用的各种数据类型以及这些数据类型在 Erlang 虚拟机内部的表示和实现。了解数据类型的实现可以帮助大家在实际开发过程中正确选择数据类型,并且可以更好更高效地操作这些数据类型。本文对 Erlang 数据类型及实现的总结目前是最全面的,可以作为 Erlang 数据结构的参考手册。尽管我写的内容都试图在各种参考资料和 Erlang 虚拟机源代码中验证,但是难免会有理解错误或各种低级错误,希望大家指正,也希望能对 Erlang 爱好者们有帮助。第一部分:Erlang 数据类型回顾。 <a href="https://www.cnblogs.com/zhengsyao/p/erlang_eterm_implementation_1.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/erts_lock_free_queue.html
Erlang运行时中的无锁队列及其在异步线程中的应用 - siyao
本文首先介绍 Erlang 运行时中需要使用无锁队列的场合,然后介绍无锁队列的基本原理及会遇到的问题,接下来介绍 Erlang 运行时中如何通过“线程进度”机制解决无锁队列的问题,并介绍 Erlang 运行时中提供的一个通用无锁队列的实现及其在 ERTS 异步线程池中的应用。
2013-10-29T16:08:00Z
2013-10-29T16:08:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】本文首先介绍 Erlang 运行时中需要使用无锁队列的场合,然后介绍无锁队列的基本原理及会遇到的问题,接下来介绍 Erlang 运行时中如何通过“线程进度”机制解决无锁队列的问题,并介绍 Erlang 运行时中提供的一个通用无锁队列的实现及其在 ERTS 异步线程池中的应用。 <a href="https://www.cnblogs.com/zhengsyao/p/erts_lock_free_queue.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/how_erlang_does_scheduling_translation.html
Erlang的调度原理(译文) - siyao
一篇从调度原理的角度探讨为什么Erlang能做到低延迟的文章的译文。
2013-10-21T12:56:00Z
2013-10-21T12:56:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】一篇从调度原理的角度探讨为什么Erlang能做到低延迟的文章的译文。 <a href="https://www.cnblogs.com/zhengsyao/p/how_erlang_does_scheduling_translation.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/mcs_lock_scalable_spinlock.html
MCS锁——可伸缩的自旋锁 - siyao
自旋锁是并发程序中小临界区同步常使用的技术。本文先介绍最简单的自旋锁实现,然后介绍在核心数比较多的多核环境中简单自旋锁的问题,并引入介绍可伸缩的MCS自旋锁。最后在60核的Xeon Phi协处理器上测试了二者的性能。小小自旋锁,也有不少学问哦!
2013-10-19T09:35:00Z
2013-10-19T09:35:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】自旋锁是并发程序中小临界区同步常使用的技术。本文先介绍最简单的自旋锁实现,然后介绍在核心数比较多的多核环境中简单自旋锁的问题,并引入介绍可伸缩的MCS自旋锁。最后在60核的Xeon Phi协处理器上测试了二者的性能。小小自旋锁,也有不少学问哦! <a href="https://www.cnblogs.com/zhengsyao/p/mcs_lock_scalable_spinlock.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/p/the_art_of_multiprocessor_programming_notes.html
The Art of Multiprocessor Programming读书笔记 (更新至第3章) - siyao
这份笔记是我2013年下半年以来读“The Art of Multiprocessor Programming”这本书的读书笔记。作为一本好书,它总结了这个领域自发展以来的大量重要成果,介绍了共享内存同步的基本理论,并介绍了大量并发算法和数据结构(主要是无锁算法),包括并发队列、栈、链表、计数器、排序网络、散列、跳表、优先队列等。我决定用自己的语言把这本书的重要内容复述一遍,其中也加入了自己的一些想法和理解,希望这份笔记能对这本书的其他读者有帮助,也希望能对所有对共享内存同步的朋友们有帮助,这份笔记本身也能作为共享内存式同步的教程,但是笔记本身不能取代原书。由于本人才疏学浅缺乏经验,因此其中必定有不少谬误,望各路大牛批评指正多多交流。
2013-10-17T03:02:00Z
2013-10-17T03:02:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】这份笔记是我2013年下半年以来读“The Art of Multiprocessor Programming”这本书的读书笔记。作为一本好书,它总结了这个领域自发展以来的大量重要成果,介绍了共享内存同步的基本理论,并介绍了大量并发算法和数据结构(主要是无锁算法),包括并发队列、栈、链表、计数器、排序网络、散列、跳表、优先队列等。我决定用自己的语言把这本书的重要内容复述一遍,其中也加入了自己的一些想法和理解,希望这份笔记能对这本书的其他读者有帮助,也希望能对所有对共享内存同步的朋友们有帮助,这份笔记本身也能作为共享内存式同步的教程,但是笔记本身不能取代原书。由于本人才疏学浅缺乏经验,因此其中必定有不少谬误,望各路大牛批评指正多多交流。 <a href="https://www.cnblogs.com/zhengsyao/p/the_art_of_multiprocessor_programming_notes.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/archive/2013/01/27/erts_thread_progress.html
Erlang运行时源码分析之——线程进度机制 - siyao
线程进度机制是Erts 5.9引入的一项性能改进,是Erlang运行时面向多核处理器的优化措施之一。线程进度机制可以跟踪所有受管的线程的进度,以此判断线程是否完成了某个进度点的执行。Erlang运行时中的系统阻塞功能被新的基于这项机制的系统阻塞功能替代。基于这项机制,Erlang运行时还实现了无锁的同步数据结构,未来Erlang运行时会越来越多地采用无锁数据结构。本文分析了这项机制的基本原理,详细分析了运行时中相关的数据结构和源代码,还分析了全新系统阻塞功能的实现。
2013-01-26T16:54:00Z
2013-01-26T16:54:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】线程进度机制是Erts 5.9引入的一项性能改进,是Erlang运行时面向多核处理器的优化措施之一。线程进度机制可以跟踪所有受管的线程的进度,以此判断线程是否完成了某个进度点的执行。Erlang运行时中的系统阻塞功能被新的基于这项机制的系统阻塞功能替代。基于这项机制,Erlang运行时还实现了无锁的同步数据结构,未来Erlang运行时会越来越多地采用无锁数据结构。本文分析了这项机制的基本原理,详细分析了运行时中相关的数据结构和源代码,还分析了全新系统阻塞功能的实现。 <a href="https://www.cnblogs.com/zhengsyao/archive/2013/01/27/erts_thread_progress.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/archive/2013/01/16/erts_rwmutex.html
Erlang 运行时中使用的读写锁解析 - siyao
本文介绍了Erts中使用的读写锁(rwmutex)的原理和实现。在R14B中,Erts的读写锁进行了一次重要的性能更新,本文对这一次更新的优化进行了描述。此外还简单介绍了一下代码中使用的基本模式。
2013-01-16T14:43:00Z
2013-01-16T14:43:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】本文介绍了Erts中使用的读写锁(rwmutex)的原理和实现。在R14B中,Erts的读写锁进行了一次重要的性能更新,本文对这一次更新的优化进行了描述。此外还简单介绍了一下代码中使用的基本模式。 <a href="https://www.cnblogs.com/zhengsyao/archive/2013/01/16/erts_rwmutex.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/zhengsyao/archive/2013/01/04/classical_mutual_exclusion_algorithms.html
经典互斥算法解析 - siyao
本文用较为轻松的方式介绍了几个经典的互斥算法: Dekker 算法、Dijkstra 提出的算法、Peterson 算法和面包店算法,并简单地给出了每一个算法的正确性证明和相关的讨论。
2013-01-04T08:47:00Z
2013-01-04T08:47:00Z
siyao
https://www.cnblogs.com/zhengsyao/
【摘要】本文用较为轻松的方式介绍了几个经典的互斥算法: Dekker 算法、Dijkstra 提出的算法、Peterson 算法和面包店算法,并简单地给出了每一个算法的正确性证明和相关的讨论。 <a href="https://www.cnblogs.com/zhengsyao/archive/2013/01/04/classical_mutual_exclusion_algorithms.html" target="_blank">阅读全文</a>