随笔分类 -  Golang

Golang
摘要:前言 select 是操作系统中的系统调用,我们经常会使用 select、poll 和 epoll 等函数构建 I/O 多路复用模型提升程序的性能。Go 语言的 select 与操作系统中的 select 比较相似,但也有不同点,它只支持channel收发的多路复用。 这里已go1.19版本为例,编 阅读全文
posted @ 2023-03-29 15:01 独揽风月 阅读(410) 评论(0) 推荐(0) 编辑
摘要:数据结构 位于sync/mutex.go type Mutex struct { state int32 sema uint32 } state locked:锁的状态,是否已经上锁 woken:表示是否有协程被唤醒,0表示没有协程被唤醒,1表示有协程被唤醒 starving:是否处于饥饿模式 wa 阅读全文
posted @ 2023-03-29 14:58 独揽风月 阅读(259) 评论(0) 推荐(0) 编辑
摘要:1. 字符串高效拼接 在 Go 语言中,字符串(string) 是不可变的,拼接字符串事实上是创建了一个新的字符串对象。如果代码中存在大量的字符串拼接,对性能会产生严重的影响 1.1 常见的拼接方式 为了避免编译器优化,我们首先实现一个生成长度为 n 的随机字符串的函数。 const letterB 阅读全文
posted @ 2021-09-17 11:09 独揽风月 阅读(668) 评论(0) 推荐(0) 编辑
摘要:令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。 package main import ( "fmt" "github.com/juju/ratelimit" "time" ) var bucketMap 阅读全文
posted @ 2021-09-17 10:36 独揽风月 阅读(164) 评论(0) 推荐(0) 编辑
摘要:前言 假设作为一个完全不懂算法的人,让你去实现一个限速功能(1秒内最多100次),你可能会想到的最简单方式就是记录一个开始时间,然后开始计数,当计数达到100之后限制调用,等待时间间隔达到1秒的时候重置计数器,然后重新计数,如此往复。 这种方式被称为计数器算法,也可以理解为固定时间窗口计数法,因为与 阅读全文
posted @ 2021-09-17 10:15 独揽风月 阅读(480) 评论(0) 推荐(0) 编辑
摘要:前言 怎么用channel来控制并发呢?我们最直观的想法就是构造一个带缓存的channel,一个协程在执行前先往里面占一个坑,执行完后再释放这个坑位,这样一来始终只有固定数量的协程在同时执行,从而达到并发控制的效果。 实现 open-falcon里使用第三方包 github.com/toolkits 阅读全文
posted @ 2021-09-17 09:28 独揽风月 阅读(365) 评论(0) 推荐(0) 编辑
摘要:前言 WaitGroup和channel一样,也是Golang应用开发过程中经常使用的并发控制技术,不过它和channel实现的机制不一样,它是使用信号量来控制的。 使用示例 package main import ( "fmt" "sync" "time" ) func main() { wg : 阅读全文
posted @ 2021-09-16 21:03 独揽风月 阅读(89) 评论(0) 推荐(0) 编辑
摘要:背景 正常情况下,一个函数里创建一个对象时会分配新的内存空间,假如这个函数被频繁调用,那么就会频繁地创建新对象,分配新的内存空间。如果这个变量发生逃逸,那就会对GC产生比较大的负担,因此我们自然而然地就会思考:对象能不能复用?即创建对象并使用完后再次被使用,同时也考考虑到多个协程同时复用一个对象的场 阅读全文
posted @ 2021-09-14 21:10 独揽风月 阅读(1261) 评论(0) 推荐(0) 编辑
摘要:1. 数据结构 1.1 hchan 位于runtime/chan.go type hchan struct { qcount uint // total data in the queue dataqsiz uint // size of the circular queue buf unsafe. 阅读全文
posted @ 2021-09-14 21:06 独揽风月 阅读(726) 评论(0) 推荐(0) 编辑
摘要:1. 核心概念 1.1 线程 通常语义中的线程,指的是内核级线程,核心点如下: (1)是操作系统最小调度单元; (2)创建、销毁、调度交由内核完成; (3)可充分利用多核,实现并行. 1.2 协程 协程,又称为用户级线程,核心点如下: (1)与线程存在映射关系,为 M:1; (2)创建、销毁、调度在 阅读全文
posted @ 2021-09-14 20:59 独揽风月 编辑

点击右上角即可分享
微信分享提示