Есть 1000 задач, которые повторяются с переменным интервалом. Когда очередная выполняется, то следующий раз она выполнится, ей придумывается следущее время исполнения через рандомное время, например rand()%0xfff
миллисекунд.
Реализовано так: есть heap (std::vector + pop_heap, push_heap). Число задач в долгосрочном периоде постоянно, поэтому ресайз вектора крайне редок.
Засыпаю до времени, которое имеет задача на вершине хипа. Просыпаюсь и делаю некоторое число задач, которые имеют текущее время (или меньше). Выполняя каждую задачу, делаю её pop из хипа, придумываю ей новое время выполнения и сразу push её в heap. Когда на вершине оказывается задача с временем «не сейчас», то засыпаю до этого времени.
Что я делаю с точки зрения производительности хуже, чем можно было бы?