В сложной системе, состоящей из множества асинхронных задач, не обойтись без каналов. Мы заменили одну библиотеку на другую, и пропускная способность нашей дедуплицирующей файловой системы существенно выросла. Почему? Чем вообще отличаются реализации каналов?
В рамках доклада мы заглянем под капот популярных библиотек (tokio, flume, async-channel), рассмотрим примитивы, необходимые для их реализации: атомики, lock-free структуры данных, futex, thread::park, Waker. Я покажу, почему одни каналы быстрее других и в чем компромиссы, а также поделюсь бенчмарками и примерами кода.
Доклад будет полезен тем, кто интересуется производительностью и низкоуровневыми деталями кода. Слушатели узнают о том, как те или иные решения в реализации примитивов (в частности каналов) влияют на их производительность. Также узнают, чем различаются популярные библиотеки и какую выбрать для своих целей.