Обратите внимание на начало строк, там стоят минусы, т.е. весь этот блок кода был удалён, а директива препроцессора #if OS(WINDOWS) означает лишь, что в Windows API есть готовая функция Sleep, которой на Unix нету.
А всё-равно ламерство так писать. Должна быть единая в рамках кода функция sleep() (ну или nanosleep()), которая бы вызывалась отовсюду, а уже в ней должен быть этот #if
Исправили это на Sleep(0). Т.е. там нужно все-таки было отдать управление в шедулер. Откуда там двойка была, как и на что она влияла — это надо еще посмотреть.
Связано это не с переключением контекста, а с минимальным разрешением таймеров. Отчасти может помочь timeBeginPeriod.
А вообще поведение sleep и должно быть непредсказуемым. Передаваемое значение — это нижняя граница.
>>Это наглядный пример, как одна маленькая оптимизация способна в несколько раз повысить производительность.
Это наглядный пример как программисты пишут код не понимая как он работает- находят багу, которая мистическим образом исчезает если добавить кусок кода, который, по идее и никак не связан с этим, но всё фиксит, и вместо того что бы искать корни проблемы оставить как есть.
За поиски корней никто не заплатит, а если быстрый фикс даёт на выходе нормально работающую систему, то это и есть то, что всем нужно. Тем более, что эти корни обычно где-нибудь во внешнем компоненте, для которого нет исходников или который нельзя менять.
Ой сколько систем, даже вполне промышленно выглядящих, так построено…
Про веб-системы даже не буду говорить. Популярные CMS-ки, например, будут хорошим примером: ввиду тяжелого наследия прошлого убрать старые костыли в них боятся, а новые разработки привыкшие к костылям разработчики пишут — ага, на тех же костылях. Все матерятся, но что толку?
Я уже столько раз натыкался на то, что код неиллюзорно ускорялся от убирания сто лет непонятно зачем валявшегося там слипа, что уже подумываю о том, что компилятор должен на каждый встреченный слип выдавать warning. И чтоб этот warning отключался только если рядом со слипом указан комментарий ненулевой длины нафига он тут засунут.
Ага… мне нравится ход ваших мыслей ;) А потому люди начнут натыкаться на то, что код начнет неиллюзорно ускорятся от убирания сто лет непонятно зачем валявшегося там комментария ненулевой длины рядом с двести лет непонятно зачем валявшегося там слипа, и начнут подумывать над тем, что компилстор должен выдавать на каждый встреченный комментарий рядом со слипом warning и чтобы этот warning отключался, если рядом с комментарием рядом со слипом указан комментарий ненулевой длины нафига он тут засунут… чтобы еще через сто лет получить неиллюзорное ускорение от выпиливания слипа с двумя комментариями ;)
Да, борьба с «warningами компилятора» она такая, ня;)
Ускорение в 3,7 раза после удаления Sleep() в WebKit