V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  zkdfbb  ›  全部回复第 1 页 / 共 7 页
回复总数  138
1  2  3  4  5  6  7  
支持一下
2021-04-07 12:23:49 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@qieqie 这样确实会更快一点,不过应该基本无影响。就像很多框架的 benchmark 差很多,但是架不住加上自己的业务逻辑后都差不多了。。。
2021-04-07 11:56:45 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@lesismal 我也是看 fiber 接口设计比较舒服,基本的功能也都比较完备,然后好像还说作者全职在做这个所以用的,之前就看到过一篇文章说高并发下有问题不过也没太在意。。。生产环境下有啥好推荐的么

https://cloud.tencent.com/developer/news/462918
2021-04-07 09:07:10 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@dallaslu
@no1xsyzy
@makdon

感谢分析~ 用 Immutable: true 就正常了,可结贴了
2021-04-07 00:03:01 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@dallaslu 确实是这样
2021-04-06 23:08:20 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
如果是 test.lua 是

request = function()
num = math.random(1, 1)
path = "/item/id" .. num
return wrk.format("GET", path)
end


就是链接唯一的话,又正常
2021-04-06 23:03:34 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@makdon
@lesismal
@GTim
@Orlion
@sxfscool
@Lpl
@ClarkAbe
@kcojkcnw

我补了一份最小测试用例,你们看看能不能复现,我仍然是一头雾水
2021-04-06 21:05:00 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
我用下面的方式测试了一下,比之前的结果要好一点,但是还是不对,但是 tmp 里面的访问次数加起来只有 nginx 的 access.log 里面的一半

accessLog.Lock()
tmp := make(map[string]int)
for k, v := range accessLog.data {
tmp[k] += v
}
accessLog.data = make(map[string]int)
accessLog.Unlock()
2021-04-06 20:42:37 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@makdon
@lesismal
@GTim
@Orlion
@sxfscool
@Lpl
@ClarkAbe
@kcojkcnw

各位大佬,我又测试了一下,用 counter = &Counter{data: make(map[string]int)} 初始化全局变量,然后后面重新赋值的时候也加了锁,但是仍然不行,打印 accessLog.data 的时候用 "%s, %x" 打印 key,结果 hash 是一样的

https://p26-tt.byteimg.com/origin/pgc-image/4963875f190e4ccf9b8a89fcbad8590e
https://wkphoto.cdn.bcebos.com/d1160924ab18972b923ebfb4f6cd7b899e510a43.jpg
2021-04-06 17:28:30 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
然后如果打印 tmp 的话,因为 json 格式化之后,重复的 id 都去掉了,就会变的特别少
这个图,上面是打印 accessLog.data, 下面是打印 tmp

https://p26-tt.byteimg.com/origin/pgc-image/55a1b5f43bce43058915b2a74561f1d6
2021-04-06 17:25:37 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@ZSeptember
@makdon
@Lpl

就这样,直接打印 accessLog.data 的话,有重复的 id
![]( https://p3-tt-ipv6.byteimg.com/origin/pgc-image/29af76c21c3f4e148252613ab6754a7c)
2021-04-06 16:55:30 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@joesonw 嗯,就是本来只要几百个 key 的,结果 map 长度可以上万,也打印过 map 本身,看到的就是有重复的 key
2021-04-06 16:17:29 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@joesonw 是要加个锁,不过不是因为这个,我试过把这句注释掉,也是一样的
2021-04-06 15:58:44 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@Lpl 这个只是个简化的例子,实际上还需要处理一下,不过意思是一样的
2021-04-06 15:58:09 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@makdon 不是的,我用的就是 map[string]int,统计的就是一个字符串 id 的访问次数,hashkey 是一样的
要是正常我就不问了,问就是因为不正常😂
我也感觉光看这段代码应该看不出什么问题,但是事实就是这么猝不及防的发生了,脑阔疼
2021-04-06 14:50:25 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@no1xsyzy
@GTim

补在后面了,看看能不能发现什么问题
2021-04-06 14:49:14 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@AngryPanda 按理加了锁应该不同的协程也是 OK 的
2021-04-06 14:48:48 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@Lpl 批评的对🤣
atomic 的话,由于 id 不是唯一的,好像不太方便
没试过用管道,我直观以为管道性能会更差一点,看来我理解错了,可以试一下
有看到过用分段锁的例子,concurrent-map 这个,不过我测了一下就用一把锁好像也足够用了就先这么用了,结果就出现了这个神奇的问题,完整的代码补上了,你看看能不能看出来哪里的问题🤣
2021-04-06 12:56:19 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@skiy 这个代码简洁了一点~性能下降了一点~
2021-04-06 12:55:39 +08:00
回复了 zkdfbb 创建的主题 Go 编程语言 map 的一个神奇的问题
@yuguorui96 nginx 是多进程,但是这个 go 的后端只有一个,应该没影响啊
1  2  3  4  5  6  7  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2641 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 16ms · UTC 15:31 · PVG 23:31 · LAX 08:31 · JFK 11:31
Developed with CodeLauncher
♥ Do have faith in what you're doing.