LINUX.ORG.RU

C++. Структура данных эффективнее heap. Для очереди с приоритетом.

 


0

1

Есть 1000 задач, которые повторяются с переменным интервалом. Когда очередная выполняется, то следующий раз она выполнится, ей придумывается следущее время исполнения через рандомное время, например rand()%0xfff миллисекунд.

Реализовано так: есть heap (std::vector + pop_heap, push_heap). Число задач в долгосрочном периоде постоянно, поэтому ресайз вектора крайне редок.

Засыпаю до времени, которое имеет задача на вершине хипа. Просыпаюсь и делаю некоторое число задач, которые имеют текущее время (или меньше). Выполняя каждую задачу, делаю её pop из хипа, придумываю ей новое время выполнения и сразу push её в heap. Когда на вершине оказывается задача с временем «не сейчас», то засыпаю до этого времени.

Что я делаю с точки зрения производительности хуже, чем можно было бы?

На большом количестве таймеров механизм timer_wheel будет работать эффективнее, чем timer_heap. А если новое время срабатывания будет гарантировано больше, чем у всех имеющихся таймеров, то еще эффективнее будет timer_lisp.

ЗЫ. Есть библиотеки, где все это уже реализовано и доступно «из коробки».

eao197 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.