Folly: C++ библиотека для тех, кому важна каждая микросекунда
Когда работаешь с высоконагруженными системами, стандартной библиотеки C++ часто оказывается недостаточно. Знакомое чувство, когда std::vector или std::string становятся узким местом? Инженеры Facebook столкнулись с этой проблемой ещё в 2012 году и создали Folly — коллекцию оптимизированных компонентов для C++.
Что такое Folly?
Folly (Facebook Open Source Library) — это не просто ещё одна библиотека для C++. Это набор инструментов, отполированных в условиях экстремальных нагрузок социальной сети с миллиардами пользователей. Главный принцип — «если что-то можно сделать быстрее, это должно быть сделано быстрее».
В отличие от Boost, который стремится к общности, Folly фокусируется на конкретных практических задачах Facebook. Как говорят сами разработчики: «Мы создаём свои компоненты только тогда, когда существующие решения не соответствуют нашим требованиям к производительности».
Топ-5 причин обратить внимание на Folly
- FBString — замена
std::stringс оптимизациями для малых строк (до 23 символов хранятся прямо в объекте без выделения памяти) - AtomicHashArray — потокобезопасная хеш-таблица без блокировок
- IOBuf — цепочка буферов для эффективной работы с сетевыми пакетами
- Synchronized — элегантная обёртка для мьютексов
- 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 может стать вашим секретным оружием. Особенно впечатляет её производительность в многопоточной среде.
Для старта рекомендую посмотреть вводное видео от разработчиков:
А вы уже пробовали Folly в своих проектах? Делитесь опытом в комментариях!

