摘要: 不控制goroutine数量引发的问题 Goroutine 体积轻量 优质的GMP调度 ⽆限开辟goroutine :(1)CPU的使⽤率上升 (2)Memory占⽤不断上升 (3)主进程崩溃(被强制杀死) 限制goroutine数量的⽅法 ⽅法一: Channel和WaitGroup的组合⽅式来限 阅读全文
posted @ 2022-10-17 16:56 Mr.peter 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 第一种方法,关闭channel。就是借助 channel 的 close 机制来完成对 goroutine 的精确控制。 func main() { ch := make(chan string, 6) go func() { for { v, ok := <-ch if !ok { fmt.Pri 阅读全文
posted @ 2022-10-17 14:51 Mr.peter 阅读(69) 评论(0) 推荐(0) 编辑
摘要: Gin Recovery Recovery返回一个中间件,该中间件从任何恐慌中恢复,并写入500(如果有)。当你的程序出现一些你未考虑到的异常时,程序就会退出,服务就停止了,所以这个中间件是有必要的。 gin.Default()返回一个已连接记录器和恢复中间件的引擎实例,即Logger 和 Reco 阅读全文
posted @ 2022-10-17 11:43 Mr.peter 阅读(350) 评论(0) 推荐(0) 编辑
摘要: Golang中context包提供上下文机制在 goroutine 之间传递 deadline、取消信号(cancellation signals)或者其他请求相关的信息。 其中context.WithCancel 函数能够从 context.Context 中衍生出一个新的子上下文并返回用于取消该 阅读全文
posted @ 2022-10-17 11:11 Mr.peter 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 一、缓存穿透 1、缓存穿透理解 缓存穿透是指查询一个根本不存在的数据,缓存层和持久层都不会命中。在日常工作中出于容错的考虑,如果从持久层查不到数据则不写入缓存层,缓存穿透将导致不存在的数据每次请求都要到持久层去查询,失去了缓存保护后端持久的意义。(对于系统A,假设一秒 5000 个请求,结果其中 4 阅读全文
posted @ 2022-10-17 09:28 Mr.peter 阅读(130) 评论(0) 推荐(0) 编辑