2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-29 13:38:26 +00:00

Update Data structure survey

Ondřej Surý 2022-04-07 08:07:49 +00:00
parent 9790948989
commit d122a7f992

@ -57,6 +57,10 @@ Fixed-size array stack
## notes
Used as object caches
Ondrej: will be gone after the netmgr refactoring and replaced with per-thread object pools/lists
Locked.
@ -81,6 +85,7 @@ There's a min-heap in libuv, implemented as a binary tree. The
standard algorithms (as in `isc/heap`) use an array which should have
better performance.
Ondrej: The usage in isc_timer has been already removed in the loopmgr branch
# `isc/ht`
@ -120,6 +125,11 @@ Case-sensitive and case-insensitive variants, chosen at run-time.
Uses chaining, so it is heavy on indirection and heavy on allocation.
Modern hash tables use open addressing.
Ondrej: there's work to do on the isc_ht:
1. make header-only variant of the hashtable, so we can unify the usage across the codebase (e.g. no extra allocations when storing item)
2. there's a branch, where I implemented robin-hood hashing, but I never finished because of 1)
3. the resizing was added only recently, we still miss shrinking (should be easy enough to do)
# `isc/pool`
@ -138,6 +148,7 @@ This is a bit different from the lock pools in `rbtdb`, because
`isc/pool` returns a random item from teh pool, whereas `rbtdb`
chooses `locknum` deterministically based on the node's hash value.
Ondrej: this is already gone on main
# `isc/radix`
@ -181,6 +192,7 @@ Ought to be unnecessary. Might be worth cleaning up as part of some
general parser refactoring (`isc/lex` could probably be made faster
using `re2c`).
Ondrej: Using [rage](http://www.colm.net/open-source/ragel/) is on my TODO list for too long...
# `isc/taskpool`
@ -200,6 +212,7 @@ like that was the plan when `isc/pool` was added).
There appears to be a bug in `isc_taskpool_expand()` when it fails to
create a new task: the existing taskpool will be left empty.
Ondrej: this is already gone on main
# `isccc`