Оптимизируйте общий случай
В качестве первого примера рассмотрим вхождение в критическую область. В большинстве случаев процессу будет удаваться вход в критическую область, особенно если внутри этой области процессы проводят не много времени. Операционная система Windows 8 использует это преимущество, предоставляя вызов WinAPI EnterCriticalSection, который является атомарной функцией, проверяющей флаг в режиме пользователя (с помощью команды процессора TSL или ее эквивалента). Если тест проходит успешно, процесс просто входит в критическую область, для чего не требуется обращения к ядру. Если же результат проверки отрицательный, библиотечная процедура выполняет на семафоре операцию down, чтобы заблокировать процесс.
Таким образом, если все нормально, обращения к ядру не требуется. В главе 2 мы видели, что фьютексы в Linux также оптимизированы для общего случая отсутствия конкуренции.В качестве второго примера рассмотрим установку будильника, использующего сигналы UNIX. Если в текущий момент ни один будильник не заведен, то просто создается запись и помещается в очередь таймеров. Однако если будильник уже заведен, его следует найти и удалить из очереди таймера. Так как системный вызов alarm не указывает, установлен ли уже будильник, система должна предполагать худшее, то есть что он уже заведен. Однако в большинстве случаев будильник не будет заведен, и поскольку удаление существующего будильника представляет собой дорогое удовольствие, то следует различать эти два случая.
Один из способов достижения этой цели заключается в том, чтобы хранить в таблице процессов бит, указывающий, заведен ли будильник. Если бит сброшен, то программа следует по простому пути (просто добавляется новая очередь таймера без какой-либо проверки). Если бит установлен, то очередь таймера требует проверки.
12.5.
Еще по теме Оптимизируйте общий случай:
- Общий обзор
- 2. Общий и специальные сроки исковой давности
- 7.1. Общий взгляд на проблему
- 7.1. Общий взгляд на проблему
- ПСИХОАНАЛИЗ: ПРИНЦИП ОБЩИЙ
- ОБЩИЙ СИНТЕЗ: ЗАПАДНАЯ ПОЛОВИНА
- 2. Общий порядок заключения договоров
- ОБЩИЙ СИHТЕЗ: ВОСТОЧHАЯ ПОЛОВИHА
- 2. Общий вывод из единичных фактов
- Роберт находит общий язык с детьми
- 1. Общий анализ энергетической системы пациента.
- Вот общий итог Трёх Аксиом Справедливости.
- § 4. Содержание корпоративных прав: Общий обзор (п. 2229-2234)
- 9.19. Лечебно-профилактический массаж по системе До-Ин (общий для всех каналов)
- § 11. Содержание товарищеских прав: Общий обзор. Правоотношения по поводу общего имущества (п. 2272-2279)
- коян: Восходящий узел - включение в общий поток; Нисходящий узел - исключение из общего потока.