北川广海の梦

北川广海の梦

最新文章

Ringbuffer环形队列

Ringbuffer环形队列

RingBuffer 环形缓冲队列,在系统中是非常常见的数据结构,许多场景都是用到了它,例如大名鼎鼎的Linux io_uring,它通过在共享内存中使用环形队列,避免了锁与内核切换的开销,大大提高性能。再比如Golang语言中的channel,在有缓冲的情况下,其内部实现也是通过环形队列的。不过它
132
0
2023-06-20
Dgraph Raft RPC实现分析

Dgraph Raft RPC实现分析

Dgraph Raft RPC 实现分析 在raft集群中,各个节点的通信都是基于RPC实现的。各个节点需要通过rpc,实现消息的同步、心跳、快照传输等。etcd的raft库实现了核心算法。而具体的网络通信,需要应用自行实现。 etcd的raft example采用了http传输。dgraph则通过
86
0
2023-06-20
Dgraph数据库 raft wal实现

Dgraph数据库 raft wal实现

dgraph的raft算法,是基于etcd raft库实现的,其代码比较有参考价值。本文将分析其raft log storage部分的实现。
83
0
2023-04-18

colorful日志

日志日志输出在开发过程中是必不可少的。而不同级别的日志,能够帮助我们对信息进行区分,更容易抓住重点。常见的日志级别:error、warn、info、debug等那么在许多时候 我们看到不同级别日志输出不同的颜色,这背后的秘密其实就是 ANSI转义序列
120
0
2023-03-22

SQL的执行过程简析

对于这个执行过程,过去总是模糊不清,含糊的知道,会有SQL语法解析,执行计划分析等等。近日在工作中有相关学习,故写此文记录。
121
0
2023-03-17

前缀树实现

基于Golang,效率可能并不能达到O(N),因为要支持字母外的其他字符,所以子节点的长度并不固定,这里用的是链表存储。所以在进入到下一子节点前,需要遍历这个子节点链表。然而,如果是纯英文,则可以通过ASCII直接定位了,效率和内存都更有优势。 下面是代码: package main import
193
0
2023-02-12

Golang Mutex互斥锁原理

首先回顾一下Java中的锁的一些特性。在面试时,我们常被问道Java的锁升级过程:即一个锁的初始是不加锁的,而当只有一个线程来尝试获取这把锁的时候,它会变为偏向锁,(在锁对象头中存储线程id)这样可以对应的线程可以直接获得锁。而当有更多线程(2个)尝试获取锁时,它会转变为一个轻量级锁...
242
0
2023-02-10

Golang map数据结构与渐进式rehash

HashMap是日常开发中最常用的数据结构之一,由于其独特的性质,在许多场景其都能发挥作用,例如去重,快速判断存在性,甚至表示一个对象。而不同平台对于hashmap有着不同的实现,本文将分析Golang语言中的map实现原理。首先来回顾一下Java中的HashMap...
849
0
2022-12-07

Golang类型系统、接口与类型断言

普通结构体 type Man struct{ name string } func (m *Man) Speak(){ } 我们定义了一个简单的结构体,它有一个name字段,并且为它实现了一个Speak的方法。这个对象在运行时的元数据如下 runtime._type结构,描述了类型的大小,
357
0
2022-12-05

Golang GC 三色标记法与混合屏障

Golang采用了三色标记与混合写入屏障技术,经历几个版本的不断优化,最终实现了几乎完全无STW。本文将分析Golang的GC实现思想。
645
0
2022-11-25