Московская встреча пользователей Си++ - часть 2

Место встречи Сергей Платонов организовал московскую встречу Си++ разработчиков в конференц зале московской гостиницы Бородино, в районе Красносельского. Анонс группы и предварительная регистрация происходила посредством служб Google+, т.ч. тем кто пропустил, но хочет в дальнейшем быть в курсе, то милости прошу Google+ C++ User Group, Russia. Некоторые утверждают, что Google+ мертв, но мне кажется вы все не поняли его фишку. Там нет никого, кроме программистов! И в этом его очарование - например, все Linux kernel разработчики там (потому как собственно Linus там). Приходите туда - там тихо, и мухи не летают! Вообще, конечно, до того как у нас появится какой-то центральный сайт с информацией о российских Си++ событиях (типа isocpp.org но с проекцией на Россию, и конкретные города), узнавать приходится из разных источников и подчас случайно. Например, про готовящееся событие в Москве я узнал спросив @meetingcpp @meetingcpp so what is the current state with Moscow CPPUG?— Timur Safin (40+) (@tsafin) 17 января 2014 В любом случае, даже анонс через Google+ сработал вполне хорошо. На Питерское событие пришло порядка 20 человек, и это считалось успехом. Но на московскую встречу зарегистрировались уже 66, и 37 колебались. (Хорошо, что не все пришли, кстати, иначе я не знаю как мы бы решали эту проблему, зал реально был небольшим). Арендованный зал мог вместить 50-60 человек, и уже к концу первого доклада был почти полностью забит. Что можно считать успехом С другой стороны Си++ программистов в Москве на 2 или 3 порядка больше, и надо задуматься как наиболее эффективно с точки зрения стоимости решать проблему с большим количеством посетителей, если практика устоится и станет популярной. Но об этом поговорим в последнем посте серии... 27 attendees on Moscow #cop users group. Ready to start— Timur Safin (40+) (@tsafin) 15 февраля 2014 BTW, before 1st slides completed we have almost fully filled the hall #cpp #moscowcppusersgroup— Timur Safin (40+) (@tsafin) 15 февраля 2014 Но хватит лирики, давайте пойдем по докладам, один за одним, начиная с самой первой сессии. Григорий Демченко - асинхронность и конкурентность на сопрограммах Smoothly approaching boost.asio as async proactor implementation #cpp — Timur Safin (40+) (@tsafin) 15 февраля 2014 Григорий Демченко на примере простейшего http сервера с начала с последовательным кодом, но использующего все нужные Си++11 идиомы (типа лямбда-функций, auto, и последнего oost,asio), а потом и с асинхронным кодом, попытался рассказать про множество проблем, которые вас ждут при написании асинхронного кода на Си++. В любом случае Вас ожидает дилемма: удобный/читабельный код против эффективного использования ресурсов. Григорий ввёл свои определения "параллельности" и "конкурентности" (которые могут не обязательно совпадать с классическими). От синхронного кода простого сервера http Григорий перешел к более эффективному асинхронному с отложенными обработчиками в виде различных лямбд. По-прежнему для примеров использовались сервисы Boost::asio/ Автором утверждалось, что многопоточное асинхронное решение плохо масштабируется при росте запросов к серверу, посему было предложено использовать сопрограммы (coroutines) как более эффективное асинхронное решение Any async code could be transformed to coroutines semiautomatically #cpp — Timur Safin (40+) (@tsafin) 15 февраля 2014 Утверждалось что любой чисто асинхронный код приведенный на ранних слайдах можно полуавтоматически перевести на использование сопрограм, и разработанной Григорием библиотеки synca. Boost.context for coprograms— Timur Safin (40+) (@tsafin) 15 февраля 2014 При работе с многопоточным приложением и при использовании механизма сопрограмм возникает необходимость сохранять/восстанавливать программный контекст сопрограммы. Для этих целей используются сервисы Boost.context, который уже адаптирован для многих операционных систем и архитектур. На вопрос зачем использовать boost.context при наличии в любом Си окружении sejmp/longjmp Григорий затруднился дать ответ. Parallel vs concurrent: goWait pattern #cpp — Timur Safin (40+) (@tsafin) 15 февраля 2014 Григорий в своей библиотеке добавил множество примитивов для упрощения многопоточного программирования и работы с ресурсами например goWait - ожидание завершения всех аргументов (сопрограмм). Several patterns for teleporting coroutines between threads #cpp — Timur Safin (40+) (@tsafin) 15 февраля 2014 Т.к. сопрограммы могут мигрировать с одного потока из пула на любой другой активный поток, то в библиотеки предоставляется API для переноса сопрограмм из контекста в контекст - "телепортация". Стилистически мне это API не очень понравилось (к тому же в глаза бросалось использование глобальных/нереентрантных данных), но пока будем считать это моей вкусовщиной, и придирками старого брюзги. Boost::asio также знает про стренды. "Если вы понимаете о чем я говорю"— Timur Safin (40+) (@tsafin) 15 февраля 2014 http://t.co/oCz9SPyglb— Timur Safin (40+) (@tsafin) 15 февраля 2014 Grigory Demchecnko on async was quite good. New boost services, and idioms covered #cpp #Moscow— Timur Safin (40+) (@tsafin) 15 февраля 2014 Библиотека synca доступна на BitBucket https://bitbucket.org/gridem/synca так что смотрите сами. В целом, несмотря на эти маленькие придирки выше, данный доклад был интересен, и множество упомянутых идиом и паттернов будут крайне полезны многим при написании масштабируемых многопоточных приложений, даже если Вы не будете в итоге использовать synca или Boost::Asio. Продолжение следует...

Московская встреча пользователей Си++ - часть 2

Место встречи

Сергей Платонов организовал московскую встречу Си++ разработчиков в конференц зале московской гостиницы Бородино, в районе Красносельского. Анонс группы и предварительная регистрация происходила посредством служб Google+, т.ч. тем кто пропустил, но хочет в дальнейшем быть в курсе, то милости прошу Google+ C++ User Group, Russia.

Некоторые утверждают, что Google+ мертв, но мне кажется вы все не поняли его фишку. Там нет никого, кроме программистов! И в этом его очарование - например, все Linux kernel разработчики там (потому как собственно Linus там). Приходите туда - там тихо, и мухи не летают!

Вообще, конечно, до того как у нас появится какой-то центральный сайт с информацией о российских Си++ событиях (типа isocpp.org но с проекцией на Россию, и конкретные города), узнавать приходится из разных источников и подчас случайно. Например, про готовящееся событие в Москве я узнал спросив @meetingcpp

В любом случае, даже анонс через Google+ сработал вполне хорошо. На Питерское событие пришло порядка 20 человек, и это считалось успехом. Но на московскую встречу зарегистрировались уже 66, и 37 колебались. (Хорошо, что не все пришли, кстати, иначе я не знаю как мы бы решали эту проблему, зал реально был небольшим). Арендованный зал мог вместить 50-60 человек, и уже к концу первого доклада был почти полностью забит. Что можно считать успехом

С другой стороны Си++ программистов в Москве на 2 или 3 порядка больше, и надо задуматься как наиболее эффективно с точки зрения стоимости решать проблему с большим количеством посетителей, если практика устоится и станет популярной. Но об этом поговорим в последнем посте серии...

Но хватит лирики, давайте пойдем по докладам, один за одним, начиная с самой первой сессии.

Григорий Демченко - асинхронность и конкурентность на сопрограммах

Григорий Демченко на примере простейшего http сервера с начала с последовательным кодом, но использующего все нужные Си++11 идиомы (типа лямбда-функций, auto, и последнего oost,asio), а потом и с асинхронным кодом, попытался рассказать про множество проблем, которые вас ждут при написании асинхронного кода на Си++. В любом случае Вас ожидает дилемма: удобный/читабельный код против эффективного использования ресурсов.

Григорий ввёл свои определения "параллельности" и "конкурентности" (которые могут не обязательно совпадать с классическими).

От синхронного кода простого сервера http Григорий перешел к более эффективному асинхронному с отложенными обработчиками в виде различных лямбд. По-прежнему для примеров использовались сервисы Boost::asio/ Автором утверждалось, что многопоточное асинхронное решение плохо масштабируется при росте запросов к серверу, посему было предложено использовать сопрограммы (coroutines) как более эффективное асинхронное решение

Утверждалось что любой чисто асинхронный код приведенный на ранних слайдах можно полуавтоматически перевести на использование сопрограм, и разработанной Григорием библиотеки synca.

При работе с многопоточным приложением и при использовании механизма сопрограмм возникает необходимость сохранять/восстанавливать программный контекст сопрограммы. Для этих целей используются сервисы Boost.context, который уже адаптирован для многих операционных систем и архитектур. На вопрос зачем использовать boost.context при наличии в любом Си окружении sejmp/longjmp Григорий затруднился дать ответ.

Григорий в своей библиотеке добавил множество примитивов для упрощения многопоточного программирования и работы с ресурсами например goWait - ожидание завершения всех аргументов (сопрограмм).

Т.к. сопрограммы могут мигрировать с одного потока из пула на любой другой активный поток, то в библиотеки предоставляется API для переноса сопрограмм из контекста в контекст - "телепортация". Стилистически мне это API не очень понравилось (к тому же в глаза бросалось использование глобальных/нереентрантных данных), но пока будем считать это моей вкусовщиной, и придирками старого брюзги.

Библиотека synca доступна на BitBucket https://bitbucket.org/gridem/synca так что смотрите сами. В целом, несмотря на эти маленькие придирки выше, данный доклад был интересен, и множество упомянутых идиом и паттернов будут крайне полезны многим при написании масштабируемых многопоточных приложений, даже если Вы не будете в итоге использовать synca или Boost::Asio.

Продолжение следует...