- 博客(7)
- 问答 (1)
- 收藏
- 关注
原创 Go 中的 Mutex 设计原理详解(三)
Mutex系列是根据我对晁岳攀老师的《Go 并发编程实战课》的吸收和理解整理而成,如有偏差,欢迎指正~ Mutex 演变回顾 在前面两篇文章中,分别介绍了初版 Mutex 和 第二版 Mutex (给新人机会) 。 初版 Mutex 的核心思想用先来后到的方式解决锁的竞争问题。具体表现是用一个标志 key 来记录锁是否被占有,以及处于等待中的协程有多少个。等占有锁的协程完成任务后,按等待顺序唤醒下一个协程。表面上看,这样处理很公平,但是公平不能当饭吃,尤其是在高并发的场景下性能会比较低。性能较低的原因可.
2021-01-18 17:15:11
241
原创 Go 中的 Mutex 设计原理详解(二)
Go 中的 Mutex 设计原理详解(二) Mutex系列是根据我对晁岳攀老师的《Go 并发编程实战课》的吸收和理解整理而成,如有偏差,欢迎指正~ 初版 Mutex 回顾 在前一章节中,讲解了初版 Mutex 源码和设计思路。初版 Mutex 核心思路就是通过一个 Key 来标志当前资源是否被抢占,以及处于等待中的协程有多少个;同时通过信号量的机制来实现协程的等待和唤醒机制。 在一个性能要求不是很高的并发场景下,我们完全可以依照这个思路来实现这样的一个锁的机制。比如在分布式的场景下,我们可以利用 red
2021-01-06 00:28:38
340
原创 golang中的Mutex设计原理详解(一)
Mutex系列是根据我对晁岳攀老师的《Go 并发编程实战课》的吸收和理解整理而成,如有偏差,欢迎指正~ 目标 本系列除了希望彻底学习和了解 golang 中 sync.Mutex 的原理和使用,更希望借 golang 中 Mutex 的发展和演变,了解并发场景下锁的设计与实现方法以及不通业务场景下的一些特殊考虑。 Mutex 简介 Mutex 是什么 Mutex 是 golang 标准库的互斥锁,主要用来处理并发场景下共享资源的访问冲突问题。 Mutex 定义 尽管 Mutex 的实现经历了多次的重大改.
2020-12-28 02:30:37
870
原创 聊一聊 golang 中的 Context 的实现
编程语言中的 Context Context 的直接翻译是上下文或环境。在编程语言中,翻译成运行环境更合适。 比如一段程序,在执行之初,我们可以设定一个环境参数:最大运行时间,一旦超过这个时间,程序也应该随之终止。 在 golang 中, Context 被用来在各个 goroutine 之间传递取消信号、超时时间、截止时间、key-value等环境参数。 golang 中的 Context 的实现 golang中的Context包很小,除去注释,只有200多行,非常适合通过源码阅读来了解它的设计思路。 注
2020-12-15 01:32:34
1428
2
原创 go 性能优化之 benchmark + pprof
testing 是go自带的一个轻量级的测试框架,主要有三个用途:单元测试(Test),基准测试(Benchmark)以及示例测试(Example)。 起因 写go也有几个月了,一直没太关注类似 benchmark 之类的性能分析工具,只知道埋头写业务代码。直到前几天,工作上的一个项目遇到了性能瓶颈,需要分析一下原因,就用到了 benchmark。一顿分析,终于发现了程序中的”性能消耗大户“,颇有成就感。 测试case准备 平时写代码的过程中,会经常写一些 print 或者 debug 函数,谁又能想到.
2020-12-06 20:23:04
697
1
原创 Go Modules介绍和使用
前言 In Go 1.14, module support is considered ready for production use, and all users are encouraged to migrate to modules from other dependency management systems. 在go1.14中,模块支持被认为已经可以在生产环境中使用,因此鼓励所有用户将项目中的依赖管理系统都迁移到Go Mudules中。 环境准备 Go 版本升级 查看Go版本 go env
2020-12-04 23:58:11
464
原创 golang下文件锁的使用
前言 题目是golang下文件锁的使用,但本文的目的其实是通过golang下的文件锁的使用方法,来一窥文件锁背后的机制。 为什么需要文件锁 只有多线程/多进程这种并发场景下读写文件,才需要加锁, 场景1-读写并发 读写并发场景下,如果不加锁,就会出现读到脏数据的情况。想象一下,读文件的进程,读到第500字节,有其它进程以覆盖写的方式向文件中写入1000字节,那读进程读到的后500字节就是脏数据。 场景2-写写并发 写写并发场景下,如果不加锁,假设A进程先写0-1000字节,B进程写0-900字节,以此类
2020-12-04 02:38:20
5519
5
空空如也
python字典值是列表时,字典值被异常修改!!
2017-08-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人