10 2023 档案
摘要:代码地址:https://gitee.com/mq-go/go-course/blob/master/Pool/NewPool.go 创建参数: New实现: Put实现: Get实现: 不再需要加入消息队列后超时 但会取到连接 在调用put方法 如果超时直接退出不再向channel请求连接 如果等
阅读全文
摘要:原因: 创建一个连接是很昂贵的: 1 要发起系统调用 2 TCP要完成三次握手 3 高并发的情况,可能耗尽文件描述符 连接池就是为了复用这些创建好的连接 开源实例:silenceper连接池 配置参数:InitialCap:初始化的时候直接创建好的连接数量 MaxIdle:最大空闲连接数 MaxCa
阅读全文
摘要:要点: 1 Channel带不带缓冲 2 谁在发 3 谁在收 4 谁来关 5 关了没 Channel有buffer和没有buffer的特点 不带缓冲:要求收发两端都必须要有goroutine否则就是阻塞 有buffer:缓冲没满或者没空之前都不会阻塞,缓冲满了或者空了就会阻塞 没有初始化的chann
阅读全文
摘要:sync.Pool会先查看自己是否有资源,有则直接返回,没有则创建一个新的,在GC的时候释放缓存的资源 使用sync.Pool是为了复用内存,减少内存分配,减轻GC压力,减少CPU资源 实现类似功能的Pool最简单的方案就是用队列,而且是并发安全的队列。 队头取,队尾放回去、在队列为空的时候创建一个
阅读全文
摘要:Mutex可以看做是锁,RWMutex则是读写锁 使用锁时优先使用RWMutex RWMutex:核心就是四个方法,RLock、RUnlock、Lock、UnlockMutex:Lock 和 Unlock double-check就是加读锁先检查一遍,释放读锁,加写锁,再检查一遍 锁的实现一般是依赖
阅读全文
摘要:初始化一个context如果确定是开头则用Background,如果不确定则用ToDo context包核心API有四个1.context.WithValue 设置键值对,并且返回一个新的context实例 2.context.WithCancel 3.context.WithDeadline 4.
阅读全文