Folly: C++ библиотека для тех, кому важна каждая микросекунда

19 Jun, 2026
30,424
🔱 5,860
👥 996

Когда работаешь с высоконагруженными системами, стандартной библиотеки C++ часто оказывается недостаточно. Знакомое чувство, когда std::vector или std::string становятся узким местом? Инженеры Facebook столкнулись с этой проблемой ещё в 2012 году и создали Folly — коллекцию оптимизированных компонентов для C++.

Что такое Folly?

Folly (Facebook Open Source Library) — это не просто ещё одна библиотека для C++. Это набор инструментов, отполированных в условиях экстремальных нагрузок социальной сети с миллиардами пользователей. Главный принцип — «если что-то можно сделать быстрее, это должно быть сделано быстрее».

Логотип Folly

В отличие от Boost, который стремится к общности, Folly фокусируется на конкретных практических задачах Facebook. Как говорят сами разработчики: «Мы создаём свои компоненты только тогда, когда существующие решения не соответствуют нашим требованиям к производительности».

Топ-5 причин обратить внимание на Folly

  1. FBString — замена std::string с оптимизациями для малых строк (до 23 символов хранятся прямо в объекте без выделения памяти)
  2. AtomicHashArray — потокобезопасная хеш-таблица без блокировок
  3. IOBuf — цепочка буферов для эффективной работы с сетевыми пакетами
  4. Synchronized — элегантная обёртка для мьютексов
  5. Future/Promise — мощная альтернатива для асинхронного программирования

Для примера, вот как выглядит работа с Synchronized:

Реклама
folly::Synchronized<std::vector<int>> vec;
{
  auto lockedVec = vec.lock(); // Автоматическая блокировка
  lockedVec->push_back(42);
} // Мьютекс автоматически освобождается

Под капотом Folly

Технически Folly — это:

  • Требует C++17 или новее
  • Построена по принципу «плоской» структуры (все компоненты в одном пространстве имён folly)
  • Предоставляет около 200 отдельных заголовочных файлов
  • Тесно интегрирована с другими проектами Facebook (например, Thrift)

Интересно, что в Folly есть целый набор специфичных оптимизаций вроде PackedSyncPtr (упакованный указатель с дополнительными битами состояния) или SmallLocks (блокировки всего в 1 байт).

Где это используют?

Помимо самого Facebook, Folly находит применение в:

  • Высоконагруженных серверах
  • Системах обработки данных в реальном времени
  • Сетевых прокси и балансировщиках нагрузки
  • Любых проектах, где важна эффективность работы с памятью

Стоит ли пробовать?

Folly — это не библиотека для всех. Но если вы:

  • Работаете над высокопроизводительным C++ проектом
  • Упираетесь в ограничения стандартной библиотеки
  • Готовы к отсутствию обратной совместимости между версиями

...то Folly может стать вашим секретным оружием. Особенно впечатляет её производительность в многопоточной среде.

Для старта рекомендую посмотреть вводное видео от разработчиков:

Explain Like I’m 5: Folly

А вы уже пробовали Folly в своих проектах? Делитесь опытом в комментариях!

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.