Однажды мы с нашей командой решили попробовать gRPC для своих задач. После некоторых обсуждений, пришли к выводу, что будем использовать асинхронные клиент и сервер. Однако, под рукой оказался рабочий пример из документации только для одного режима. Примеры остальных режимов взаимодействия, основные принципы работы асинхронных операций, принципы работы асинхронного сервера и клиента в gRPC и многое другое под катом.
Читать полностью »
Рубрика «c++11» - 4
Асинхронные режимы фреймворка gRPC и принципы их работы в С++
2017-10-23 в 11:48, admin, рубрики: c++, c++11, grpc, ПрограммированиеБиблиотека для синхронизации состояния
2017-10-22 в 11:27, admin, рубрики: c++, c++11, zmq, микросервисы, Разработка для интернета вещей, Разработка систем передачи данных, распределенные системы, синхронизация данных, Системы обмена сообщениямиТак случилось, что на одном проекте потребовалось реформировать способ обмена данными между различными процессами. Исторически сложившаяся схема была довольно неприглядна. Один процесс периодически перезаписывал свои текущие настройки в виде XML-файла. Второй вычитывал этот файл раз в секунду, проверяя, что в нём поменялось с прошлого раза. Изменения файла вычислялись через множество сравнений текущего и прошлого его состояний, порождая некоторую цепочку действий. Читающий процесс писал в свою очередь другой XML-файл, который читался третьим процессом и т.п. Самое печальное то, что данная схема требовала громоздкого, из раза в раз повторяющегося кода сравнений, который наслаивался при добавлении новых данных.
Ваши собственные std::code_error
2017-10-20 в 16:59, admin, рубрики: c++, c++11, error_code, ПрограммированиеПара слов от переводчика
Продолжая освещать тему std::system_error
в рунете, я решил перевести несколько статей из блога Andrzej Krzemieński, который мне посоветовали в комментариях к предыдущему посту.
Так как эти статьи имеют достаточный объем, я решил не сливать их в кучу, как в прошлый раз, а публиковать в формате оригинала.
Так же хочу предупредить, что у Andrzej Krzemieński достаточно сумбурный стиль изложения, который я не стал править. Все же я выступаю в роли переводчика, а не редактора. Так что, возможно, чтобы понять некоторые тезисы придется перечитать дважды.
Читать полностью »
Микросервисы — MIF на C++
2017-09-11 в 15:20, admin, рубрики: c++, c++11, Microservices, reflection, RPC, web-backend, web-services, ПрограммированиеОколо трех лет назад у меня была идея создания небольшого каркаса для разработки небольших сервисов, которые могли бы как-то взаимодействовать между собой, предоставлять API во вне, работать с базами данных и кое-что по мелочи еще. Во время решения некоторых рабочих задач, окончательно сформировалась идея своего проекта, близкого к решению рабочих задач. Примерно год назад все это сформировалось в проект MIF (MetaInfo Framework). Предполагалось, что с его помощью можно будет решать такие задачи, как:
- Разработка легковесных HTTP сервисов
- Коммуникация микросервисов через передаваемые между процессами интерфейсы
- Сериализация и десериализация на базе рефлексии структур данных в разные форматы
- Работа с базами данных
- Некоторые вспомогательные компоненты для создания каркасов сервисов
Все это ориентировано на разработку backend сервисов для веба, но может использоваться и в других системах.
Читать полностью »
Как Яндекс создавал курс по C++, или Почему нам всё пришлось переписать
2017-07-06 в 13:09, admin, рубрики: c++, c++11, coursera, Блог компании Яндекс, контейнеры, курсы, курсы программирования, новичкам, онлайн-курсы, основы программирования, Программирование, Совершенный кодВ Яндексе C++ — один из основных языков, на нём написан наш поиск. Его развитие нам настолько важно, что больше года назад по инициативе Яндекса была создана российская рабочая группа по стандартизации «плюсов». Через неё у всех разработчиков русскоязычного пространства есть возможность влиять на развитие языка.
Недавно Физтех, Яндекс и ШАД запустили ещё один курс на платформе Coursera — «Основы разработки на C++: белый пояс». Он посвящён знакомству с С++. Я расскажу, для кого этот курс, как мы его готовили, что получилось в итоге и каковы наши дальнейшие планы.
Как всё началось, было выброшено и началось снова
Онлайн-специализацию из пяти курсов по С++ мы задумали прошлым летом. Сначала сочиняли программу потихоньку, потом активнее, и в октябре начали снимать видео.
Списки инициализации в C++: хороший, плохой, злой
2017-06-07 в 7:58, admin, рубрики: braces, c++, c++11, initialization, С++
В этой статье я бы хотел рассказать о том, как работают списки инициализации (braced initializer lists) в C++, какие проблемы они были призваны решать, какие проблемы, в свою очередь, вызвали и как не попасть в просак.
Потокобезопасный std::map с производительностью lock-free map
2017-05-10 в 21:44, admin, рубрики: c++, c++11, C++14, high performance, lock, lock-free, locks, low-latency, высокая производительность, параллельное программирование, ПрограммированиеПримеры использования и тестирование потоко-безопасного указателя и contention-free shared-mutex
В этой статье мы покажем: дополнительные оптимизации, примеры использования и тестирование разработанного нами потоко-безопасного указателя с оптимизированным разделяемым мьютексом contfree_safe_ptr<T> – это эквивалентно safe_ptr<T, contention_free_shared_mutex<>>
В конце покажем сравнительные графики тестов нашего thread-safe указателя и одних из лучших lock-free алгоритмов из libCDS на процессорах Intel Core i5/i7, Xeon, 2 x Xeon.
Читать полностью »
Делаем любой объект потокобезопасным
2017-05-10 в 21:43, admin, рубрики: c++, c++11, concurrency, multithreading, параллельное программирование, ПрограммированиеВ этих 3-ех статьях я детально расскажу об атомарных операциях, барьерах памяти и о быстром обмене данными между потоками, а так же о «sequence-points» на примере «execute-around-idiom», а заодно постараемся вместе сделать что-нибудь полезное — умный указатель, который делает любой объект потоко-безопасным для любых операций с его членами переменными или функциями. А затем покажем как используя его достичь производительности высоко-оптимизированных lock-free алгоритмов на 8 — 64 ядрах.
Читать полностью »
Как мы портировали программно-аппаратное решение из SPARC Solaris в AMD64 Linux и виртуализировали все это
2017-03-30 в 16:58, admin, рубрики: boost, c++, c++11, linux, Solaris, виртуализация, Программирование, Разработка под Linux, системное программированиеЭта статья для тех, кто все еще сильно любит древние Unix, но уже понимает, что срочно нужно мигрировать на Linux...
Началась эта история с того, что наш уважаемый заказчик решил уменьшить риски эксплуатации оборудования 10-ти летнего возраста, сэкономить на лицензиях и перейти с Unix на Linux, а заодно и виртуализировать это программно-аппаратное решение. Не то, чтобы заказчик не любил Solaris и Unix, просто сама возможность виртуализировать серверное приложение, жестко привязанное к специфической на сегодняшний день архитектуре SPARC и «седеющей» операционной системе Solaris, выглядела для заказчика очень привлекательной. Отдельным пунктом стоял вопрос замены специализированной карты с PCI интерфейсом на доступное «виртуализированное» решение. Мы решили взяться за такую интересную задачу.
Читать полностью »