вторник, 23 сентября 2014 г.

[prog.c++] timertt: обслужить миллиард таймеров? Да легко!

По следам обсуждения новости о библиотеке timertt на LOR-е. В обсуждении добрый человек предложил код теста, в котором запускается на обслуживание не много, ни мало, один миллиард таймеров (несколько раз нолики в числе пересчитывал, вроде девять):

#include <iostream>
#include <cstdlib>

#include "timertt/all.hpp"

using namespace std;
using namespace std::chrono;
using namespace timertt;


int main()
{
   timer_wheel_thread_t tt;

   // Timer thread must be started before activation of timers.
   tt.start();
   
   int counter = 0;
   forint i = 0 ; i < 1000000000 ; ++i )
   tt.activate( milliseconds( 100 ),
         [&counter](){ ++counter; } );

   while( counter != 1000000000 )
      this_thread::sleep_for( chrono::milliseconds( 100 ) );
   
   cout << counter << endl;
}

С некоторым предательским чувством в коленках скомпилировал и запустил (MSVC++2013 64-bit, Win 8.1 64-bit):

bash-3.1$ time ./many_single_shot_timers.exe
1000000000

real    4m59.429s
user    0m0.000s
sys     0m0.015s

Таки миллиард таймеров за 5 минут, т.е. по 200 миллионов в минуту, т.е. по 3.3(3) миллиона в секунду. С учетом того, что профилированием и оптимизацией я не занимался, то получается вполне себе достойно. Честно скажу, вообще на таких объемах не запускал, не был уверен, что... :)))

Upd. Этот же тест, но с механизмом timer_list -- 4m31s, расход памяти приблизительно такой же -- около 42Mb. А вот timer_heap подкачал: 28m56s при расходе памяти под гигабайт. Вполне ожидаемый вывод: timer_heap не подходит для очень большого количества таймеров. Только удивительно, насколько именно не подходит.

PS. ЛОР -- торт! ;)

[prog.c++] libcds обновился до версии 1.6.0

Состоялся релиз библиотеки CDS (Concurrent Data Structure) 1.6.0. Хорошая C++ная библиотека с большой кучей всякого разного для lock-free под вменяемой лицензией. Если нужно что-то C++ное из этой области, то имеет смысл начинать поиски именно отсюда. Тем более, что разработчик из России, с ним можно общаться на русском языке.

[prog.memories] Vim, Ruby, Mxx_ru -- десять лет в пути...

Проработать на одном месте или над одним проектом долгое время -- это, блин, уникальный опыт. Причем долгое -- это где-то около 10 лет. Такой срок позволяет разглядывать некоторые вещи в действительно исторической перспективе. То, что когда-то нравилось и казалось удачным решением, с течением времени оказалось выброшенной пустышкой или же стало непозволительно дорогим при сопровождении. И наоборот, какая-то мелочь, которая была придумана сходу и которой не придавали особого значения, выдержала проверку временем и стала одной из немногих вещей, за которые реально не стыдно. А потом все поменялось :) Происходит что-то, что переводит старую разработку из дорогой в сопровождении во вполне себе хороший инструмент, который востребован, уже адаптирован под текущие нужды и не так уж много времени и сил требует на поддержание своей работоспособности. Тогда как вещь, которая верой и правдой служила тебе 7-8 лет подряд, и которой ты долгое время гордился, потихонечку отправляется куда-то на задворки в ожидании очередного поворота истории :)

понедельник, 22 сентября 2014 г.

[prog] Несколько вопросов к читателям

Вот уже несколько дней как удав по стекловате тащусь от возможности использовать ядро SObjectizer без ACE Framework. Вечный кайф, как говорится :) Перекомпиляция гораздо шустрее. Хошь Visual-ом компилируешься, хошь MinGW, хошь Cygwin-ом, хошь clang-ом -- лепота!

В связи с этим первый вопрос: кто-нибудь устанавливал себе clang под Windows, но с libc++ (инсталлятор под Windows, который лежит на llvm.org идет без libc++)? Под ArchLinux у меня clang есть, хочется еще и под Windows чтобы родной был.

Второй вопрос связан с Git-ом. Вместе с Svn сразу шла отличная Subversion Book, в которой все очень подробно и здорово объяснялось буквально на пальцах (хотя, как показала практика, мало кто ее реально читал). А есть ли что-то подобное для Git? Или в более общем смысле: что порекомендуете прочитать по Git-у, чтобы лаконичное и толковое и чтобы можно было быстро начать Git использовать?

Третий вопрос так же связан с Git-ом. Какую версию Git-а порекомендуете использовать под Windows? Нужна простая консольная версия. Без интеграций с Windows Shell и какой-либо IDE. Вроде как пару лет назад с портами Git под Windows было не очень гладко, потому и спрашиваю.

Git мне нужен вот для чего. Mxx_ru всегда жил на RubyForge. Но с прошлого года этот сайт взял и закрылся. Svn-репозиторий еще работает, но в моем случае только на чтение, т.к. после переезда с одной машины на другую, мои SSH-ные ключи устарели. А обновить их без работающего RubyForge не представляется возможным. Соответственно, чтобы проапдейтить Mxx_ru нужно его куда-то перенести. Первое, что приходит в голову -- это GitHub. Но, т.к. о Git-е у меня только поверхностные впечатления, то сначала нужно с ним познакомиться поближе.

воскресенье, 21 сентября 2014 г.

[prog.c++] Предопределенные макросы компилятора

Наткнулся в Интернете на несколько статей, посвященных предопределенным макросам С++ компиляторов. Интересно и полезно:

C/C++ tip: How to list compiler predefined macros. Наборы аргументов командной строки для нескольких компиляторов, которые заставляют компилятор выдать список предопределенных макросов.

C/C++ tip: How to detect the operating system type using compiler predefined macros. Макросы компилятора, которые позволяют определить ОС.

C/C++ tip: How to detect the processor type using compiler predefined macros. Макросы компилятора, которые позволяют определить тип процессора.

Pre-defined Compiler Macros. Проект на SourceForge, который собирает информацию, аналогичную трем приведенным выше статьям.

Так же отмечу раздел Articles на ресурсе, где размещены три первые статьи. Имхо, довольно интересная информация там представлена.