воскресенье, 22 июня 2008 г.

Распаралеливание вычислений.

Вариант распаралеливания вычислений в программе.
Схема пакета Executor:


Использование.


class SomeJob:public Job
{
...
SumeJob(int aparam1, int aparam2);
void doIt();
}

......

Job* j = new SomeJob(param1, param2);
executor->put(j);
// о j можно забыть, пакет executor сам его удалит


Метод put на языке С++.


void Queue::put(Job* c)
{
{
Utils::Locker l(mutex);
cmdList.push_back(c);
}
cond.event();
}


Метод Queue::get такой-же, за исключением ожидания на cond с таймаутом при пустой очереди.
Метод run на языке С++.


void Queue::run()
{
Queue* q = Queue::instance();
Job* c = NULL;
while(!terminated())
{
c = q->get();
if(!c) continue;
c->doit();
delete c;
}
}


Приведенная схема позволяет:
- свести к минимуму взаимные блокировки на разделяемых ресурсах ;
- сглаживать нагрузку на "неторопливые" части системы (база данных, сетевой обмен, дисковые операции);
- организовать отложенное выполнение долгих операций при отсутствии времени выполнить их в рабочих алгоритмах программы;
- задействовать ресурсы многопроцессорных/многоядерных систем;
Схема упрощена для демонстрации. В реальной жизни необходимо позаботится об обработке исключительных ситуаций.
Когда необходимо возвращать из Job::doIt() информацию приведенная схема применима, но немного усложняется.
Об этом следующий раз.

Ссылки в тему:
Одиночка на Wikipedia (осторожно пользуйтесь одиночкой Майерса, его поведение зависит от реализации компилятора)

вторник, 10 июня 2008 г.

О наследовании в ООП

Наследование не самый эффективный механизм в ООП.

Хотя наследование и является одним из трех важнейших механизмов теории объектно-ориентированного программирования, на практике

Пример на основе классов потоков - история вопроса VCL, MFC, Java, .NET.
Пример - комманды меню. агрегирование Command в Menu.
Пример

среда, 4 июня 2008 г.

Нулевой пост

Здравствуйте.
Начинаю вести блог. Очень долго заставлял себя сделать это. В ИНЕТЕ я читатель - предпочитаю поглащать информацию.
Но рано или поздно, а выходить из тени надо.
О себе:
В классификации Спольски занимаюсь разработкой встроенного ПО.

Думаю Вам будет у меня не скучно.