Доклад

Алгоритм массово-параллельной работы с сокетами для C++

  • На русском языке

Мне посчастливилось работать в проектах, где было критически важно максимизировать пропускную способность сетевого кода, минимизировать задержку и эффективно масштабироваться на ядрах процессора через многопоточность. Boost::asio — фактически стандарт для сетевого кода на C++, но в редких случаях он недоступен или недостаточен по разным причинам:

  • Boost может быть недоступен на некоторых нишевых платформах (например, на игровых консолях).
  • Компания уже имеет собственную "все-в-одном" библиотеку и избегает крупных внешних зависимостей, таких как boost.
  • Производительность boost::asio под нагрузкой вызывает вопросы, а исходный код бывает труден для понимания.

На одном из проектов мне пришлось искать альтернативу boost::asio по всем этим причинам. В результате я разработал новый алгоритм планирования задач общего назначения на С++ и построил вокруг него сетевую библиотеку. В докладе я расскажу про:

  • Совершенно справедливое равномерное распределение задач между потоками, позволяющее плавно масштабироваться на много ядер CPU.
  • Поддержку C++20 корутин — можно писать линейный асинхронный код.
  • Бенчмарки — воспроизводимые и автоматические.
  • Формальную корректность — алгоритм планирования задач верифицирован с помощью TLA+.
  • Простоту — алгоритм легко понять и даже портировать на другие языки, помимо C++.

Проект в открытом доступе: https://github.com/Gerold103/serverbox.

Спикеры

Доклады