小改动,大提升

2019年的收尾之作。

Carlo Alberto Ferraris提交了一个对math/rand库中的lockedSource优化的pr(CL#191538),核心代码其实只有一行,却带来了相对的巨大的性能提升,让我们一起老看看这次的修改,学习一下代码的优化技巧,提高我们Go语言的底层优化经验。

阅读全文

谁拔了我的网线?

Go编写网络程序非常的高效,而且有是那么的简单,寥寥几行代码就可以写一个ECHO协议的程序,所以现在很多网络程序都采用Go语言开发。但是网络状况是复杂的,会有很多的异常状况,如果不能很好和正确的处理这些异常状况,会导致网络程序出现莫名其妙的现象,或者hang住。

本文尝试探讨几种网络异常的情况,研究在这些情况下客户端和服务端的的行为,包括连接断掉的检测能力、half-close情况下两端的读写能力、丢包的情况等等。

这是我首次采用微课的方式分享技术内容,本文是视频内容的整理版。 本来是想录制一个10分钟的视频,一不小心录制了半小时。

阅读全文

[转][译]Linux 网络栈监控和调优:发送数据(2017)

这是一个关于Linux网络监控和调优系列文章的第二篇,详尽的介绍了网络知识的各个方面,得到了广泛的转发和称赞,也被翻译成了多个中文版。本文转载的是携程的ArthurChiao翻译的版本,翻译通顺,还很有心的加上了章节,更方便阅读。他还翻译很多有价值的文章,读者可以到他的网站上阅读。

英文原文: Monitoring and Tuning the Linux Networking Stack: Sending Data

中文翻译: [译] Linux 网络栈监控和调优:发送数据(2017)

阅读全文

[转][译] Linux 网络栈监控和调优:接收数据(2016)

这是一个关于Linux网络监控和调优系列文章的一篇,详尽的介绍了网络知识的各个方面,得到了广泛的转发和称赞,也被翻译成了多个中文版。本文转载的是携程的ArthurChiao翻译的版本,翻译通顺,还很有心的加上了章节,更方便阅读。他还翻译很多有价值的文章,读者可以到他的网站上阅读。

英文原文: Monitoring and Tuning the Linux Networking Stack: Receiving Data

中文翻译: [译] Linux 网络栈监控和调优:接收数据(2016)

这让我不禁想起前两年很火的话题: “当你在浏览器中访问一个网址的时候,背后发生了什么?”,有多种多样的回答,将细节掰的很细,但是我还没有看到一篇能将网络连接和传输介绍的像本文这么细的文章。

阅读全文

[译]配置 MySQL 主主复制

原文: How to Setup MySQL Master Master Replication by Andy Hayes。

MySQL 主-主 复制 (master master replication), 也叫做 mysql chained replicationmulti master replicationmysql daisy chaining replication, 它是MySQL复制功能的扩展(普通复制功能见文章下半部分),允许创建多个主服务器,并且主服务器可以绑定多个从服务器。

本文介绍设置主-主复制的方法。

阅读全文

妙到颠毫: bigcache优化技巧

最近看到 yoko 翻译的一篇文章: [译] Go开源项目BigCache如何加速并发访问以及避免高额的GC开销, 翻译自 How BigCache avoids expensive GC cycles and speeds up concurrent access in Go, 应该是 Douglas Makey Mendez Molero 在阅读了 bigcache 的作者写的 bigcache设计文章Writing a very fast cache service with millions of entries in Go做的一些调研和总结。

我在刚读取这篇文档的时候,顺着连接把相关的文章都找出来细细读了一遍,结合bigcache的代码,仔细学习了相关的优化设计,感觉设计非常的精妙,所以特意根据自己的理解又总结了一篇。

bigcache的精妙的设计也吸引了fasthttp的作者Aliaksandr Valialkin,他在bigcache的基础上,结合自己的公司的使用场景,进一步的做了相应的优化, 也开源了这个项目fastcache, 本文在最后也做了介绍。

阅读全文

[译]Golang template 小抄

这是 Curtis Vermeeren 做的 Go模板技术的小抄,这是我非常喜欢的形式,可以以一个简短的总结把相关的技术介绍出来。 大家可以看我以前翻译的Go文件操作大全,也是统一风格的文章。我翻译了这篇文章,补充了遗漏的知识点。

Go标准库提供了几个package可以产生输出结果,而text/template 提供了基于模板输出文本内容的功能。html/template则是产生 安全的HTML格式的输出。这两个包使用相同的接口,但是我下面的例子主要面向HTML应用。

阅读全文

Rust每周一库: matches!

每周一个 rust 库的时间到了,今天要介绍的是matches库。

最近Patrick Walton分析了crates.io上的500个rust库,对这些库按照某个维度计算了分数进行排名,其中一个分数就是根据它的流行度和它的大小计算一个分数进行排名,用来挑选小而美的rust库,这些库可以移植到标准库中,或者可以汇总到一个大库中。这个指数叫做left-pad index, 这个排名文件可以在这里找到。

left-pad是2016年nodejs圈发生的一个非常著名的事件。left-pad是一个只有17行的npm代码库,却被很多的代码库所使用,包括 babel 这样的热门项目。作者 Azer 将其从npm删除后,所有直接或者间接依赖这个模块的 NPM 包就悲剧的挂掉了,影响广泛。 原因在于作者写了一个叫 kik 的工具和某个公司同名了,这天公司的律师要求其删掉这个模块,把 kik 这个名字“让”给他们,作者不答应,律师就直接找 NPM 了,而 NPM 未经作者同意就把包的权限转移给了这家公司。于是,Azer 一怒冲冠,将他所有的 NPM 包全部删掉了。

所以Patrick Walton分析了crates.io库,对于那些代码量很小但是全被广泛应用的库提出了讨论,这些库是不是应该移动到标准库中?

其中,排名第一的就是matches库。

阅读全文