Starší komentáře ke článku: Práce se sdílenou pamětí v PHP - ukázková aplikace

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Matej Pivoluska

Datum vložení: 1.2.2005 18:18:19

Musím autora pochváliť za erudovaný výklad problematiky elementu noframes.

Ďalej mi dovoľte položiť pár otázok, aby som počas premýšľania predčasne neprišiel o vlasy, pretože sa rád podporne škrabem rukou po hlave.

V článku som nepostrehol informácie o tom, čo sa deje, ak sa snažím uložiť do zdieľanej pamäte viac ako je jej veľkosť. (Napr. jednu dľľľhhhúúú vetu od nejakého neprajníka. A za ňou nedajbože ešte druhú dĺĺĺĺĺhhhhššššiuuu..., a tie dve vety môžu mať >500 KB, napr.) Pretečie to? Vykape to? Neuloží sa to? Samo sato...?

A ani som sa nedočítal, ako dokážem zistiť samotnú veľkosť objektu, ktorý chcem uložiť do zdieľanej pamäte. Žeby $size = strlen(serialize($var)? Neviem isto, len tipujem, to by sa muselo "(un)marshalovať" (jazykoví puristi odpustia), čo je trochu na...

Mení sa objekt, ktorý ukladám do zdieľanej pamäte? Marshaluje sa nejako? (Teda je ho potrebné pri každom prístupe odmarshalovať a použiť až lokálnu kópiu?) Alebo sa ukladá natívne, tak ako s ním PHP pracuje interne?

Ako dlho ostane zdieľaná pamäť "visieť"? Kým beží modul PHP alebo kým neskončí posledný skript, ktorý ku nej pristupuje?

Avatar

Autor komentáře: Jiří Adámek

Datum vložení: 1.2.2005 18:34:41

Doporučil bych Vám přečíst si první díl ve kterém se dozvíte odpovědi na většinu vašich otázek. K te posledno otazce, sdilena pamet je aktivni do te doby, dokud ji nezrusite nebo sezrestartujete server. Sdilena pamet neni na modlu apache natoz pak skriptu vubec zavisla. Osttane to je take uvedeno v minulem dilu.

Avatar

Autor komentáře: Matej Pivoluska

Datum vložení: 1.2.2005 19:09:40

Prvý článok som prebehol len letmo, videl som tam niečo podobné ako staré známe funkcie z C. Následne som si vyvodil nesprávny predpoklad, že shm_put_var() premennú "zaregistruje" do zdieľanej pamäte. A to sa mi začalo biť s potrebou definovať veľkosť segmentu na začiatku.

Preto sa ospravedlňujem za spŕšku bezpredmetných otázok, ktoré mi skrsli v mojej hlave. Najvyšší čas trochu si po náročnom dni pospať...

BTW, neviete niekto, či existuje aj spôsob ako zaregistrovať nejaký objekt/premennú ako zdieľanú medzi skriptami? (Spokojne môžem k nemu pristupovať cez semafór...) Alebo sa to už príliš bije s vnútornosťami PHP?

Avatar

Autor komentáře: pif

Datum vložení: 1.2.2005 19:35:17

mozna myslite serializace a unserialize do souboru

Avatar

Autor komentáře: Matej Pivoluska

Datum vložení: 1.2.2005 21:15:51

Nie, ja nechcem serializovať/deserializovať a kopírovať, či už do pamäte alebo do súboru. Mňa by skôr zaujímalo, či je možné zdieľať priamo objekty, mať ich internú reprezentáciu v zdieľanej pamäti a priamo k nim pristupovať. Spokojne by mi stačilo ich čítať. Resp. k nim pristupovať cez readers/writers zámok.

Zdieľaný objekt by mi stačilo zamknúť raz -- pri jeho registrácii. Vtedy by som povedal, či chcem čítať (to by mohlo viacero procesov/skriptov bežiacich naraz) alebo aj zapisovať (to by mohol len jeden, musel by si počkať, kým neskončia všetci čitatelia a potom by nemohol byť aktívny žiaden čitateľ).

Ak by chcel do takejto premennej zapisovať niekto, kto si ju pre zápis nezaregistroval, nemilosrdne by to vyhodilo chybu alebo aspoň varovanie, napr. ako neplatný handle pri prístupe na SQL server.

Príklad (vykonštruovaný): Mám cestovný poriadok reprezentovaný ako graf. (Napr. v poli.) To chcem väčšinu času len čítať. Pole sa mení iba raz za čas, keď niekde praskne potrubie...

Bolo by možno celkom fajn, keby bol objekt držiaci toto pole ponechaný v pamäti aj medzi jednotlivými behmi a mohlo mať k nemu "read-only" prístup viacero simultánne bežiacich procesov/skriptov.

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 1.2.2005 22:31:05

Idea, kterou zde popisujete, je velmi pěkná, je to ale přesný příklad právě toho, co do PHP nepatří, respektive co jde přímo v protikladu s jeho určením. PHP je skriptový systém a jednou z jeho nosných myšlenek je právě to, že po ukončení skriptu zmízí i vše, co skript vytvořil. Chcete-li jiné chování, vyberte si prostě jiný nástroj ;-)

Avatar

Autor komentáře: Matej Pivoluska

Datum vložení: 2.2.2005 0:17:07

No dobre, ale patrí v takomto prípade do PHP funkcionalita zdieľanej pamäte opisovanej v článku? ;-)

Avatar

Autor komentáře: Jakub

Datum vložení: 1.2.2005 22:10:07

Chtěl bych se zeptat autora, pro není PHP vhodné pro chat?
Nejsem žádný expert, proto bych se chtěl zeptat na čem běží např. <a href='http://interval.cz/__redirect/redirect.asp?what=interval_discussion&url=http://www.xchat.cz?' target='_blank'>http://www.xchat.cz?</a>
A jaká varianta je podle vás nejvhodnější?
Děkuji

Avatar

Autor komentáře: Jiří Adámek

Datum vložení: 1.2.2005 22:34:15

PHP stejně jako jiné interpretované jazyky (např. ASP) nejsou vhodné proto, že při každém požadavku musejí být "protáhnuty" přes interpreta, který skript zpracuje.

V diskuzi pod minulým článkem se xchat probíral. Ten konkrétně běží jako modul Apache, takže je vytvořen v C/C++. Jedná se tedy o kompilovaný jazyk, který se spojením přímého načtení do jádra Apache dosahuje velice vysokého výkonu. Vhodné jsou taktéž C#, Java, případně by se možná dalo uvažovat o Pythonu s modulem fcgi (to už není kompilovaný jazyk, nicméně dosahuje zajímavých výkonů a ostatně běží na něm i služby Seznamu, pro vás zajímavější příklad chat lide.cz)

Nicméně pokud už byste chtěl dělat chat, mohu Vás ubezpečit, že pro několik desitek uživatelů PHP bohatě stačí. Výše zmiňované řešení se hodí až pro zatížení stovkami až tisíci uživateli. Pokud byste se chtěl přesto zdokonalit a něco naučit, vřele mohu doporučit Python jako rozumný kompromis. (ovšem ten je malokde na hostingu podporovan).. Musíte si hold vybrat sám. :-)

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 1.2.2005 23:02:51

PHP lze ovšem také provozovat pod FastCGI. I když je pravda, že jsem zaznamenal řadu problémů s některými aplikacemi, které evidentně s takovou možností nepočítají ;-(

Avatar

Autor komentáře: Jakub

Datum vložení: 2.2.2005 1:34:55

Děkuji velice :-)
Mé znalosti jazyka C a jeho odnoží trochu pokulhávají ale chystám se trochu pokročit.
v PHP už jsem několik chatů vytvořil. Je to poměrně jednoduché...
Ale jak na Python?
Program v Pythonu se pak zkompiluje jako modul pro Apache?
Nebo má otevřený kód (jako PHP)?
A nevíte o nějakém hostingu kde je Python podporován (a používán)?
Děkuji moc.

Avatar

Autor komentáře: Jiří Adámek

Datum vložení: 2.2.2005 7:05:32

Ne, python je ciste interpretovany jazyk jako PHP ci perl. Mensi "nevyhoda" pythonu je, ze u nas neni zas tak prilis rozsiren, nicmene priznivce ma. Co se hostingu tyce mohu doporucit se podivat na <a href='http://interval.cz/__redirect/redirect.asp?what=interval_discussion&url=http://www.py.cz/' target='_blank'>http://www.py.cz/</a> pripadne jejich mailinglist.

Avatar

Autor komentáře: Leo

Datum vložení: 3.2.2005 10:49:20

Chatu muze hodne ulehcit i spravne vyuziti moznosti klienta, jinak receno JavaScriptu, pokud ho vyuzijete k tomu, ze tem uzivatelum, kteri ho maji v prohlizeci povoleny posilate jen ZMENY oproti puvodnimu stavu, ne cely seznam zprav. Leo

Avatar

Autor komentáře: Petr

Datum vložení: 15.3.2005 17:00:45

Mohu se zeptat, z ceho soudite, ze je xchat v c/c++? maji (erm, mate?) nekde info o tech. realizaci?

Avatar

Autor komentáře: Adamek Jiri

Datum vložení: 15.3.2005 17:07:17

Na xchatu jsem urcitou dobu pusobil jako administrator a i kdyz jsem se primo nepodilel na technickem vyvoji sluzby, dozvedel jsem se za dobu pusobnosti informaci o technickem zakulisi docela dost :)

Avatar

Autor komentáře: efesh

Datum vložení: 2.2.2005 1:23:07

hledal sem v predchozim clanku i v dokumentaci, ale nejak se nedohledal.
Jak presne urcim co muze/nemuze byt key parametr u shm_open ?

Cetl sem v prispevcich na php.net, ze sou velky problemy kdyz key=0 .. a dal by me i zajimalo jaky cislo (maximalni.minimalni) by to melo byt?

proc treba 98374? ;-) a cemu to cislo vlastne presne odpovida? je to snad primo odkaz na umisteni v registru pameti? (takze velikost by souvisela s velikosti fyzicke RAM?)

Avatar

Autor komentáře: Matej Pivoluska

Datum vložení: 2.2.2005 11:35:07

Kluc je typu key_t, co je int, aspon pod Linuxom. Cislo kluca nemusi odpovedat nicomu. Ma to byt len jednoznacny identifikator IPC resource. Existuje funkcia ftok(), ktora spocita tento kluc z cisla inodu nejakeho suboru skombinovaneho s cislom "projektu", ktore zadava programator. Ani to vsak nemusi byt bez kolizii, napr. ak mate dve particie, dva subory na nich mozu mat rovnake cislo inodu.

Avatar

Autor komentáře: Leo

Datum vložení: 3.2.2005 18:53:33

Mel bych dva dotazy. Jak je to s bezpecnosti dat ve sdilene pameti, nemuze se k nim dostat nekdo jiny? Prece jenom se mi zda, ze data v databazi jsou jistejsi. A zadruhe - je nejake omezeni na beznem webhostingu kolik pameti muze muj skript zabrat - souvisi nejak s omezenim pameti v PHP na klasickych 8MB? Leo

Avatar

Autor komentáře: Matej Pivoluska

Datum vložení: 3.2.2005 19:51:55

Právomoci na prístup do zdieľanej pamäte sa nastavujú podobne ako pre súbory pod UNIX systémami. Teda zvlášť pre vlastníka, skupinu a ostatných. A ak si dobre pamätám, nie na každej platforme sa dá jemne nastaviť právomoc čítania/zápisu/vykonávania kódu.

Takže, babo raď -- pod akým UID beží PHP pre jednotlivých klientov na klasickom BMWH (bežnom masovom webhostingu)?

Obmedzenia týkajúce sa počtu zdieľaných segmentov a ich veľkosti sa nastavujú <niekde...:-)> v OS a je to trochu OS-specific. Podrobnosti k tomu z rukáva nevytiahnem. Hľadajte v dokumentácii.

Pod Linuxom sa informácie o IPC limitoch dozviete pomocou príkazu ipcs -l, pod FreeBSD by to malo ísť pomocou príkazu sysctl a pod Solarisom (myslím) sysdefaults.

Avatar

Autor komentáře: Jakub Vrána

Datum vložení: 10.2.2005 17:26:05

Které vyhledávače podle autora neprojdou skrz <frame>? Nebylo by lepší napsat, že uvnitř značky <noframes> by měl být odkaz na dokument použitelný v prohlížečích bez podpory rámů?

Avatar

Autor komentáře: Leo

Datum vložení: 6.3.2005 12:02:10

Otazka je, proc chystat dve verze starnek, kdyz ramy nemaji zadne podstatne vyhody, zato nevyhod hafo, Leo

Avatar

Autor komentáře: Dude

Datum vložení: 5.3.2005 14:35:56

Preco mi to ide takto ??? http://dude_182.php5.cz/

Avatar

Autor komentáře: gurgul

Datum vložení: 10.3.2005 13:30:21

Nepochopil jsem něco nebo co se to děje? Existuje přece tak výborné řešení, jako např. eAccelerator (http://www.arnot.info/eaccelerator/). Bez problémů používám na Win32/Apache/PHP5.

Avatar

Autor komentáře: Miro

Datum vložení: 10.4.2006 13:40:45

Co vy na toto? Aj v Cechach je toto mozne? http://www.2jis.com/index.php?page=clanek&art_id=21

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 10.4.2006 15:18:37

Děkuji za upozornění, evidentně je možné všechno - někteří lidé si myslí, že když dostanou článek zdarma a kód k volnému použití, mohou se vším nakládat, jako by to byl jejich majetek ;-(

Zpět na článek | Úvodní stránka Interval.cz