Аудио-колбэк
Функция, которую аудиодрайвер вызывает всякий раз, когда нужно заполнить следующий буфер, — и опаздывать ей нельзя никогда.
Почти все аудио-API — от ASIO и Core Audio до JACK и Web Audio — работают по одной модели: программа регистрирует функцию, а драйвер вызывает её из высокоприоритетного потока, порой тысячу раз в секунду, передавая пустой буфер, который к возврату должен быть заполнен. При 64 сэмплах и 48 кГц на всё про всё остаётся около 1,3 миллисекунды.
Отсюда правила, которые Росс Бенчина в 2011 году собрал под заголовком time waits for nothing: никаких выделений памяти, блокировок, файлового и сетевого ввода-вывода и системных вызовов, способных застрять. malloc обычно быстр, но не всегда, а «не всегда» слышно как щелчок. Поэтому с остальной программой колбэк общается через lock-free очереди. Языкам со сборкой мусора здесь тоже тяжело — по той же причине.