go
文章平均质量分 80
go
亚洲第一中锋_哈达迪
这个作者很懒,什么都没留下…
展开
-
深入理解 sync.RWMutex 实现原理
读写锁sync.RWMutex,是互斥锁Mutex的一个改进版,适用于读取数据频率远大于写数据频率的场景例如,程序中写操作少而读操作多,如果执行过程是1次写然后N次读的话,使用Mutex这个过程将是串行的,带来的问题是:即便N次读操作互相之间并不影响,也需要获取到Mutex后才可以操作。如果使用读写锁,多个读操作可以同时持有锁,将大大提升并发能力一个协程拥有写锁时,其他协程获取写锁需要阻塞一个协程拥有写锁时,其他协程获取读锁需要阻塞一个协程拥有读锁时,其他协程获取写锁需要阻塞。原创 2023-06-02 22:32:44 · 617 阅读 · 0 评论 -
深入理解 Go sync.Map
sync.Map是线程安全的通过只读和可写分离,使得查询,更新已存在key的value不需要加锁随着程序的运行,dirty和read的差距会越来越大,使得需要加锁访问dirty的概率变大,效率也下降。因此当misses达到阈值时,将dirty提升为read,减低加锁的概率提升后第一次新增键值对时,会将read浅拷贝一份成为dirty,但会过滤掉entry为nil的键值对当 dirty 为 nil 的时候,read 就代表 map 所有的数据;原创 2023-05-19 23:34:17 · 490 阅读 · 0 评论 -
Go 连接池的设计与实现
如果不用连接池,而是每次请求都创建一个连接是比较昂贵的,因此需要完成3次tcp握手同时在高并发场景下,由于没有连接池的最大连接数限制,可以创建无数个连接,耗尽文件描述符连接池就是为了复用这些创建好的连接原创 2023-04-08 13:18:17 · 913 阅读 · 0 评论 -
Golang 如何下载ftp文件
由于不是http协议,不能用go自带的http.client下载因此本文介绍如何下载,读取ftp文件。原创 2023-04-03 23:21:08 · 1121 阅读 · 0 评论 -
深入理解 Go map (3)—— 遍历
如果map正在扩容中,且是两倍扩容方式,如果当前遍历的新桶对应的老桶还没迁移,只去遍历老桶中将来会迁移到该新桶中的元素。位置上得值是否为0,根据刚才的分析可知,SP+280位置代表hiter变量,那么同时也代表其第一个字段,也就是。这样,即使你是一个写死的 map,仅仅只是遍历它,也大概率不会返回一个固定序列的。如果遍历完了,即bucket又回到了startBucket时,将key,elem设为空,返回。主要是维护遍历过程中必须要知道的信息,比如遍历的进度,当前遍历的key/value是什么。原创 2023-03-24 00:16:31 · 988 阅读 · 0 评论 -
深入理解 Go map (1)—— 基本原理
如果小于8个,则会消耗更多空间,且需要不断的去溢出桶中找,两个桶的空间不是一块分配的,因此大概率不在一个cpu cache中,效率也会降低。定位到桶后,用hash的高8位去桶bmap的tophash数组中挨个匹配,如果匹配成功,且key和桶中对应位置的key相同,则定位到键值对。当桶中装不下更多元素,且key又被hash到这个桶时,就会放到溢出桶,原桶的overflow字段指向溢出桶。对哈希表来说,除了桶的结构以外,最重要的就是如何根据key定位到桶,以及桶中的键值对原创 2023-03-19 10:20:03 · 464 阅读 · 0 评论 -
深入理解 Go slice 扩容机制
容量小于1024时为2倍扩容,大于等于1024时为1.25倍扩容小于256时为2倍扩容,大于等于256时的扩容因子逐渐从2减低为1.25不管1.18前后,最终需要按照内存分配块向上修正原创 2023-03-18 14:43:35 · 858 阅读 · 0 评论 -
深入理解Go函数调用原理
在程序运行的过程中,会涉及到对函数的调用,调用时IP寄存器会指向被调用函数的地址,函数返回后继续执行本函数剩下的代码程序执行单元(线程或者协程)在执行过程中需要记录程序上下文的数据结构,包括局部变量,BP,参数,返回值等。程序用栈帧这种结构来记录这些信息这两个信息存在使用BP,SP和IP中:BP:存储函数调用堆栈基址指针的寄存器,即SP:存储当前函数栈顶的位置,也就是IP原创 2023-03-12 14:16:08 · 292 阅读 · 0 评论 -
Go开发者常犯的错误,及使用技巧 (1)
变量名要有意义,不能随便取a,b,c如果for语句块简短还好,如果很长,顺着读下去在后面可能都不记得v代表什么,如果将v换成user,会减少很多理解成本原创 2023-02-18 21:02:13 · 629 阅读 · 0 评论 -
go如何实现服务优雅关闭
什么叫优雅关闭?先说不优雅关闭,就是什么都不管,强制关闭进程,这会导致有些正在处理中的请求被强行中断这样做有什么问题?原创 2023-02-04 21:59:06 · 1068 阅读 · 0 评论 -
一文搞懂go并发编程设计原理
主要学习其设计原则,大体流程,权衡利弊不要纠结于部分难懂的实现细节,因为不同的人对相同接口的实现细节不一样,就算是相同的人实现两次也可能不一样。原创 2023-01-22 12:13:39 · 944 阅读 · 0 评论 -
golang实现四舍五入
golang小技巧原创 2022-12-02 18:36:05 · 1490 阅读 · 0 评论