go并发编程 互斥锁mutex实现了Locker接口 1234type Locker interface { Lock() Unlock()} 加锁,解锁,简洁明了,Go的一贯风格 1234567// mutex 是一种互斥锁// mutex 的零值是未加锁的互斥锁// mutex 在第一次使用之后不能进行复制type Mutex struct { state int32 //状 2022-12-13 #Golang
LRU golang实现 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768type Cache struct { maxBytes int64 nbytes int64 //用于排序的双向链表 2022-12-13 #golang
周赛笔记12/11/2022 6257.删除每行中的最大值 给你一个 m x n 大小的矩阵 grid ,由若干正整数组成。 执行下述操作,直到 grid 变为空矩阵: 从每一行删除值最大的元素。如果存在多个这样的值,删除其中任何一个。 将所有被删除元素中的最大值相加。 每执行一次操作,矩阵中列的数据量就会减1 返回执行上述操作后的答案 12345上图展示在每一步中需要移除的值。- 在第一步操作中,从第一行删除 4 ,从 2022-12-11 #LeetCode初见
B+树查询详解 数据页数据库的 I/O 操作的最小单位是页,InnoDB 数据页的默认大小是 16KB,意味着数据库每次读写都是以 16KB 为单位的,一次最少从磁盘中读取 16K 的内容到内存中,一次最少把内存中的 16K 内容刷新到磁盘中。 数据页的结构: 在 File Header 中有两个指针,分别指向上一个数据页和下一个数据页,连接起来的页相当于一个双向的链表,如下图所示: 这也就是聚簇索 2022-12-08 #MySQL
Golang调度详解 GoroutineGoroutine可以看作对thread加的一层抽象,它更轻量级,可以单独执行。 因为有了这层抽象,我们不会直接面对thread,我们只会看到代码里的goroutine。 操作系统却相反,管你什么 goroutine,我才没空理会。我安心地执行线程就可以了,线程才是我调度的基本单位。 而这也是基于两级线程模型实现的,Goroutine与内核线程是多对多的关系,也叫M:N模型 G 2022-12-06 #Golang
关于CPU Cache CPU-Cache从主存访问数据有很高的延迟成本(大约 100 到 300 个时钟周期),因此处理器核心使用本地高速缓存来将数据保存在需要的硬件线程附近。从缓存访问数据的成本要低得多(大约 3 到 40 个时钟周期),这取决于所访问的缓存。 由图可知,一般是三级缓存:L3->L2->L1速度依次递减 L1 Cache最接近CPU, 容量最小(如32K、64K等)、速度最高,每个核 2022-12-06 #计算机组成原理
Redis高可用 Redis分布式锁 分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性。 使用场景:多个服务间保证同一时刻同一时间段内同一用户只能有一个请求(防止关键业务出现并发攻击) 实现分布式锁的主要步骤: 指定一个 key 作为锁标记,存入 Redis 中,指定一个唯一的标识作为 value。 2022-12-06 #Redis
MySQL的日志和持久性 Buffer Pool关系型数据库的特点就是需要频繁对磁盘页进行IO,所以有时候也被叫做基于磁盘的数据库,InnoDB为了改善直接读写磁盘导致的 IO 性能问题,引入了缓冲池 缓冲池是一片内存区域,存储引擎在读取数据时,会先将页读取到缓冲池中。下次读取时,看缓冲池是否命中,如果命中,则直接读取,否则从磁盘中读取。 在修改数据时,如果缓冲池中不存在所需的数据页,则从磁盘读入缓冲池,否则直接对缓冲池中 2022-12-02 #MySQL
ants——Goroutine Pool阅读笔记 大规模 Goroutine 的瓶颈 golang 的 net/http 标准库,入口函数 ListenAndServe : 1234567891011func (srv *Server) ListenAndServe() error { addr := srv.Addr if addr == "" { addr = ":http&quo 2022-11-30 #Golang
netty进阶 MpscQueueMpsc来自JCTools,即JAVA的高并发增强包,主要提供了一些 JDK 缺失的并发数据结构 Spsc 单生产者单消费者 Mpsc 多生产者单消费者 Spmc 单生产者多消费者 Mpmc 多生产者多消费者 Mpsc 的全称是 Multi Producer Single Consumer,多生产者单消费者,多个生产者线程通过CAS无锁操作提升性能,单个消费者不需要加锁; M 2022-11-24 #netty