![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 555 Pomógł: 84 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) ![]() ![]() |
Witam,
ostatnio dużo mówi się o multiwątkowości/multiprocesowości w PHP - pthreads , pcntl - i tym podobne pomysły. Ludzie debatują czy PHP jest thread-safe czy też nie. Nie potrafię zrozumieć jednak sedna tego problemu - sensu istnienia tego mechanizmu. Jeżeli wykorzystujemy klasyczną architekturę do wtorzenia serwisu - tj serwer HTTP, który wywołuje w cmd parser PHP i potrafi to robić asynchronicznie , to czy w tym momencie architektura nie staje się multiprocesowa? Po co do tego dokładać jakieś rozgnieżdżenia procesu po stronie skryptu PHP ? Może ktoś mi to wytłumaczyć LUB wskazać literaturę/artykuł gdzie jest omówiony sens tego zagadnienia z szerszej perspektywy niż tylko parsera PHP ? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Gdyby Twój pierwszy post posiadał taką treść nie byłoby "wycieczek personalnych".
Cytat Nie projektuje się takich systemów tak, by worker jeszcze rozwidlał swoją pracę na parę procesów. Dlaczego? Jeżeli mamy do jednej maszyny przypisanego jednego workera to dlaczego nie rozdzielić go na procesy (patrz: celery). Cytat 1. Wykonanie kodu w czasie oczekiwania dostępu do magazynu danych (baza danych, cache, HDD) - można wyeliminować ten problem korzystając z asynchronicznych zapytań lub eventów. Można, ale można też skorzystać z "wątków". Cytat 2. Wykonywanie w tle kodu PHP niezwiązanego z danym requestem (zarządzenie serwisem, zdarzenia czasowe) - jeżeli nasz system sprawdza przy requeście czy coś trzeba takiego zrobić , to problem leży w jego architekturze i stanowi moim zdaniem poważną lukę. Nie do tego są requesty by wykonywać w ich czasie (procesie jednego requesta) takie rzeczy. Tutaj się zgadzam. Potrafię jednak sobie wyobrazić, że ktoś ma taką potrzebę i realizuje ją w ten sposób. Nie uważam, że PHP powinno to ograniczać. Cytat 3. Kod niezwiązany z requestami, np program działający w tle niezależnie od serwera HTTP - PHP nie jest językiem, w którym powinno się implementować takie rzeczy Może jednak jakieś argumenty? Jeżeli cały model dziedziny mam napisany w PHP, do tego mam też komunikację z zewnętrznymi usługami to nie widzę sensu na przepisywanie tego do innego języka. Moim zdaniem to jest właśnie kluczowe miejsce istnienia wielowątkowości i wieloprocesowości w PHP. Cytat 4. Podział kodu, który należy wykonać w requeście na niezależne od siebie części i wykonanie ich równolegle - jest to jedyne zastosowanie, które można uznać na pozór za sensowne. Zagłębajac się jednak głębiej w ten podpunkt łatwo dojść do wniosku, że serwer nieobciążony przez sieć zadziała wystarczająco szybko "1 process per request", a w przypadku coraz większego obciążenia na sieci takie rozwidlanie coraz bardziej traci sens, bo serwer i tak nie będzie miał zapasu mocy obliczeniowej, które mógłby zaoferować. Nie przekonuje mnie to. Jeżeli na jednej stronie mamy do wyświetlenia dwa raporty, to wykorzystując dwa procesory odpowiedź powędruje do klienta szybciej niż wygenerowanie tych raportów jeden po drugim na jednym procesorze. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 10:14 |