FastCGo: как мы ускорили вызов C-кода в Go в 16,5 раза
Всем привет! Меня зовут Владимир Пустовалов, я C++ разработчик в команде Deckhouse компании «Флант». Мои коллеги — DevOps-инженеры — на данный момент обслуживают более 600 кластеров, и, естественно, в каждом из них развёрнута система мониторинга.
Изначально мы использовали Prometheus — опенсорсную систему мониторинга, написанную на Go. По нашей статистике, она занимала около 20 % ресурсов каждого кластера. Мы не могли с этим мириться и поэтому разработали проект под названием Prom++, в котором многократно сократили потребление оперативной памяти и снизили нагрузку на центральный процессор.
Кратко о том, что мы сделали: переписали на С++ ядро хранения и обработки горячих данных, при этом вся оркестрация и периферия остались в Prometheus на Go, что позволило сохранить полную совместимость с Prometheus. Для частых вызовов кода C++ мы использовали механизм CGo, однако первые тесты показали, что производительность CPU практически не улучшилась из-за медлительности CGo. В итоге мы переписали CGo, создав собственный механизм вызова.
Что будет в этой статье:
Разберём, что такое CGo и почему он медленный.
Создадим простой собственный механизм CGo-вызова.
Доведём этот механизм до полноценного решения.
https://habr.com/ru/companies/flant/articles/923912/
#cpp #programming
👉 @cpp_lib
Всем привет! Меня зовут Владимир Пустовалов, я C++ разработчик в команде Deckhouse компании «Флант». Мои коллеги — DevOps-инженеры — на данный момент обслуживают более 600 кластеров, и, естественно, в каждом из них развёрнута система мониторинга.
Изначально мы использовали Prometheus — опенсорсную систему мониторинга, написанную на Go. По нашей статистике, она занимала около 20 % ресурсов каждого кластера. Мы не могли с этим мириться и поэтому разработали проект под названием Prom++, в котором многократно сократили потребление оперативной памяти и снизили нагрузку на центральный процессор.
Кратко о том, что мы сделали: переписали на С++ ядро хранения и обработки горячих данных, при этом вся оркестрация и периферия остались в Prometheus на Go, что позволило сохранить полную совместимость с Prometheus. Для частых вызовов кода C++ мы использовали механизм CGo, однако первые тесты показали, что производительность CPU практически не улучшилась из-за медлительности CGo. В итоге мы переписали CGo, создав собственный механизм вызова.
Что будет в этой статье:
Разберём, что такое CGo и почему он медленный.
Создадим простой собственный механизм CGo-вызова.
Доведём этот механизм до полноценного решения.
https://habr.com/ru/companies/flant/articles/923912/
#cpp #programming
👉 @cpp_lib
❤4👍1
Trip report: June 2025 ISO C++ standards meeting (Sofia, Bulgaria)
Сегодня — поворотный момент в истории C++: всего несколько минут назад комитет по стандартизации C++ проголосовал за включение первых семи документов по отражению во время компиляции (compile-time reflection) в черновик стандарта C++26 — под продолжительные аплодисменты в зале. Думаю, лучше всего значение этой функции выразила Хана «Мисс Констэкспр» Дусикова несколько дней назад, в своей привычной спокойной и невозмутимой манере... когда ей сказали, что документ по reflection попадёт на голосование в субботу, она слегка пожала плечами и тихо сказала: «Совершенно новый язык».
https://herbsutter.com/2025/06/21/trip-report-june-2025-iso-c-standards-meeting-sofia-bulgaria/
статья от 2025-06-21
#cpp #programming
👉 @cpp_lib
Сегодня — поворотный момент в истории C++: всего несколько минут назад комитет по стандартизации C++ проголосовал за включение первых семи документов по отражению во время компиляции (compile-time reflection) в черновик стандарта C++26 — под продолжительные аплодисменты в зале. Думаю, лучше всего значение этой функции выразила Хана «Мисс Констэкспр» Дусикова несколько дней назад, в своей привычной спокойной и невозмутимой манере... когда ей сказали, что документ по reflection попадёт на голосование в субботу, она слегка пожала плечами и тихо сказала: «Совершенно новый язык».
https://herbsutter.com/2025/06/21/trip-report-june-2025-iso-c-standards-meeting-sofia-bulgaria/
статья от 2025-06-21
#cpp #programming
👉 @cpp_lib
👍9❤3
Media is too big
VIEW IN TELEGRAM
Запись System Level MeetUp. Поток C++
Мы встретились, чтобы поговорить об C++ в системной разработке: обсудить стандарты, подходы и реальные задачи, которые решаются на этом языке.
00:00 - Открытие мероприятия.
08:30 - Доклад "Девиртуализация в C++, компиляторах и вашей программе" (Константин Владимиров и Илья Андреев).
47:50 - Вопросы от участников.
01:00:32 - Доклад "Кодек для json'ов с фиксированной схемой" (Никита Пешаков).
01:27:33 - Вопросы от участников.
01:43:04 - Дискуссия "Как писать меньше на C++?" (Константин Владимиров, Илья Казаков, Алексей Щербаков, Василий Рамаданов).
02:43:06 - Доклад "Реализация динамического полиморфизма для свободных функций" (Кирилл Колодяжный).
03:00:56 - Вопросы участников.
03:11:00 - Доклад "Шаблонное мета-программирование в современном C++ для задач космической баллистики" (Леонид Меркин).
03:59:32 - Вопросы участников.
04:06:05 - Доклад "C++ внутри PostgreSQL: удобство против традиций" (Илья Шишков).
04:46:55 - Вопросы участников.
источник
#cpp #programming
👉 @cpp_lib
Мы встретились, чтобы поговорить об C++ в системной разработке: обсудить стандарты, подходы и реальные задачи, которые решаются на этом языке.
00:00 - Открытие мероприятия.
08:30 - Доклад "Девиртуализация в C++, компиляторах и вашей программе" (Константин Владимиров и Илья Андреев).
47:50 - Вопросы от участников.
01:00:32 - Доклад "Кодек для json'ов с фиксированной схемой" (Никита Пешаков).
01:27:33 - Вопросы от участников.
01:43:04 - Дискуссия "Как писать меньше на C++?" (Константин Владимиров, Илья Казаков, Алексей Щербаков, Василий Рамаданов).
02:43:06 - Доклад "Реализация динамического полиморфизма для свободных функций" (Кирилл Колодяжный).
03:00:56 - Вопросы участников.
03:11:00 - Доклад "Шаблонное мета-программирование в современном C++ для задач космической баллистики" (Леонид Меркин).
03:59:32 - Вопросы участников.
04:06:05 - Доклад "C++ внутри PostgreSQL: удобство против традиций" (Илья Шишков).
04:46:55 - Вопросы участников.
источник
#cpp #programming
👉 @cpp_lib
❤11👍3
Почему C++ считает мой класс копируемым, если его нельзя скопировать?
Рассмотрим следующий сценарий:
Почему выполняется это assertion? Очевидно, что скопировать Derived<int> нельзя, ведь при этом мы попытаемся скопировать некопируемый Base<int>. И в самом деле, если попробовать скопировать его, то мы получим ошибку:
Итак, компилятор считает, что Derived<int> копируемый, но когда мы пытаемся его скопировать, выясняется, что это не так!
https://habr.com/ru/articles/920202/
#cpp #programming
👉 @cpp_lib
Рассмотрим следующий сценарий:
template<typename T>
struct Base
{
// Есть конструктор по умолчанию
Base() = default;
// Не копируемый
Base(Base const &) = delete;
};
template<typename T>
struct Derived : Base<T>
{
Derived() = default;
Derived(Derived const& d) : Base<T>(d) {}
};
// Это assertion выполняется?
static_assert(
std::is_copy_constructible_v<Derived<int>>);
Почему выполняется это assertion? Очевидно, что скопировать Derived<int> нельзя, ведь при этом мы попытаемся скопировать некопируемый Base<int>. И в самом деле, если попробовать скопировать его, то мы получим ошибку:
void example(Derived<int>& d)
{
Derived<int> d2(d);
// msvc: error C2280: 'Base<T>::Base(const Base<T> &)':
// attempting to reference a deleted function
// gcc: error: use of deleted function 'Base<T>::Base(const Base<T>&)
// [with T = int]'
// clang: error: call to deleted constructor of 'Base<int>'
}
Итак, компилятор считает, что Derived<int> копируемый, но когда мы пытаемся его скопировать, выясняется, что это не так!
https://habr.com/ru/articles/920202/
#cpp #programming
👉 @cpp_lib
👍2🔥2
Media is too big
VIEW IN TELEGRAM
17 июля в 19:00 (Мск) приглашаем на онлайн-встречу,посвященную профессиональному развитию в сфере разработки электронных устройств.
Наша Академия программирования электронных устройств занимается повышением квалификации инженеров-радиоэлектронщиков.
На встрече обсудим:
- Кто занимается разработкой электронных устройств сегодня
- Самые востребованные направления в отрасли
- Актуальные возможности для профессионального старта
- Разные форматы работы в этой сфере
Также у вас будет возможность:
- Получить ответы на свои вопросы от эксперта
- Познакомиться с программами дополнительного профессионального образования в этой сфере
Регистрируйтесь прямо сейчас – количество мест ограничено!
После регистрации Вам придет бонус - "Принципы работы радиоэлектронщиков"
Ждем Вас!
Наша Академия программирования электронных устройств занимается повышением квалификации инженеров-радиоэлектронщиков.
На встрече обсудим:
- Кто занимается разработкой электронных устройств сегодня
- Самые востребованные направления в отрасли
- Актуальные возможности для профессионального старта
- Разные форматы работы в этой сфере
Также у вас будет возможность:
- Получить ответы на свои вопросы от эксперта
- Познакомиться с программами дополнительного профессионального образования в этой сфере
Регистрируйтесь прямо сейчас – количество мест ограничено!
После регистрации Вам придет бонус - "Принципы работы радиоэлектронщиков"
Ждем Вас!
👍4🔥2❤1
Курс по ООП в С++
введение
инкапсуляция
наследование
полиморфизм
шаблоны и метапрограммирование
источник
#cpp #programming
👉 @cpp_lib
введение
инкапсуляция
наследование
полиморфизм
шаблоны и метапрограммирование
источник
#cpp #programming
👉 @cpp_lib
👍9
🦀 Хотите стать Middle Rust-разработчиком?
Присоединяйтесь к открытому уроку «Техническое собеседование на Middle Rust разработчика» 24 июля в 20:00 МСК. В режиме онлайн разберем:
— Типичные вопросы, которые вам зададут на собеседовании.
— Задачи, которые дают кандидатам на уровне Middle.
— Частые ошибки на собеседованиях и способы их избежать.
❗️Этот урок — отличная подготовка к карьерному росту в разработке.
👉 Записаться на вебинар курса «Rust Developer. Professional» → https://vk.cc/cNKKqz
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Присоединяйтесь к открытому уроку «Техническое собеседование на Middle Rust разработчика» 24 июля в 20:00 МСК. В режиме онлайн разберем:
— Типичные вопросы, которые вам зададут на собеседовании.
— Задачи, которые дают кандидатам на уровне Middle.
— Частые ошибки на собеседованиях и способы их избежать.
❗️Этот урок — отличная подготовка к карьерному росту в разработке.
👉 Записаться на вебинар курса «Rust Developer. Professional» → https://vk.cc/cNKKqz
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
👍1
Эффективное использование С++
Лекция 1. Библиотеки, утилиты, средства разработки, сборка (Эффективное использование С++)
Лекция 2. Работа с памятью. Утечки ресурсов. RAII, умные указатели (Эффективное использование С++)
Лекция 3. Move semantics, rvalue reference, perfect forwarding.
Лекция 4. Callbacks: lambda, bind & function.
Лекция 5. Multithreading in C++ (потоки, блокировки, задачи, атомарные операции, очереди сообщений)
Лекция 6. Обзор возможностей современных стандартов C++
источник
#cpp #programming
👉 @cpp_lib
Лекция 1. Библиотеки, утилиты, средства разработки, сборка (Эффективное использование С++)
Лекция 2. Работа с памятью. Утечки ресурсов. RAII, умные указатели (Эффективное использование С++)
Лекция 3. Move semantics, rvalue reference, perfect forwarding.
Лекция 4. Callbacks: lambda, bind & function.
Лекция 5. Multithreading in C++ (потоки, блокировки, задачи, атомарные операции, очереди сообщений)
Лекция 6. Обзор возможностей современных стандартов C++
источник
#cpp #programming
👉 @cpp_lib
👍8❤6