源码解析
文章平均质量分 96
_ Echo_
一个gopher,一个游戏服务器开发的gopher
展开
-
「Golang」 Map源码解析
文章目录Map哈希表设计及哈希碰撞解决方式哈希函数哈希碰撞开放地址法链表法Go中的Map概述数据结构构建Map构建方式1--小型Map堆分配构建方式2--小型Map栈分配常规构建方式--Make的len>8或Key-Value个数>8总结Map的读写Map的写入/删除Map的写入解析Map写入操作过程的总结Map的扩容Map扩容过程的总结Map的删除解析Map删除过程的总结Map的读取Map读取的总结总结MapMap通常称哈希表(Hash Table)、散列表等,是根据键(Key)而直接访问原创 2021-01-27 22:50:03 · 960 阅读 · 0 评论 -
「Golang」Channel解析
Channel描述Channel(通道)是在golang并发编程中用的最多的一个数据结构(也可以说是基础类型),在go中,作者在并发编程的环境下对于数据之间的共享提出了一个建议,也是go的经典开发准则:Do not communicate by sharing memory; instead, share memory by communicating.不要通过共享内存来通信,而应该通过通信来共享内存在通信方面,Channel给我们提供了一个很好的在并发编程环境中进行多Goroutine之间的数原创 2021-01-20 13:58:44 · 1597 阅读 · 0 评论 -
「Golang」sync.Pool的源码解析
前言在平时我们的业务逻辑中,会出现多次,重复的申请在堆上创建的对象用作他用,当并发量不大的时候,可能往往并不会产生一些什么问题,当时一旦当并发量增长的时候就会发现因为重复在堆上创建对象导致了GC的扫描时间与STW(stop-the-world)很长,导致程序性能的降低,因为大量地创建在堆上的对象,也会影响垃圾回收标记的时间,因此来说频繁的在堆上申请对象说对高并发量的程序性能会产生很大的影响。此时我们可以采用对象池的方式,去针对某些频繁的且大量重复申请的对象预先的创建或者将用完的对象放回对象池中,以便下回原创 2021-01-03 16:16:51 · 258 阅读 · 0 评论 -
「Golang」sync.Once用法以及源码讲解
前言在我们开发过程中经常会使用到单例模式这一经典的设计模式,单例模式可以帮助开发者针对某个(些)变量或者对象或者函数(方法)进行在程序运行期间只有一次的初始化或者函数调用操作,比如在开发项目中针对某一类连接池的初始化(如数据库连接池等)。针对这种情况,我们就需要使用单例模式进行操作。单例模式????自己搞得单例模式要实现一个单例模式,我们会很快就想到了在一个结构体中放置一个flag字段用于标记当前的函数是否被执行过,举个????:type SingletonPattern struct {原创 2020-12-20 17:18:09 · 551 阅读 · 2 评论 -
「Golang」Slice源码讲解
【Golang】Slice源代码解析前言 在golang中有很多的数据结构是很常用的数据结构,比如array,slice,map等,其中最为常用的就是array和slice还有map了,理论上来讲array和slice在数据结构上是一种结构,都是顺序表结构,但是由于array的固定长度特性,在有些时候对于需要动态的长度的使用情况很不友好,此时就需要利用slice进行对固定长度数组的代替什么是Slice官方解释如下: Slices wrap arrays to give a原创 2020-12-18 16:00:24 · 769 阅读 · 2 评论 -
「Golang」sync.WaitGroup源码讲解
sync.WaitGroup介绍当我们在开发过程中,经常需要在开启多个goroutine后,等待全部的goroutine执行完毕后才进行下一步的业务逻辑执行。此时我们可能会采用轮询的方式去定时侦测已经开启的多个goroutine的业务是否执行完毕,但是这样性能很低,并且持续占用cpu时间片很消耗cpu的资源,此时我们就该使用sync.WaitGroup来完成此次操作。举个????,下列代码是开了10个goroutine后等待其各睡眠5秒之后进行后续操作的sync.WaitGroup方法实现。func m原创 2020-12-13 15:06:37 · 322 阅读 · 1 评论 -
「Golang」sync.RWMutex源码讲解
什么是sync.RWMutex上次写过了sync.Mutex的源代码解析,这回写一下他的扩展版本,sync.RWMutex(下称读写锁)的源代码解析,首先看一下读写锁的作用,如下述:sync/rwmutex.go中// A RWMutex is a reader/writer mutual exclusion lock.// The lock can be held by an arbitrary number of readers or a single writer.白话来讲,读写锁就是一原创 2020-12-06 17:11:26 · 399 阅读 · 0 评论 -
「Golang」 sync.Mutex源码讲解
sync.Mutex概述 在进行源码解析之前,先看一下sync.Mutex是做什么的,首先看一下sync/mutex.go中的标注A Mutex is a mutual exclusion lock.The zero value for a Mutex is an unlocked mutex. A Mutex must not be copied after first use.译注:Mutex是互斥锁,Mutex的零值是解锁的Mutex。Mutex在第一次使用后不得复制。 从sync.原创 2020-11-29 16:52:12 · 380 阅读 · 2 评论