sync.WaitGroupsync.WaitGroup 和 sync.ErrGroup 是 Go 语言中用于处理并发任务的两个重要工具。它们都可以帮助我们管理多个 goroutine 的执行和同步,但它们的使用场景和功能略有不同。其中 sync.ErrGroup 主要用于处理并发任务中的错误。且其是基于 syn...
在之前的 缓存击穿和缓存雪崩 中提到了 singleflight 的概念,singleflight 是 Go 官方扩展库 x 中提供的扩展并发原语,能够将多个并发请求合并为一个,降低服务端压力。本文记录深入理解 singleflight 源码的过程,帮助自己更好地掌握其用法和实现原理。 singleflight ...
在开发中为了提升性能,减轻数据库压力,一般会给热点数据设置缓存,如 Redis,用户请求过来后先查询 Redis,有则直接返回,没有就会去查询数据库,然后再写入缓存。而在分布式、高并发场景下,缓存系统常会遇到如下两类问题: 缓存击穿(Cache Penetration) 缓存雪崩(Cache Avalanche...
在 Go 语言中,channel(通道)是并发编程的核心构件之一,用于在不同 goroutine 之间安全地传递数据并实现同步。它本质上是一个类型化的管道,通过 <- 运算符进行发送与接收操作。channel 支持无缓冲(synchronous)和有缓冲(buffered)两种模式:无缓冲模式下,发送和接收...
题目给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 ...
题目请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 ...
CoAP 服务中的 Observe 和 MulticastCoAP 是一种专门为物联网设计的轻量级应用层协议,它基于 UDP,支持观察(Observe)和组播(Multicast)等特性。其中 Observe 是 CoAP 的一个重要特性,它允许客户端注册对资源的观察,一旦资源发生变化,服务器就会主动通知客户端。...
项目需要用到组播,所以了解了一下组播与广播的概念,以及 Go 中的实现。 1. 单播、组播与广播1.1 单播/Unicast单播 (Unicast) 是最常见的网络通信方式,也是网络中最基本的通信模式。在单播通信中,数据包从一个主机发送到另一个主机,这两个主机之间是一对一的关系。 1.2 组播...
题目描述给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。 你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。 返回获得利润的最大值。 注意:这里的一笔交易指买入持有并卖出...
题目描述给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。注意:你不能同时参与多笔交易(你必须在再次购买前出售...