想到什么写什么周报 第32期 - 2018-08-04
How the Go runtime implements maps efficiently (without generics)
https://dave.cheney.net/2018/05/29/how-the-go-runtime-implements-maps-efficiently-without-generics
前半部分介绍了hashmap的基本概念,后半部分介绍了Go的runtime如何实现map key的hash计算。Go没有泛型,也不是用interface{}
来实现。map操作的实现会编译器重写为对runtime函数的调用,比如runtime.mapaccess1()
。然后使用一个结构体maptype来保存key的信息,因为编译的时候就能知道key的类型,所以会为不同类型的key指定好hash函数,在运行的时候直接调用即可。
Verifying PostgreSQL backups made easier with new open-source tool
Google Cloud开源了自己开发的Postgres backup校验工具,使用Postgres的checksum功能来校验一个backup数据是否正确。Checksum功能需要在初始化数据库的时候开启,initdb --data-checksums
。
XARs: An efficient system for self-contained executables
基于一种基于FUSE的按需加载文件系统的思想来实现数据包的分发。基本思路是把要打包的应用、依赖以及数据,放到一个squashfs archive中,然后在要运行的时候使用FUSE挂载,然后执行。对于Python来说,这个squashfs中已经包含了virtualenv环境,所以对运行的操作系统没有依赖。基于同样的思路,也可以用来打包Node或者Lua应用。
Gracefully Scaling to 10k PostgreSQL Connections for $35/mo
介绍了PgBouncer的使用和配置。
Do You Know the New Names for Linux Network Interfaces?
https://blog.learningtree.com/new-names-linux-network-interfaces/
介绍了Linux下的网络设备名称为什么从 eth0变成 enp2s0这种。
Portable Cloud Programming with Go Cloud
https://blog.golang.org/go-cloud
Google推出了Go Cloud。Go Cloud是一套开源框架,目的是帮助用户实现可以跨云的应用程序。基本思路就是用户只有在云服务的设置逻辑上调用不同云的SDK,而使用云资源的时候,则不需要区分是哪个云。这么做的好处是,主要的业务逻辑都是在资源的使用上的,云服务的设置逻辑其实很少。所以能减少用户的重复代码。
The right way to handle YAML in Go
http://ghodss.com/2014/the-right-way-to-handle-yaml-in-golang/
原来YAML可以简写成JSON的形式,然后用 json.Unmarshal()
来解析到一个结构体。
Go code refactoring : the 23x performance hunt
https://medium.com/@val_deleplace/go-code-refactoring-the-23x-performance-hunt-156746b522f7
介绍如何一步一步的优化一个简单的程序,以获得23倍的性能提升。