Skip to content

Commit 850fdfc

Browse files
I can make this faster.
1 parent 9f6962b commit 850fdfc

File tree

1 file changed

+32
-3
lines changed

1 file changed

+32
-3
lines changed

btree/palm/tree.go

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,17 @@ type keyBundle struct {
4242
left, right *node
4343
}
4444

45+
func (kb *keyBundle) Dispose() {
46+
kb.key, kb.left, kb.right = nil, nil, nil
47+
keyBundlePool.Put(kb)
48+
}
49+
50+
func newKeyBundle(key common.Comparator) *keyBundle {
51+
kb := keyBundlePool.Get().(*keyBundle)
52+
kb.key = key
53+
return kb
54+
}
55+
4556
type ptree struct {
4657
root *node
4758
_padding0 [8]uint64
@@ -153,12 +164,12 @@ func (ptree *ptree) fetchKeys(xns interfaces, inParallel bool) (map[*node][]*key
153164
switch action.operation() {
154165
case add:
155166
for i, n := range action.nodes() {
156-
writeOperations[n] = append(writeOperations[n], &keyBundle{key: action.keys()[i]})
167+
writeOperations[n] = append(writeOperations[n], newKeyBundle(action.keys()[i]))
157168
}
158169
toComplete = append(toComplete, action)
159170
case remove:
160171
for i, n := range action.nodes() {
161-
deleteOperations[n] = append(deleteOperations[n], &keyBundle{key: action.keys()[i]})
172+
deleteOperations[n] = append(deleteOperations[n], newKeyBundle(action.keys()[i]))
162173
}
163174
toComplete = append(toComplete, action)
164175
case get, apply:
@@ -340,6 +351,19 @@ func (ptree *ptree) applyNode(n *node, adds, deletes []*keyBundle) {
340351
}
341352
}
342353

354+
func (ptree *ptree) cleanMap(op map[*node][]*keyBundle) {
355+
for _, bundles := range op {
356+
for _, kb := range bundles {
357+
kb.Dispose()
358+
}
359+
}
360+
}
361+
362+
func (ptree *ptree) cleanMaps(adds, deletes map[*node][]*keyBundle) {
363+
ptree.cleanMap(adds)
364+
ptree.cleanMap(deletes)
365+
}
366+
343367
func (ptree *ptree) recursiveMutate(adds, deletes map[*node][]*keyBundle, setRoot, inParallel bool) {
344368
if len(adds) == 0 && len(deletes) == 0 {
345369
return
@@ -413,12 +437,17 @@ func (ptree *ptree) recursiveMutate(adds, deletes map[*node][]*keyBundle, setRoo
413437
ptree.splitNode(n, parent, &nodes, &keys)
414438
write.Lock()
415439
for i, k := range keys {
416-
nextLayerWrite[parent] = append(nextLayerWrite[parent], &keyBundle{key: k, left: nodes[i*2], right: nodes[i*2+1]})
440+
kb := newKeyBundle(k)
441+
kb.left = nodes[i*2]
442+
kb.right = nodes[i*2+1]
443+
nextLayerWrite[parent] = append(nextLayerWrite[parent], kb)
417444
}
418445
write.Unlock()
419446
}
420447
})
421448

449+
go ptree.cleanMaps(adds, deletes)
450+
422451
ptree.recursiveMutate(nextLayerWrite, nextLayerDelete, setRoot, inParallel)
423452
}
424453

0 commit comments

Comments
 (0)