Quote:
Originally Posted by pawnoholic
Вопрос про таймеры.
Если приблизительно в секунду будет создаваться по 4000 таймеров и это количество планирую увеличить еще раз в 5, как скоро продеться делать рестарт сервера, чтобы они не ушли в минус?
PHP Code:
public OnGameModeInit()
{
for (new i; i < MAX_VEHICLES; i++)
{
SetTimerEx("OnVehicleTickRate", 500, false, "d", i);
}
return 1;
}
forward OnVehicleTickRate(vehicle);
public OnVehicleTickRate(vehicle)
{
if (Vehicle::Data[vehicle][vehicleExists])
{
CallLocalFunction("OnVehicleUpdate", "d", vehicle);
}
return SetTimerEx("OnVehicleTickRate", 500, false, "d", vehicle);
}
Или эффективнее и лучше сделать так?
PHP Code:
public OnGameModeInit()
{
SetTimer("OnVehiclesTickRate", 500, true);
return 1;
}
forward OnVehiclesTickRate();
public OnVehiclesTickRate()
{
for (new i; i < MAX_VEHICLES; i++) if (Vehicle::Data[vehicle][vehicleExists])
{
CallLocalFunction("OnVehicleUpdate", "d", vehicle);
}
return 1;
}
|
Тут двояко на тему эффективности, в однопоточном программировании есть понятие прерывания, так вот, первый вариант - в плане скорости и использования процессорного времени - шикарен, ибо каждый таймер, не занимает единовременно все процессорное время на себя. Второй случай имеет смысл использовать только если онвехиклапдейт очень легкая функция, ибо в противном случае, каждые пол секунды ты будешь прилично единовременно забирать процессорное время, и пока твой цикл не обработается, ничего другого выполнятся не будет.
Как быстро переполнится? Ну давай приблизительно, 2 000 000 000 / 4000 / 60 / 60 =138 часов ~