?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Next Entry
Преждевременная оптимизация-2
nyaload
_winnie
Думал, такое бывает только в шутках про "секретные базы темных джедаев". Тем не менее, я сегодня нашёл ::Sleep(1) внутри главного цикла игры.
Исходя из окружающего кода и местоположения (получение статистики про FPS), считаю что его там забыли, как хирург обычно забывает скальпель внутри оперируемого.
В среднем ::Sleep(1) выполняется две миллисекунды, и удаление этого левого кода увеличивает FPS с 50 до 55.

updated. Поддержка заявила что Sleep в счетчике FPS - это таки что бы другие потоки могли загружать в фоне ресурсы. Пипец, даже если ничего не грузится, то всё равно поспим на каждом кадре. Впрочем, сказали что на многоядерной системе можно Sleep убрать.

  • 1
большая просьба прогони тот же цикл только со Sleep(0); - сколько он займет?... хотя тут все зависит от того чем занят комп, сколько ядер и пр.
Вроде как именно Sleep(0); рекомендуют ставить что бы дать время другим процессам-тредам на 1но процессорной машине. (если ничего не путаю).

Ну, он займёт какое-то случайное время в зависимости от загруженности системы.

У меня два ядра. Когда загружены оба ядра данный цикл завис надолго, уже несколько минут работает. Когда занято одно ядро или ни одного - то отработал мгновенно, за 0.04 секунды.

Если что-то загружает процессор но периодически спит - то возможны все промежуточные варианты.

#include <windows.h>

int main()
{
	for (int i = 0; i < 100000; ++i)
	{
		::Sleep(0);
	}
}



это понятно и ожидаемо.
но т.к. ты умудрился (в твоих конкретных условиях) померить Sleep(1) то стало интересно в тех же условиях замеры Sleep(0)

  • 1