Articles are paginated with only three posts here for example. You can set the number of entries to show on this page with the “pagination” setting in the config file.

深入理解ptmalloc的运作机制

1、前言

        一直对glibc的内存分配器的设计与实现感兴趣,之前一直没有下定决心以及抽出足够的时间进攻这个方向,最近抽出了几天对glibc的ptmalloc源码进行了梳理和研究,现在将研究成果梳理总结成文。
        为什么要写这篇文章?相信很多读者对系统是怎样管理内存感兴趣,通过深入研究ptmalloc,读者可以深刻了解到系统是怎样减少内存碎片,如何提升多线程环境下的内存分配和释放的性能,这对读者更好地进行系统编程有着直接或间接的帮助。本文立足于glibc 2.26的源码,为了方便读者理解和方便笔者书写,着重介绍概念和运作原理,不会贴大段的代码,各位看官大可放心食用。最有本人水平有限,如有书写不当的地方欢迎大家联系我修改,欢迎大家加入技术讨论群:QQ185017593。

[Read More]
C 

分代GC浅析

前言

        去年一年就出了一篇博客,整体上来说还是太忙了,又是赶项目又是忙出书的事情,趁着农历还没新年,忙里偷闲整一篇新的XD。本次想讨论的内容是分代GC(garbage collection,意为垃圾回收机制),关于GC相关的文章,之前在Lua解释器构建系列中已经出过一篇,不过那个是增进式GC(感兴趣的读者可以点击这个链接:构建Lua解释器Part2:Garbage Collection基础架构),本文想要讨论的则是分代GC。
        虽然本文写作的动机是在笔者阅读完Lua 5.4的GC源码之后,出于巩固知识的目的写的,但是笔者还是希望从更高的层次去讨论GC算法本身,因此会略去诸多Lua虚拟机相关的实现细节。本文将从GC的作用开始论述,介绍GC机制中常见的组成部件。首先通过简单的标记清除算法来引入GC的概念,然后逐步引入分步执行GC的概念和算法,最后以Lua 5.4所使用的分代GC算法为例,介绍工业级语言虚拟机是如何进行分代GC运作的。
        为了方便论述,本文不会完全遵循源码中的所有细节,旨在更好的解释分代GC这种机制,希望能让读者对分代GC有个比较深刻的理解,最后由于本人水平有限,如有不正确的地方,欢迎大家批评指正,笔者在此感激不尽。读者也可以加入笔者创建的Q群,QQ号为:185017593。

[Read More]

MongoDB初探

前言

        本篇内容是我阅读完MongoDB 4.2官方文档后的梳理总结,并且只是梳理。梳理的内容并不包含MongoDB官方文档的方方面面,更多的是与我们项目相关联的部分。本篇博客不是简单对官方文档的整理,其中包含了很多官方文档之外的资料,文章的脉络和结构,也是根据本人的理解进行组织。本文并不打算阐述太多MongoDB操作和部署相关的内容,更多的是梳理其内部的一些运作机制,如果想了解如何部署和使用MongoDB API,请查阅官网
        最后,由于本人水平有限,如有不当之处欢迎指出,同时也欢迎读者加入QQ:185017593群聊。

[Read More]

红黑树探索

前言

        在沉浸了一年多之后,我开始重新拾起了写博客的习惯。过去一年主要在忙我的书的事情,一本关于如何实现Lua解释器的书–《Lua解释器构建:从虚拟机到编译器》。这本书将由机械工业出版社出版,目前已经过了终审,处于校对环节,预计明年1月能够出样书,大概2月份能够上市。随书源码已经放到github上了,有兴趣的读者可以点击这里进行访问。由于我想写的内容已经在书中展现,因此原来的博客dummylua-tutorial系列不再更新。
        对书籍的预热结束,言归正传,本篇将深入探索红黑树。红黑树由于难于理解与实现,业内一直将“手撸红黑树”作为调侃的梗。本文将要探索的是红黑树的设计与实现,在开始写博客之前,我已经动手将红黑树实现了一遍,并且通过了预定的测试,确实是“手撸红黑树”了,XD。该项目我已经放到github上,读者可以通过这个链接red-black-tree进行下载。

[Read More]
C 

构建Lua解释器Part12:Weaktable

前言

        本章我开始论述lua的弱表(weaktable)机制,到目前为止,我已经完成了弱表的设计和实现了,读者可以在dummylua的对应章节目录,找到对应的代码工程。本章,我首先会介绍什么是弱表,它的用途,最后分别介绍弱键、弱值以及完全弱引用。

[Read More]

探索libevent

前言

        libevent是当前一个非常知名的跨平台网络库,学习并研究它,可以让我们理解一个优秀的网络库是如何设计的。为此,我近期花了几天时间,过了一遍libevent的基础数据结构和基本运行机制。虽然libevent库整体并不是很大,但是短短几天内要彻底掌握所有的细节,还是有相当的难度,因此这里,我只阐述libevent最核心的运作机制。本文研究的libevent的版本是libevent-2.1.12-stable。

[Read More]

构建Lua解释器Part11:Upvalue

前言

        本章,我将深入探讨lua的upvalue机制。在写这篇博客之前,我已经自己动手实现了这个机制,并且将其提交到了github仓库dummylua上了。为了专注于upvalue机制本身的讨论,本章不会展示大量的代码细节,尽量在抽象层面来论述。

[Read More]

构建Lua解释器Part10:userdata

前言

        本章节,我开始对dummylua的userdata的设计与实现,进行论述。它的大体设计与实现,仍然是仿照了lua5.3的标准,由于,所有的内容,都是我自己理解后,重新实现,因此在一些实现细节上略有不同,但是整体设计思路遵循了lua的设计思想。本章的篇幅不会很长,因为userdata这个部分并不是非常复杂,因此我这里也会速战速决,将userdata的一些核心思想论述清楚,就将本章完结。

[Read More]

构建Lua解释器Part9:metatable

前言

        本章,我们将进入到metatable的探索之中。由于这块本身比较简单,而且我也不打算罗列代码细节,因此本章的篇幅不会很大。只是对一些我认为比较关键的部分,进行说明。首先,本章的主要任务,首先是简要介绍metatable是做什么的,然后简要说明一下,它如何被设置,接着介绍metatable的访问域,双目运算操作域、单目运算操作域等。最后会告诉读者,本章的实现逻辑位于dummylua工程的哪些部位。

[Read More]

构建Lua解释器Part8:构建完整的语法分析器(下)

前言

        前面,我已经用3篇blog的巨大篇幅,详细论述了Lua编译模块的一些基本知识。其中,Part5通过一个简单的打印hello world的例子,论述了编译出来的虚拟机指令,如何存到Proto结构中,最后再通过虚拟机执行的流程。Part6详细论述了,词法分析器的设计与实现。而Part7则论述了,expression的编译流程。本章,将作为Lua内置编译器论述的最后一个部分。往后的部分,将不再涉及编译相关的内容。当然,经历这篇,相信读者能够完全理解Lua内置编译器的设计与实现,个人认为完整度还是比较高的。

[Read More]