Witaj na naszym forum!
Nie jesteś zalogowany. (Logowanie - Rejestracja)
Użytkownik: Pamiętaj mnie:
Hasło:
Załóż nowy temat
Semafory: ogólny opis i prosty przykład
Google
To jest wiadomość reklamowa.
Grupa: Goście
 
off-line hemicalyaction
Odczytana Wysłano: Wtorek 15:25 13.04.2010 #2
Administrator


Grupa: Administratorzy
Posty: 436
Reputacja: Klejnot w koronie
Ostrzeżenia: 0%

Rejestracja: Czwartek 20:42 03.07.2008
Jako, że jakiś czas temu obiecałem napisac na ten temat, więc pisze ;].

SEMAFOR
Semafory (w ogólnym skrócie) to najczęściej pewne zmienne w pamięci współdzielonej jądra systemu (innym przykładem semaforow są semafory plikowe, ale o tym dziś nie będę pisał mruga ). Są one dostępne dla każdego procesu w systemie. W przypadku PHP semafory mogą przybrać wartośc 0 lub 1 (true/false), czyli boole'owską.
ZASTOSOWANIE
Semafory pozwalają nam na kontrolę nad tym, ile procesów w jednej chwili może mieć dostęp do jakiegoś zasobu (zależy od tego, co programista chce chronić za pomocą semafora).

Dokładniejszy opis znajduje się np pod tym adresem: http://pl.wikipedia.org/wiki/Semafor_(informatyka)

SEMAFORY W PHP
UWAGA: Aby skorzystać z semaforów w PHP w sposób podany przeze mnie musisz posiadać wkompilowane rozszerzenie sysvsem.

Poniżej podaję najprostsze uzycie semafora w PHP.
Kod

$sem_code = 9999;
$sem_count = 1;
if(!$sem_id = sem_get($sem_code, $sem_count)){
echo 'Nie można utworzyć semafora';
}elseif(!sem_acquire($sem_id)){
echo 'Nie mozna utworzyc semafora';
}else{
[Tutaj podajemy kod, ktory ma sie wykonać w przypadku zablokowania (utworzenia) semafora]
sem_release($sem_id);
}

Po kolei:
* $sem_code -> identyfikator. Każdy semafor musi mieć przypisany unikalny identyfikator
* $sem_count -> ile procesów na raz może wykonać kod w semaforze
* $sem_id -> identyfikator semafora utworzony w pamięci
* sem_get -> próbuje utworzyć identyfikator semafora w pamięci, w przypadku błędu przerywa działanie powyższego kodu
* sem_acquire -> próbuje utworzyć własciwy semafor. W przypadku niemożności utworzenia (semafor został utworzony przez inny proces) pauzuje wykonywanie CAŁEGO skryptu do momentu gdy inny proces odblokuje semafor. W przypadku odblokowania semafora przez inny proces aktualny proces tworzy nowy semafor w pamięci

Przykładowe użycie tego kodu to np przetwarzanie flot, a dokładniej wywołanie przetwarzania. ProGamela korzysta z tego rozwiązania od ponad 1.5 roku i dzięki temu serwer oraz gra działają bardzo szybko. Dlaczego? Dlatego ze nigdy nie zdarza się aby 2 graczy uruchomiło skrypt liczący floty w locie a jak każdy wie jest to bardzo zasobożerny skrypt mruga.

Na razie to tyle. Postaram się dopisać jeszcze troszkę informacji jak dostane się do mojego kodu mruga.
Ostatnio zmieniano Wtorek 21:31 13.04.2010 przez hemicalyaction. Razem zmieniano 5 razy.
 
off-line kallosz
Odczytana Wysłano: Czwartek 05:58 15.04.2010 #3
Lantean


Grupa: Administratorzy
Posty: 900
Reputacja: Klejnot w koronie
Ostrzeżenia: 0%

Lokalizacja: Polska, Ostrzeszów
Rejestracja: Poniedziałek 08:03 28.12.2009
przydatne - choć skromnie opisane język
 
Google
To jest wiadomość reklamowa.
Grupa: Goście
 
1 odpowiedzi
Załóż nowy temat
Ten temat nie jest oznaczony żadnymi tagami.
Ten temat czyta w sumie 2 użytkowników, w tym 0 botów, 2 gości, 0 zarejestrowanych i 0 ukrytych użytkowników.
tego tematu nie czyta żaden zalogowany użytkownik
Przejdź do:
Przejdź do nowego forum
 
Kontakt Wersja lekka
Niedziela 15:05 05.09.2010
[ 0.90405 s | 9 SQL`s ]
powered by Callisto © 2010 Unisolutions