Most #database indexes are B-trees
But what is a B-tree?
A self-balancing tree
That allows for more than 2 child nodes
And is particularly adept at handling data that cannot fit into a machine or program’s main memory.
@vaidehijoshi explains in-depth https://t.co/X6wMUnEq3S
Книга действительно фундаментальная и большинство описанных решений в той или иной мере используются в разных языках программирования, начиная от Python с его подсчетом ссылок, и заканчивая Go с его параллельной сборой мусора с использованием буферов памяти и поколениями.
Прошло уже какое-то время с тех пор как я разбирался с темой автоматического управления памятью в разных языках программирования и уже настало время чтобы систематизировать полученные знания, ну и освежить эти знания.
Эта книга в итеративной форме описывает основные подходы, проблемы и способы их решений при автоматическом управляении памяти без привязки к конкретному языку программирования.
#pytest 6.0.0 has just been released to PyPI!
This major contains a bunch of new goodies, such as full type annotations, pyproject.toml support, new hooks, and command-line flags.
CHANGELOG: https://t.co/tu1c9TIiu2
И немного тестов
Fast read thread-safe counter:
10000000 loops, best of 5: 26.3 nsec per loop
500000 loops, best of 5: 375 nsec per loop
Fast write thread-safe counter:
500000 loops, best of 5: 434 nsec per loop
2000000 loops, best of 5: 140 nsec per loop
В питоне можно сделать потокобезопачный счётчик с быстрой записью без блокировок если использовать itertools.count(). Правда уже для чтения его значения придётся использовать блокировку, но если характер наружки позволяет, то почему бы и нет.
Эта магия работает за счёт того, что во время выполнения сишного кода, питон отпускает GIL, а тк itertools.count() реализован на Си, то это можно использовать как гарантию потокобезопасности. Работает конечно только в контексте CPython.
В случае если big-oh и omega это одна и таже функция, то она называется theta. Она ограничивает исходную функцию как сверху, так и снизу (используя разные константы).
В общем случае все современные компьютеры используют так называемую архитектуру фон Неймана, суть которой сводится к тому что есть некий вычислитель, память и устройства ввода-вывода. Память совместно содержит как данные так и команды для работы с ними.