包含标签 golang 的文章

golang相关

go test 介绍 https://geektutu.com/post/quick-go-test.html https://pkg.go.dev/testing go modules 依赖管理 https://blog.golang.org/using-go-modules slice go中数组的赋值和函数传参都是值传递。 切片是对数组的一个连续片段的引用。 1 2 3 4 5 type slice struct { len int cap int // cap >= len array unsafe.Pointer //指向数组的指针 } 扩容 首先判断,如果新申请容量(cap)大于2倍的旧容量(old.cap),最终容量(newcap)就是新申请的容量(cap……

阅读全文

golang gc

Garbage collection 内存管理分自动和手动: C C++手动管理内存 jave golang有自动的内存管理系统,有内存分配器和垃圾回收器 主流的垃圾回收算法: 引用计数 - php使用引用计数 追踪式垃圾回收 - golang的三色标记法属于追踪式 Mark & Sweep 标记清除算法 STW:stop the world,需要停止已确定当前的引用关系……

阅读全文

gopool

gopool-头条使用的协程池 原生goroutine使用很方便 1 2 3 go func() { // do something } 但是原生goroutine存在一些问题,包括无法限制使用的goroutine总数。 单个goroutine使用的内存虽然很少2KB,但是大量的goroutine并发可能会导致OOM,所以协程池的使用还……

阅读全文

golang的内存模型

memory model https://golang.org/ref/mem heppens-before的概念 内存重排 为了读写内存的效率,会对读写指令进行重新排列,这是cpu重排。 还有编译器重排: x = 0 for i in range(100): x = 1 fmt.Println(x) 编译器优化后 x = 1 for i in range(100): fmt.Println(x) 但是一旦x被别的goroutine修改,就会无法出现预期的结果。 CPU为了抚平内核、内存和硬盘之间的读写……

阅读全文

runtime

goroutine M:N模型 go创建M个线程,之后创建个N个goroutine会依附在M个线程上执行。 pstree 命令看进程下几个线程 同一时刻,一个线程只能跑一个goroutine,当goroutine发生阻塞(chan阻塞,mutex,syscall陷入内核)时,go的runtime会进行调度,让其他g……

阅读全文

Ledis_db

LSM-Tree Log Structured-Merge Tree,在面对亿级别之上的海量数据的存储和检索的场景下,我们选择的数据库通常都是各种强力的NoSQL,比如Hbase,Cassandra,Leveldb,RocksDB等等,这其中前两者是Apache下面的顶级开源项目数据库,后两者分别是Google和Facebook开源……

阅读全文

golang worker pool 协程池

协程池 golang语言原生的goroutine和channel等机制,对于并发编程提供了很简单的实现。一个go关键字即可生成一个独立的协程。协程的管理需要协程池去实现。 对worker的总协程数量进行限制 限制并发 有任务排队时也不阻塞任务的提交 数据结构 1 2 3 4 5 6 7 8 9 10 11 12 type TaskHandler func() error……

阅读全文

golang网络轮询器

网络轮询器 大部分服务都是I/O密集型的,程序会花费大量时间等待I/O操作的完成。网络轮询器是golang runtime用来处理I/O操作的关键部件,它使用了操作系统提供的I/O多路复用机制增强并发能力。 设计原理 网络轮询器不仅用于监控网络I/O,还用于监控文件I/O。 I/O模型 操作……

阅读全文

golang调度器

调度器 golang语言强大的并发编程能力,得益于语言在原生层面对并发的支持。接下来介绍go语言运行时调度器的设计和实现,以及运行调度相关的数据结构。 进程与线程 process/thread 多个线程可以同属于一个进程,并共享内存空间。线程之间的通信就是通过基于共享的内存进行的,与重量的进程相比,线程更轻。但是……

阅读全文

评论系统架构设计

架构设计 架构设计最重要的就是理解整个产品体系在系统中的定位。搞清楚系统背后的背景,才能做出最佳的设计和抽象,不要做需求的翻译机。评论系统,需要做成评论平台,可以接入各种业务形态。 需要实现以下几个功能: 发布评论:支持回复楼层 读取评论:按照时间、热度排序 删除评论:用户和up主可以删除……

阅读全文