V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Nazz  ›  全部回复第 8 页 / 共 42 页
回复总数  837
1 ... 4  5  6  7  8  9  10  11  12  13 ... 42  
163 天前
回复了 Nazz 创建的主题 Go 编程语言 怎么优化红黑树区间查询
@kneo 如果条件范围比较小,全部查出来再排序是个好办法
163 天前
回复了 Nazz 创建的主题 Go 编程语言 怎么优化红黑树区间查询
@kneo

> 为什么用红黑树

因为我在给红黑树加 feature

如果符合条件的结果非常多,全查出来会非常慢

一个一个地查虽然慢,但耗时非常稳定
怎么才能上 trending
168 天前
回复了 Cyshall 创建的主题 程序员 m3 max 和 13900k cpu 性能的简单对比
苹果编译速度确实快,不仅仅是 clang, go 和 java 都是如此
170 天前
回复了 ppx123 创建的主题 职场话题 日经贴求助: 27 岁转码各位提提建议
49 年入国军, 好多有经验的开发都失业了
@lysShub 不过 string 底层还是有指针,这个解决起来很麻烦
@flynnlemon bucket 是缓存库的基本存储结构, 源码见 https://github.com/lxzan/memorycache/tree/swiss .
现在的代码里面直接用指针式链表维护 LRU 缓存了, 实测数组链表对于 GC 优化帮助不大. 虽然数据表面都是值类型, 但实际上 string 底层是有指针的, any 可能也会被扫描.
@flynnlemon 这里只讨论 GC
@zhazi springboot data jdbc 那一段,看了半天都不知道 @Query 怎么用,去 github 看了下别人的 demo 一下就会了
@zhazi 不是公认的烂吗
我想到了, 再加一个堆, 以查询次数作为比较基准
MC 使用最小四叉堆高效地维护了过期时间, 但是只实现了 LRU, 命中率方面不如 LFU
@matrix1010 可以简单说下 Theine 是怎么维护过期时间和 LFU 吗?
@matrix1010 swiss table 的 gc 压力相比内置 map 怎么样?
说一下 springboot ,依赖注入自动化程度很高,但是,一旦出现问题就难以排查,而且官方文档稀巴烂
@matrix1010 otter 作者被你炸出来了
@maypok86 It seems to have triggered a bug in the otter, and it's slowing it down terribly.

go test -benchmem -run=^$ -bench . github.com/lxzan/memorycache/benchmark
goos: linux
goarch: amd64
pkg: github.com/lxzan/memorycache/benchmark
cpu: AMD Ryzen 5 PRO 4650G with Radeon Graphics
BenchmarkMemoryCache_Set-12 21004170 72.60 ns/op 9 B/op 0 allocs/op
BenchmarkMemoryCache_Get-12 43787251 40.11 ns/op 0 B/op 0 allocs/op
BenchmarkMemoryCache_SetAndGet-12 45939994 45.35 ns/op 0 B/op 0 allocs/op
BenchmarkRistretto_Set-12 12190314 122.2 ns/op 112 B/op 2 allocs/op
BenchmarkRistretto_Get-12 25565082 44.60 ns/op 16 B/op 1 allocs/op
BenchmarkRistretto_SetAndGet-12 11713868 97.06 ns/op 27 B/op 1 allocs/op
BenchmarkOtter_SetAndGet-12 13760 89816 ns/op 13887 B/op 0 allocs/op
PASS
ok github.com/lxzan/memorycache/benchmark 44.081s


func BenchmarkOtter_SetAndGet(b *testing.B) {
var builder, _ = otter.NewBuilder[string, int](1000)
builder.ShardCount(128)
mc, _ := builder.Build()
for i := 0; i < benchcount; i++ {
mc.SetWithTTL(benchkeys[i%benchcount], 1, time.Hour)
}

b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
var i = atomic.Int64{}
for pb.Next() {
index := i.Add(1) % benchcount
if index&7 == 0 {
mc.SetWithTTL(benchkeys[index], 1, time.Hour)
} else {
mc.Get(benchkeys[index])
}
}
})
}
1 ... 4  5  6  7  8  9  10  11  12  13 ... 42  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1086 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 22:44 · PVG 06:44 · LAX 15:44 · JFK 18:44
Developed with CodeLauncher
♥ Do have faith in what you're doing.