上一页 1 ··· 77 78 79 80 81 82 83 84 85 ··· 234 下一页

2020年3月5日

sync.Map实现分析

摘要: golang的SDK中提供线程安全的map实现sync.Map。它是针对RWMutex+map的实现方案中存在cache line的false share提出来的。主要适用于两个场景: 针对一个key一次写多次读。 多个goroutine并发读写修改的key是没有交集。 在这两种情况下,相比一个Mu 阅读全文

posted @ 2020-03-05 18:20 ExplorerMan 阅读(602) 评论(0) 推荐(0)

由浅入深聊聊Golang的sync.Map

摘要: 前言 今天在技术群中有小伙伴讨论并发安全的东西,其实之前就有写过map相关文章:由浅入深聊聊Golang的map。但是没有详细说明sync.Map是怎么一回事。 回想了一下,竟然脑中只剩下“两个map、一个只读一个读写,xxxxx”等,关键词。有印象能扯,但是有点乱,还是写一遍简单记录一下吧。 1. 阅读全文

posted @ 2020-03-05 18:14 ExplorerMan 阅读(838) 评论(0) 推荐(0)

2020年3月4日

Go语言编程:使用条件变量Cond和channel通道实现多个生产者和消费者模型

摘要: 如题,使用条件变量Cond和channel通道实现多个生产者和消费者模型。Go语言天生带有C语言的基因,很多东西和C与很像,但是用起来 绝对比C语言方便。今天用Go语言来实现下多消费者和生产者模型。如果对C语言的多生产者和消费者模型感兴趣的可以看Linux系统编程:使用mutex互斥锁和条件变量实现 阅读全文

posted @ 2020-03-04 12:08 ExplorerMan 阅读(626) 评论(0) 推荐(0)

golang 的 channel 实现 生产者/消费者 模型

摘要: package main import ( "fmt" "math/rand" "time" ) func productor(channel chan<- string) { for { channel <- fmt.Sprintf("%v", rand.Float64()) time.Sleep 阅读全文

posted @ 2020-03-04 12:06 ExplorerMan 阅读(609) 评论(0) 推荐(0)

Golang sync.NewCond条件锁的用法

摘要: package main import ( "fmt" "sync" "time" ) func main() { c := sync.NewCond(&sync.Mutex{}) queue := make([]interface{}, 0, 10) removeFromQueue := func 阅读全文

posted @ 2020-03-04 12:05 ExplorerMan 阅读(802) 评论(0) 推荐(0)

golang channel多生产者和多消费者实例

摘要: package main import ( "fmt" "time" ) func consumer(cname string, ch chan int) { //可以循环 for i := range ch 来不断从 channel 接收值,直到它被关闭。 for i := range ch { 阅读全文

posted @ 2020-03-04 12:04 ExplorerMan 阅读(5432) 评论(0) 推荐(0)

2020年3月3日

Go语言的那些坑

摘要: Golang是我最喜欢的一门语言,它简洁、高效、易学习、开发效率高、还可以编译成机器码… 虽然它一出世,就饱受关注,而且现在在市面上逐渐流行开来,但是,它毕竟是一门新兴语言,还有很多让人不太习惯的地方(即坑,(^__^)),我作为新手,一边学习,一边踩坑,希望对其他人有借鉴作用。 文件名字不要轻易以 阅读全文

posted @ 2020-03-03 12:01 ExplorerMan 阅读(485) 评论(0) 推荐(0)

2020年3月2日

go语言标准库sync/atomic中的原子操作

摘要: 原子操作吧其他同步技术更底层。他们没有锁,基本是在硬件层面实现的。事实上,他们经常被用来实现其他同步技术。 请注意,下面的许多例子并发并发编程。他们仅用于来展示如何使用标准库中的sync/atomic包中的原子函数。 go语言中的原子操作概览 标准库中的sync/atomic对整数类型T(包含int 阅读全文

posted @ 2020-03-02 18:19 ExplorerMan 阅读(516) 评论(0) 推荐(0)

理解 Go 标准库中的 atomic.Value 类型

摘要: 在 Go 语言标准库中,sync/atomic包将底层硬件提供的原子操作封装成了 Go 的函数。但这些操作只支持几种基本数据类型,因此为了扩大原子操作的适用范围,Go 语言在 1.4 版本的时候向sync/atomic包中添加了一个新的类型Value。此类型的值相当于一个容器,可以被用来“原子地"存 阅读全文

posted @ 2020-03-02 17:56 ExplorerMan 阅读(1075) 评论(0) 推荐(0)

go-redis 源码分析:连接池

摘要: 笔者最近在项目中基于 go-redis 实现 Redis 缓存优化性能。go-redis 是一个 Go 语言实现的 Redis 客户端,既然是网络服务的客户端,为了高效利用有限资源,避免重复创建和销毁网络连接,就必需对其进行管理。而资源管理又是编程领域中的一个重点难点,抱着对是否能利用 Go 语言语 阅读全文

posted @ 2020-03-02 17:33 ExplorerMan 阅读(1796) 评论(0) 推荐(0)

上一页 1 ··· 77 78 79 80 81 82 83 84 85 ··· 234 下一页

导航