bytes.Buffer

Posted by 夏泽民

Go标准库中的bytes.Buffer(下文用Buffer表示)类似于一个FIFO的队列,它是一个流式字节缓冲区。



load

Posted by 夏泽民

CPU负载和 CPU使用率 这两个从一定程度上都可以反映一台机器的繁忙程度.



缓存穿透,缓存击穿,缓存雪崩

Posted by 夏泽民

设计一个缓存系统,不得不要考虑的问题就是:缓存穿透、缓存击穿与失效时的雪崩效应。 缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。在流量大时,可能DB就挂掉了,要是有人利用不存在的key频繁攻击我们的应用,这就是漏洞。



内存屏障

Posted by 夏泽民

linux内核(4.0版本)的Documentation/memory-barriers.txt。 .1 内存访问的的抽象模型



atomic 原理

Posted by 夏泽民

在 Go 语言标准库中,sync/atomic包将底层硬件提供的原子操作封装成了 Go 的函数。但这些操作只支持几种基本数据类型,因此为了扩大原子操作的适用范围,Go 语言在 1.4 版本的时候向sync/atomic包中添加了一个新的类型Value。此类型的值相当于一个容器,可以被用来“原子地”存储(Store)和加载(Load)任意类型的值。 https://www.kancloud.cn/digest/batu-go/153537 https://docs.kilvn.com/The-Golang-Standard-Library-by-Example/chapter16/16.02.html https://www.codingsky.com/codebook/gobasic/ch7/atomic.html 历史起源 我在golang-dev邮件列表中翻到了14年的这段讨论,有用户报告了encoding/gob包在多核机器上(80-core)上的性能问题,认为encoding/gob之所以不能完全利用到多核的特性是因为它里面使用了大量的互斥锁(mutex),如果把这些互斥锁换成用atomic.LoadPointer/StorePointer来做并发控制,那性能将能提升20倍。



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required