Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sleep i kwestia obciążenia przy pętli
Forum PHP.pl > Forum > PHP
deejay4net
Sytuacja jest następująca:
Dany skrypt sprawdza warunek którym jest czas pozostały do zdarzenia.
Jeśli np do zdarzenia zostało równe 10 sekund wywoływana jest jakaś metoda, funkcja, instrukcja, co bądź. To nie jest istotne.

Pytanie:
A ) Czy lepiej jest wywołać crona co minutę , ustawić wykonywanie skryptu na minutę (sprawdzanie ile czasu pozostało) i wykonywać przy pomocy pętli i sleep?

B ) Wykonać crona raz dziennie i pętle obracać ze sleepem przez 24 h?


Nie wiem czy w ogóle czy to będzie tak pracowało i jak to się ma do obciążenia serwera. Czas będzie zmienny a wszystko musi pracować równo co do sekundy ( Przy wyliczaniu czasu korzystam z metody diff, klasy DateTime jeśli to ważne - PHP 5.3.0 )


Czekam na jakieś sensowne odpowiedzi najlepiej czymś podparte smile.gif
Jeśli było to sorry, ale czas mnie goni
erix
Moim zdaniem lepiej byłoby wykonywać CRONem wiele razy niż raz na dobę. Dlaczego? Jeśli skrypt zostanie ubity z różnych względów (admin/błąd/etc), powstanie na nowo po minucie.

Cytat
Nie wiem czy w ogóle czy to będzie tak pracowało i jak to się ma do obciążenia serwera

Cytat
jest jakaś metoda, funkcja, instrukcja, co bądź. To nie jest istotne.

Właśnie jest istotne.
bim2
Ja bym zrobił coś pośredniego smile.gif Skrypt puścić, żeby dział non-stop a cronem co minutę sprawdzac czy jest jeszcze włączony. Jak nie to go uruchamiamy. Najprostsze wyjście moim zdaniem.
deejay4net
Cytat(bim2 @ 25.10.2009, 16:45:11 ) *
Ja bym zrobił coś pośredniego smile.gif Skrypt puścić, żeby dział non-stop a cronem co minutę sprawdzac czy jest jeszcze włączony. Jak nie to go uruchamiamy. Najprostsze wyjście moim zdaniem.



to musi działać co do sekundy a sprawdzenie go co minute mija się z celem tak jak ręczne włączenie..wszystko działa bez obsługowo.

co do reszty

tzn moim zdaniem nie jest istotne jakei funkcje itd ponieważ nie ma tam funkcji które wygenerują fatal, reszta błędów jest ukryta.
Ustawienie limitu czasu i ukrycie błedu to chyba najlepszy i najprostszy sposób zatrzymania skryptu po określonym czasie. Gorzej jeśli zatrzymanie wystąpi w czasie wykonywania instrukcji, co oczywiście może się zdarzyć. i co wtedy? Jako instrukcję należy rozumieć pobieranie i aktualizowanie rekordów mysql. Co do pobierania myślę że nie będzie to ilość większa (jednocześnie) niż jakieś 40-50, z czego dalsza część instrukcji dotyczyła będzie tylko jakichś 2/3 z nich.
Faktycznie może lepiej wykonywać co minutę bo gdy się coś posypie to lepszy mały krach niż całkowity stop systemu tym bardziej że w grę wchodzi sporo $$. Tak myślałem że tutaj najdę jakąś mądrą myśl.

Pozdro. Jak ktoś ma inne pomysły to mile widziane
bim2
Co minute sprawdzi tylko czy nie było crasha. Działa to na dokładnie takich samych zasadach jak odpalanie crona co minute i reuruchamianie skryptu, a będziesz miał większą dokładność.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.