V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Nazz  ›  全部回复第 11 页 / 共 46 页
回复总数  904
1 ... 7  8  9  10  11  12  13  14  15  16 ... 46  
2023-12-25 17:48:15 +08:00
回复了 matrix1010 创建的主题 Go 编程语言 Otter, 兼具高性能与高命中率的内存缓存
otter 最近又优化了吧, 看 benchmark 混合读写速度非常惊人, 我把最小堆去掉估计也赶不上

goos: linux
goarch: amd64
pkg: github.com/lxzan/memorycache/benchmark
cpu: 13th Gen Intel(R) Core(TM) i5-1340P
BenchmarkMemoryCache_SetAndGet-4 17393630 79.82 ns/op 0 B/op 0 allocs/op
BenchmarkOtter_SetAndGet-4 36321264 29.74 ns/op 0 B/op 0 allocs/op
BenchmarkRistretto_SetAndGet-4 5968552 179.7 ns/op 32 B/op 1 allocs/op
BenchmarkTheine_SetAndGet-4 5518321 237.0 ns/op 0 B/op 0 allocs/op
PASS
ok github.com/lxzan/memorycache/benchmark 27.342s
2023-12-20 15:01:12 +08:00
回复了 Nazz 创建的主题 Go 编程语言 怎么优化红黑树区间查询
@cchq 一个递归方法搞定, 从 1809 ns/op 提高到了 883 ns/op

// 降序遍历 中序遍历是有序的
func (c *RBTree[K, V]) rangeDesc(curNode *rbtree_node[K, V], qb *QueryBuilder[K, V]) {
if c.end(curNode) || len(qb.results) >= qb.limit {
return
}

state := 0
if qb.rightFilter(curNode.data.Key) {
state += 1
}
if qb.leftFilter(curNode.data.Key) {
state += 2
}

switch state {
case 3:
c.rangeDesc(curNode.right, qb)
if len(qb.results) < qb.limit {
qb.results = append(qb.results, *curNode.data)
} else {
return
}
c.rangeDesc(curNode.left, qb)
case 2:
c.rangeDesc(curNode.left, qb)
case 1:
c.rangeDesc(curNode.right, qb)
default:
}
}
2023-12-19 21:39:44 +08:00
回复了 Nazz 创建的主题 Go 编程语言 怎么优化红黑树区间查询
@kneo @cchq

感谢二位, 已经搞定了
在我现有逻辑上稍微改下就行了, 利用中序遍历一次得到多个结果, 减少重复计算. 原来 LIMIT N 要查 N 次, 现在最坏才是 N 次.
2023-12-19 14:55:58 +08:00
回复了 Nazz 创建的主题 Go 编程语言 怎么优化红黑树区间查询
@cchq 只了解最基本的性质。左子结点比父节点小,右子结点比父节点大
2023-12-19 14:35:01 +08:00
回复了 Nazz 创建的主题 Go 编程语言 怎么优化红黑树区间查询
@kneo ok ,我先去了解一下中序遍历的特性
2023-12-19 14:31:01 +08:00
回复了 Nazz 创建的主题 Go 编程语言 怎么优化红黑树区间查询
@cchq 不从根节点开始找的话,可能会漏掉一些数据,有排序的
2023-12-19 13:40:58 +08:00
回复了 Nazz 创建的主题 Go 编程语言 怎么优化红黑树区间查询
@MoYi123 调用次数多了会很慢,大量重复计算
2023-12-19 13:40:06 +08:00
回复了 Nazz 创建的主题 Go 编程语言 怎么优化红黑树区间查询
@kneo 如果条件范围比较小,全部查出来再排序是个好办法
2023-12-19 13:26:19 +08:00
回复了 Nazz 创建的主题 Go 编程语言 怎么优化红黑树区间查询
@kneo

> 为什么用红黑树

因为我在给红黑树加 feature

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

一个一个地查虽然慢,但耗时非常稳定
2023-12-18 23:37:55 +08:00
回复了 Sylarlong 创建的主题 分享创造 我把一个小众冷门项目搞上了 Github 热榜!
怎么才能上 trending
2023-12-14 12:14:54 +08:00
回复了 Cyshall 创建的主题 程序员 m3 max 和 13900k cpu 性能的简单对比
苹果编译速度确实快,不仅仅是 clang, go 和 java 都是如此
2023-12-12 17:14:51 +08:00
回复了 ppx123 创建的主题 职场话题 日经贴求助: 27 岁转码各位提提建议
49 年入国军, 好多有经验的开发都失业了
2023-12-12 09:19:20 +08:00
回复了 Nazz 创建的主题 Go 编程语言 用动态数组模拟链表做 GC 优化这个主意怎么样
@lysShub 不过 string 底层还是有指针,这个解决起来很麻烦
2023-12-11 17:21:00 +08:00
回复了 Nazz 创建的主题 Go 编程语言 用动态数组模拟链表做 GC 优化这个主意怎么样
@flynnlemon bucket 是缓存库的基本存储结构, 源码见 https://github.com/lxzan/memorycache/tree/swiss .
现在的代码里面直接用指针式链表维护 LRU 缓存了, 实测数组链表对于 GC 优化帮助不大. 虽然数据表面都是值类型, 但实际上 string 底层是有指针的, any 可能也会被扫描.
2023-12-11 08:42:48 +08:00
回复了 Nazz 创建的主题 Go 编程语言 用动态数组模拟链表做 GC 优化这个主意怎么样
@flynnlemon 这里只讨论 GC
2023-12-07 18:56:14 +08:00
回复了 steelshadow39 创建的主题 Java 讨论 Java 相比其他编程语言(c++, go, rust 等)的缺点
2023-12-07 17:29:10 +08:00
回复了 steelshadow39 创建的主题 Java 讨论 Java 相比其他编程语言(c++, go, rust 等)的缺点
@zhazi springboot data jdbc 那一段,看了半天都不知道 @Query 怎么用,去 github 看了下别人的 demo 一下就会了
2023-12-07 10:52:56 +08:00
回复了 steelshadow39 创建的主题 Java 讨论 Java 相比其他编程语言(c++, go, rust 等)的缺点
@zhazi 不是公认的烂吗
2023-12-06 21:52:54 +08:00
回复了 Nazz 创建的主题 Go 编程语言 memorycache v1.1.5 update: 写入速度达到 Ristretto 五倍
我想到了, 再加一个堆, 以查询次数作为比较基准
2023-12-06 21:49:21 +08:00
回复了 Nazz 创建的主题 Go 编程语言 memorycache v1.1.5 update: 写入速度达到 Ristretto 五倍
MC 使用最小四叉堆高效地维护了过期时间, 但是只实现了 LRU, 命中率方面不如 LFU
1 ... 7  8  9  10  11  12  13  14  15  16 ... 46  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3075 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 23ms · UTC 00:35 · PVG 08:35 · LAX 16:35 · JFK 19:35
Developed with CodeLauncher
♥ Do have faith in what you're doing.