在Golang的FAQ中,解释了为什么goroutine
是匿名的,没有暴露出ID等状态信息,主要是因为如果一个特定的goroutine
有了名字(ID),开发者就会忽略使用多个goroutine
来处理信息的可能,从而限制库的使用。
但是,有时候开发者也需要获取goroutine
来进行特定的操作。本文介绍如何从堆栈信息中获取goroutine信息。
在Golang的FAQ中,解释了为什么goroutine
是匿名的,没有暴露出ID等状态信息,主要是因为如果一个特定的goroutine
有了名字(ID),开发者就会忽略使用多个goroutine
来处理信息的可能,从而限制库的使用。
但是,有时候开发者也需要获取goroutine
来进行特定的操作。本文介绍如何从堆栈信息中获取goroutine信息。
缓存(cache)利用是空间局部性(Locality of reference):最近被访问的元素很有可能在将来也被访问,从而将结果缓存起来,避免更加耗时的查询(例如,数据库的查询操作,网页图片,网页格式的加载等)。
本文主要讲对数据库查询的缓存。
本文代码在我的Github仓库,欢迎给star。
代码实现参考了hyperloglog的维基百科
日常开发中,有时候需要对大量的数据集进行去重计数的工作,这是非常耗费计算资源的。比如说,需要计算某个视频/文章的观看用户数,由于同个用户可能在一天之内多次观看,使用要进行去重操作。如果使用一个hash集合保存用户的id,不仅耗费大量存储空间,也耗费计算的时间。
HyperLogLog
适用于数量很大,能容忍少量错误率的去重计数操作,它使用的存储空间非常小,几十字节就能对百万以上的数据进行去重计数。