Если первоначальный проект не отвечает требованиям, предъявляемым к эффективности, то его необходимо пересмотреть. Для этого применяются критерии разбиения на задачи и критерии инверсии задач, в частности более слабые формы группировки задач (темпоральная инверсия) и другие виды инверсии: инверсия нескольких экземпляров задачи и инверсия последовательных задач.
Если бы в примере системы круиз-контроля были проблемы с производительностью, то прежде всего стоило бы подумать об инверсии последовательных задач. Рассмотрим ситуацию, когда задача Круиз-Контроль посылает команду задаче Корректировка Скорости, которая, в свою очередь, отправляет сообщения задаче Интерфейс Дросселя. Эти три задачи можно объединить, применив инверсию последовательных задач, то есть заменив их одной задачей Круиз-Контроль с пассивными объектами Корректировка Скорости и Интерфейс Дросселя. Таким образом были бы устранены накладные расходы на межзадачные коммуникации и контекстное переключение. Пусть время ЦП, потребляемое инвертированной задачей, равно Сv. Обратившись к табл. 17.2, получаем:
Сv = С4 + C6 + C8 (уравнение 4).
Время, необходимое для выполнения двух задач в новой последовательности обработки события Сee равно.
Cee = C1 + C2 + Cv + Cm + 2Сx (уравнение 5).
Интересно сравнить уравнение 5 (в последовательности только две задачи) с уравнением 1 из раздела 17.5 (в последовательности четыре задачи); накладные расходы на обмен сообщениями уменьшились с 3Сm до Сm, а на контекстное переключение — с 4Сx до 2Сx. Воспользовавшись оценками времени из табл. 17.2, увидим, что полное время выполнения сократилось с 35 до 32 мс. Если бы накладные расходы были выше, экономия оказалась бы более существенной. Например, при Сm = 3 мс и Сx = 2 мс общее время выполнения апериодических задач уменьшится с 47 до 37 мс.