MOSN热升级逻辑浅析

2023-02-06
阅读 14 分钟
2k
Envoy: Envoy对端口监听(Listener)进行了迁移,但是对建立的连接(connection)则通过命令的方式,进行主动断开重连

深入解析raftexample,理解raft协议

2022-08-03
阅读 52 分钟
2.4k
说到raftexample,很多人可能很陌生,我知道raft,我也知道example,哪来的raftexample?这里做下简单的介绍,raftexample是etcd里面 raft模块实现的简单示例,它实现了一个简单的基于raft协议的kvstore存储集群系统,并提供了rest api以供使用
封面图

LevelDB(go版本)架构设计解析

2021-07-04
阅读 9 分钟
7k
leveldb 的写操作并不是直接写入磁盘的,而是首先写入到内存。假设写入到内存的数据还未来得及持久化,leveldb 进程发生了异常,或者是宿主机此时发生了宕机,会造成用户写入数据发生丢失。因此 leveldb 在写内存之前会首先将所有的写操作写到日志文件中,也就是 log 文件。当进程出现异常的时候,可以通过log来进行恢复...
封面图

GORM之for(rows.Next)提前退出别忘了Close

2020-01-05
阅读 19 分钟
6.1k
近期一同事负责的线上模块,总是时不时的返回一下 504,检查发现,这个服务的内存使用异常的大,pprof分析后,发现有上万个goroutine,排查分析之后,是没有规范使用gorm包导致的,那么具体是什么原因呢,会不会也像 《Go Http包解析:为什么需要response.Body.Close()》 文中一样,因为没有释放连接导致的呢?

GORM之ErrRecordNotFound采坑记录

2019-12-22
阅读 13 分钟
18.6k
在我印象中有个错误的认知:如果GORM没有找到record,则会返回ErrRecordNotFound 的错误,知道上次业务中出现了bug,我才发现这个印象中的认知是错误的,且没有官方文档的支持。那么,ErrRecordNotFound 到底在什么时候返回呢,这篇文章将会根据源码来进行分析一下

Go map原理剖析

2019-10-08
阅读 31 分钟
5.2k
在使用map的过程中,有两个问题是经常会遇到的:读写冲突和遍历无序性。为什么会这样呢,底层是怎么实现的呢?带着这两个问题,我简单的了解了一下map的增删改查及遍历的实现。

深入理解Go-sync.Map原理剖析

2019-09-08
阅读 8 分钟
5.9k
Map is like a Go map[interface{}]interface{} but is safe for concurrent useby multiple goroutines without additional locking or coordination.Loads, stores, and deletes run in amortized constant time.

深入理解Go-runtime.SetFinalizer原理剖析

2019-09-08
阅读 14 分钟
9.7k
finalizer是与对象关联的一个函数,通过runtime.SetFinalizer 来设置,它在对象被GC的时候,这个finalizer会被调用,以完成对象生命中最后一程。由于finalizer的存在,导致了对象在三色标记中,不可能被标为白色对象,也就是垃圾,所以,这个对象的生命也会得以延续一个GC周期。正如defer一样,我们也可以通过 Finalizer...

深入理解Go-defer的原理剖析

2019-09-06
阅读 11 分钟
4k
defer 也是Go里面比较特别的一个关键字了,主要就是用来保证在程序执行过程中,defer后面的函数都会被执行到,一般用来关闭连接、清理资源等。

深入理解go-channel和select的原理

2019-09-04
阅读 28 分钟
7.9k
Go最吸引人的两个地方,除了goroutine,也就是channel了,同时,我一直很纳闷,select到底是怎么实现的?跟我之前的文章一样,部分无关的代码直接省略

深入理解Go-goroutine的实现及Scheduler分析

2019-09-01
阅读 44 分钟
9.1k
在学习Go的过程中,最让人惊叹的莫过于goroutine了。但是goroutine是什么,我们用go关键字就可以创建一个goroutine,这么多的goroutine之间,是如何调度的呢?

Go Http包解析:为什么需要response.Body.Close()

2019-08-15
阅读 30 分钟
38k
最近线上的一个项目遇到了内存泄露的问题,查了heap之后,发现 http包的 dialConn函数竟然占了内存使用的大头,这个有点懵逼了,后面在网上查询资料的时候无意间发现一句话

深入理解Go-垃圾回收机制

2019-08-15
阅读 51 分钟
25.6k
Go的GC自打出生的时候就开始被人诟病,但是在引入v1.5的三色标记和v1.8的混合写屏障后,正常的GC已经缩短到10us左右,已经变得非常优秀,了不起了,我们接下来探索一下Go的GC的原理吧

Go学习之Channel的一些模式

2019-08-15
阅读 5 分钟
4.8k
除了在goroutine之间安全的传递数据之外,在看了《Concurrency in Go》之后,感慨channel还有那么多模式可供使用,在个人的学习中总结了以下几种常用的模式

Go学习之Channel总结

2019-08-15
阅读 5 分钟
4.7k
Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。

深入理解Go-内存分配

2019-08-15
阅读 31 分钟
6.5k
Go语言内置运行时(就是runtime),抛弃了传统的内存分配方式,改为自主管理,最开始是基于tcmalloc,虽然后面改动相对已经很大了。使用自主管理可以实现更好的内存使用模式,比如内存池、预分配等等,从而避免了系统调用所带来的性能问题。

深入理解Go-逃逸分析

2019-08-15
阅读 3 分钟
5.3k
How do I know whether a variable is allocated on the heap or the stack?From a correctness standpoint, you don't need to know. Each variable in Go exists as long as there are references to it. The storage location chosen by the implementation is irrelevant to the semantics of the language. The sto...

Go的调试工具:gdb vs dlv

2019-08-15
阅读 7 分钟
9.9k
GoLand编辑器虽然很强大,但是在展示内存及堆栈信息这一块还是比较的弱,有可能是我的姿势不对,所以,开始切入了gdb调试,但是gdb踩到了坑,并没有解决,也就引发了gdb与dlv的对比了

Go值拷贝的一些思考

2019-08-15
阅读 2 分钟
4.1k
In a function call, the function value and arguments are evaluated in the usual order. After they are evaluated, the parameters of the call are passed by value to the function and the called function begins execution.