четверг, 2 июня 2016 г.

[life.cinema] Очередной кинообзор (2016/05)

Пусть с небольшим опазданием, но очередной список просмотренных фильмов. Небольшой, т.к. особо свободного времени не было.


Бешеные (Enragés, 2016). Отличная французская криминальная драма. Но смотреть нужно до самого конца.


13 часов: Тайные солдаты Бенгази (13 Hours: The Secret Soldiers of Benghazi, 2016). Добротно сделанный фильм, который смотрится на одном дыхании. Но после просмотра остается ощущение, что это очередное подтверждение уникального умения американцев крупно обосраться в реальной жизни, но зато потом снять по мотивам отличное героическое кино.


Люди Икс: Аппокалипсис (X-Men: Apocalypse, 2016). Визуальная составляющая на очень приличном уровне, как мне показалось. Но перед просмотром мозги нужно не просто отключать, их нужно оставлять дома.


Жертва (Sacrifice, 2016). Простенько и незамысловато. На один просмотр вполне сойдет, т.к. простоту сюжета вполне компенсируют хорошие актеры.


Двое во вселенной (La corrispondenza, 2016). Купился на трейлер, в котором была сделана заявка на фантастику. Оказалась сопливая мелодрама, хотя и вполне добротно снятая.


Команда уничтожить (Kill Command, 2016). Хороший был трейлер. Но само кино разочаровало. Нужно, предсказуемо, нет напряжения, ничем не цепляет.

Братья из Гримсби (Grimsby, 2016). Хоть я и сам далеко не пуританин, но происходящее на экране -- это просто ппц какой-то. Жаль потраченного на фильм времени.

понедельник, 30 мая 2016 г.

[prog.c++] Интересное чтиво: "C++ for Games: Performance. Allocations and Data Locality"

Хорошая ссылка всплыла на reddit-е: "C++ for Games: Performance. Allocations and Data Locality". Для тех, кто не сталкивался с негативным влиянием на скорость приложения со стороны активной работы с динамической памятью, имеет смысл прочесть. Даже если вы и не занимаетесь разработкой игр.

Кстати говоря, описанные по ссылке эффекты имеют значения и для фреймворков вроде SObjectizer или C++ Actor Framework (а так же Akka, Vert.x, Quasar и пр.). Особенно для SObjectizer-а, т.к. SO-5 поддерживает доставку сообщения сразу нескольким получателям. А в таких сценариях без размещения объекта сообщения в динамической памяти трудно обойтись.

Ну и в SO-5 мы предприняли несколько шагов, дабы уменьшить влияние этих факторов. Так, можно управлять тем, как агент хранит свои подписки. Например, в векторе. Или в std::map, или в std::unordered_map. Еще один такой шаг -- это свойства mchain-ов, которые определяют, как работать с памятью под очередь сообщений в mchain-е: выделять ее один раз сразу или же по чуть-чуть по мере работы с mchain-ом. Еще один такой шаг -- это возможность отсылать и перепосылать заранее созданные экземпляры сообщений (т.е. без пересоздания экземпляра на каждый send).

Вот до чего руки пока не дошли, так это до преаллоцированных векторов сообщений для самих агентов. И до операции копирования содержимого сообщения в этот вектор. Для ряда сценариев, когда агенты работают с очень ограниченным количеством типов сообщений, этот подход сможет дать очень хорошее снижение накладных расходов. Причем, для воплощение этого сценария в жизнь очень в тему окажутся фичи C++11, т.к. variadic templates. Так, шаблонная функция send сможет вызывать placement new для размещения экземпляра сообщения прямо внутри преаллоцированного вектора сообщений агента(ов)-получателя.

Просто мы сами пока еще не сталкивались с ситуациями, где бы в реальном приложении существующий механизм доставки был бы тормозом. Поэтому пока руки еще и не дошли. Надеюсь, что дойдут :)