Форум HeroesWorld-а - Показать сообщение отдельно - [ПРОБЛЕМА] Heroes3 на двухядерном процессоре
Показать сообщение отдельно
#18
Старый 07.11.2007, 23:24
  #18
^
dma
📖
Регистрация: 06.11.2007
Сообщения: 2
Регистрация: 06.11.2007
Сообщения: 2
По умолчанию
Re: [ВОПРОС] 100% Загрузка процессора в героях.

Процессор P4 2.8GHz. Я не думаю, что абсолютная мощность процессора имеет какое-либо значение, кроме влияния на тепловыделение, конечно. :)

А откуда вообще взялась идея, что основным пожирателем процессорного времени являются вызовы функций API, и почему именно они являются лишними вычислениями? Я смотрел вызовы вторых героев, так там из win32-вызовов самым частым во время бездействия является тот самый sleep. :) Причем, количество этих вызовов не так уж велико и явно на порядки превосходит количество исполненных ассемблерных команд. Я не большой специалист во всех этих вопросах, но мне кажется, что собака неограниченного цикла зарыта где-то внутри программы, а не в ее вызовах внешних функций.

Для третьих Героев, думаю, достаточно и 3% моего процессора. Оставшиеся 97%, соответственно, крутится тупой цикл. Когда мы начинаем останавливать программу с определенной периодичностью (на вызовах определенных функций API в нашем случае), затормаживая ее, скажем, на 50%, то "полезным" Героям остается, соответственно, 1.5%, т.е. половина от необходимого. Это если смотреть в долговременной перспективе, т.е. как это ощущает пользователь. Отсюда тормоза. А с точки зрения компьютера мы делаем некоторое "свободное окно" во времени процессора, только и всего, и когда программа просыпается, она продолжает молотить бестолковые циклы в том же самом соотношении к полезной своей части - 97/3. И так будет на любом, хоть 10GHz-процессоре. Я думаю, что все обстоит вот так.

Конечно, логично было бы предположить, что программа узнает о внешних событиях, которыми руководствуется, с помощью самого частого своего вызова функций ОС, но, видимо, тут все как-то сложнее.
dma вне форума
Ответить с цитированием