go
河流儿
这个作者很懒,什么都没留下…
展开
-
golang的syncMap写入性能差的原因
syncMap内部设计了read,dirty和mu三个字段,如下type Map struct { mu Mutex dirty map[interface{}]*entry misses int}重点关注其中的readread保存只读数据, 其中的amended=true表示read中的数据和dirty中不同,默认falsetype readOnly struct { m map[interface{}]*entry amended bool // true if the原创 2021-08-25 16:03:09 · 578 阅读 · 0 评论 -
LeetCode50. 动态规划方法求阶乘
leetcode 50 pow(x, n)三种解决思路调用库函数暴力迭代分治法(本文方法)1, 2就不用说了, 第三种分治法,分治法本质上是一种动态规划方法,例如2的十次方求法可以先求 2的5次方, 再求2的2次方。 需要注意的是2的5次方和2的2次方不需要求2次,而是使用备忘录将求过的子问题进行记录,下一次求求解时直接使用。count变量和前三个函数式为了打印递归层次帮助理解的var count = 0func printIndent(){ fmt.Printf(".原创 2021-07-31 21:06:25 · 2547 阅读 · 1 评论 -
golang通道的顺序性保证
一个通道上的第n次成功发送操作的开始发生在此通道上的第n次成功接收操作完成之前,无论此通道是缓冲的还是非缓冲的。一个容量为m通道上的第n次成功接收操作的开始发生在此通道上的第n+m次发送操作完成之前。 特别地,如果此通道是非缓冲的(m == 0),则此通道上的第n次成功接收操作的开始发生在此通道上的第n次发送操作完成之前。假设通道为channel则顺序为开始发送-> 开始接收-&...原创 2020-03-25 18:09:31 · 1444 阅读 · 0 评论 -
golang的加锁map与syncmap性能分析
syncmap是golang1.5引入的线程安全的map,以下是测试程序,结论: 不建议使用sync.map, 原因: 1. 性能不及加锁的map, 2. 对json不友好测试程序:package main_testimport ( "math/rand" "sync" "testing")type WrapedMap struct { lck sync.Mutex m ...原创 2020-03-23 16:15:59 · 2597 阅读 · 0 评论 -
golang的[]byte与string之间高效转换
golang的[]byte个string一个是可变类型一个是不可变类型,转换的时候会重新开辟内存,在程序并发即使上百万的时候会出现内存问题,以下是unsafe的转换方法package mainimport ( "fmt" "strings" "unsafe")func str2bytes(s string) []byte { x := (*[2]uint...转载 2020-03-04 22:00:02 · 3307 阅读 · 0 评论 -
leveldb持续写入场景下速度变慢
go语言版本实现: https://github.com/syndtr/goleveldb官方宣称可以达到30w的qps,但是该go语言版本实测但qps大于20w时,一开始写入速度正常,但是持续写入几分钟后,写入速度由十几毫秒变为几分钟,系leveldb的compaction操作导致,IO阻塞之后会导致大量协程堆积从而造成内存雪崩式升高,这在高并发环境中不能容忍,故弃用。后来者勿踩此坑!!!...原创 2020-02-13 22:09:20 · 1025 阅读 · 1 评论