从编译器以及系统结构的角度谈优化

关于性能优化,编译器和CPU一直在给我们负重前行,几行简简单单的代码背后可能是一套套令人拍案叫绝的理论和工程。

学习它们能深刻加强我们对计算机体系结构的理解,但并不是简单一篇文章就能揭开出所有的面纱。所以这篇文章可能更“功利”些,虽然会以系统结构、编译理论的视角出发,但只局限于那些可能对上层开发者而言不那么透明、需要关注的一些要点。

阅读全文

用Go写了一个编程语言

前两个月莫名的对编译原理产生了浓厚的兴趣,刷完相关理论知识后,于是迫不及待地动手用Go写了个脚本语言gscript,麻雀虽小但五脏俱全,目前已经支持现代编程语言的大部分特性,这篇博客记录下实践过程中碰到的难点以及解决思路。

阅读全文

一个系列彻底搞懂map(终):并发安全map

并发安全的map在日常开发中使用极为频繁,单纯通过map与sync.RWLock结合并给整个map上粗粒度锁的方式效率并不高。在go1.9中引入sync.Map,通过快慢路径的方式提升并发读性能,除此之外还可以用大锁打为小锁的方式减少并发冲突,获得更优的性能表现。

阅读全文

一个系列彻底搞懂map(二):红黑树实现

上文讲到了利用哈希结构实现map,除此之外还可以用红黑树实现。相较于hash结构的实现,红黑树实现虽然查找删除的时间复杂度由O(1)退化为O(logN),但却拥有更优的空间效率,同时还提供了对key排序的功能,因此广泛应用于数据库存储领域。

阅读全文

手撕数据结构——平衡二叉树

二叉搜索树提供了平均效率为O(logN)级别的查找、删除、插入操作,但在极端情况下可能导致二叉树退化为单链表。平衡二叉树作为二叉搜索树的一种,通过平衡约束保证左右子树高度相近,能够保证更稳定的性能。本文就从原理出发,最终实现一个操作完备的平衡二叉树。

阅读全文

一个系列彻底搞懂map(一):hash表

map映射结构频繁地运用在日常的开发之中,因此成为了面试中的高频考点,本系列将从map的两种实现(hash以及红黑树)出发,再详解go语言的map,最后讨论如何实现高性能的并发安全map,彻底搞懂map结构的奥秘。

阅读全文

go语言从0实现net/http标准库(六):response

以框架目前的完成度来说,handler中还需要我们手动的构建http响应报文,不仅麻烦而且容易出错。因此我们今天就要完成对response的封装,提供更易操作的api以及完成对响应报文的自动构建。本文难度较高,是该系列的最后一个难点。

阅读全文