摘要: Cond的主要作用就是获取锁之后,wait()方法会等待一个通知,来进行下一步锁释放等操作,以此控制锁合适的释放,释放频率等。适用于在并发环境下goroutine的等待和通知。 本文基于源码 113.5 例子 先来个例子看看cond 的用法 https://play.golang.org/p/7Jr 阅读全文
posted @ 2020-04-26 17:10 hxzhouh 阅读(681) 评论(0) 推荐(0)
摘要: 介绍 在go服务中,每个请求都在自己的goroutine中运行,请求处理handler 通常会启用额外的goroutine来处理如数据库访问、rpc请求等任务。处理请求的goroutine集合通常需要访问特定于请求的值,例如最终用户的身份,授权令牌和请求的期限。 当一个请求被取消或超时时,处理该请求 阅读全文
posted @ 2020-03-19 22:15 hxzhouh 阅读(289) 评论(0) 推荐(0)
摘要: 管道chan吞吐极限10,000,000,单次Put,Get耗时大约100ns/op,无论是采用单Go程,还是多Go程并发(并发数:100, 10000, 100000),耗时均没有变化,Go内核这对chan进行优化。 解决之道 :在系统设计时,避免使用管道chan传递主业务数据,避免将业务流程处理流程分割到对个Go程中执行,这样做减少chan传输耗时,和Go程调度耗时,性能会有很大的提升。 ... 阅读全文
posted @ 2020-03-12 22:25 hxzhouh 阅读(257) 评论(0) 推荐(0)
摘要: 聊聊Redis SDSSDS全拼为:simple dynamic string,解释为:简单动态字符串 C语言字符串使用长度为n+1的字符数组来表示长度为n的字符串,并且字符数组的最后一个元素总是空字符'\0',因为这种字符串表示方式不能满足Redis对字符串在安全性、效率以及功能方面的要求,所以Redis自己构建了SDS,用于满足其需求。在Redis里,C语言字符串只用于一些无须对... 阅读全文
posted @ 2020-03-12 22:13 hxzhouh 阅读(423) 评论(0) 推荐(0)
摘要: Golang定时器实现 这篇文章简单的介绍下golang time 包下定时器的实现,说道定时器,在我们开发过程中很常用,由于使用的场景不同,所以对定时器实际的实现也就不同,go的定时器并没有使用SIGALARM信号实现,而是采取最小堆的方式实现(源码包中使用数组实现的四叉树),使用这种方式定时精度很高,但是有的时候可能我们不需要这么高精度的实现,为了更高效的利用资源,有的时候也会实现一个... 阅读全文
posted @ 2020-03-12 22:05 hxzhouh 阅读(421) 评论(0) 推荐(0)