abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 1
včera 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 4
včera 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 0
včera 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
včera 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
1.12. 21:00 | Nová verze

Byla vydána beta verze Linux Mintu 18.1 s kódovým jménem Serena. Na blogu Linux Mintu jsou hned dvě oznámení. První o vydání Linux Mintu s prostředím MATE a druhé o vydání Linux Mintu s prostředím Cinnamon. Stejným způsobem jsou rozděleny také poznámky k vydání (MATE, Cinnamon) a přehled novinek s náhledy (MATE, Cinnamon). Linux Mint 18.1 bude podporován až do roku 2021.

Ladislav Hagara | Komentářů: 0
1.12. 16:42 | Nová verze

Byl vydán Devuan Jessie 1.0 Beta 2. Jedná se o druhou beta verzi forku Debianu bez systemd představeného v listopadu 2014 (zprávička). První beta verze byla vydána v dubnu letošního roku (zprávička). Jedna z posledních přednášek věnovaných Devuanu proběhla v listopadu na konferenci FSCONS 2016 (YouTube, pdf).

Ladislav Hagara | Komentářů: 0
1.12. 15:16 | Komunita

Na GOG.com začal zimní výprodej. Řada zlevněných her běží oficiálně také na Linuxu. Hru Neverwinter Nights Diamond lze dva dny získat zdarma. Hra dle stránek GOG.com na Linuxu neběží. Pomocí návodu ji lze ale rozběhnout také na Linuxu [Gaming On Linux].

Ladislav Hagara | Komentářů: 1
1.12. 13:14 | Bezpečnostní upozornění

Byla vydána verze 2.7.1 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Řešeno je několik bezpečnostních problémů. Aktualizován byl především Tor Browser na verzi 6.0.7. Tor Browser je postaven na Firefoxu ESR (Extended Support Release) a právě ve Firefoxu byla nalezena a opravena vážná bezpečnostní chyba MFSA 2016-92 (CVE-2016-9079, Firefox SVG Animation

… více »
Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 759 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: php concurrency

28.12.2011 20:27 rband
php concurrency
Přečteno: 391×
Zdravím,

Při použití mod_php pro Apache s nějakou defaultní konfigurací: pokud dva uživatelé načtou stránku se skriptem ve stejnou chvíli, může se stát, že jsou obslouženi paralelně dvěma thready/procesy, nebo se požadavky zpracovávají jeden po druhém? Jde mi o to, jestli je potřeba např. synchronizovat zápisy do souborů, ke kterým přistupují jen ty php skripty. Uvítám odkazy na relevantní dokumentaci :-)

Řešení dotazu:


Odpovědi

H0ax avatar 28.12.2011 20:55 H0ax | skóre: 36 | blog: Odnikud_nikam
Rozbalit Rozbalit vše Re: php concurrency
paralelně
a pokud maj někam zapisovat, tak asi nejlíp do db pač do stejnýho souboru najednou to nebude moc gut
LinuxWay | blog |  LiCo
28.12.2011 20:56 l4m4
Rozbalit Rozbalit vše Re: php concurrency
Pokud se může někdy stát, že různé požadavky povedou k zápisu [do] stejného souboru, tak je zapotřebí zamykat/synchronizovat (nebo raději navrhnout věci tak, aby se to stávat nemohlo).

Bude-li se to dít běžně, tak se ta data nemají válet v souboru, ale být v databázi.
28.12.2011 21:10 rband
Rozbalit Rozbalit vše Re: php concurrency
Díky za odpovědi. Dostal jsem se k nějaké starší verzi systému OpenCart, který používá místo db prosté csv soubory a nepřijde mi, že by to něco zamykalo. Šťourat se v tom ale nebudu, asi jsem něco přehlédl a je to řešené jinak... doufám ;-)
28.12.2011 21:17 rband
Rozbalit Rozbalit vše Re: php concurrency
(pardon, není to OpenCart ale QuickCart od OpenSolution)
29.12.2011 13:57 Ivan
Rozbalit Rozbalit vše Re: php concurrency
Je to trochu prasarna, ale pokud ti nic jineho nezbyva, tak si ten soubor zamkni pomoci fcntl(flock). Dulezite je, aby ten soubor byl zamceny po co nejkratsi dobu. Jinak se ti zablokuji worker procesy apache a nejsis tim zablokujes vsechny virtualy na serveru.
Josef Kufner avatar 5.1.2012 20:30 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: php concurrency
Pokud můžeš, tak se tomu produktu vyhni. Sice jsem ho v životě neviděl, ale to co píšeš, je celkem dobrá nápověda, že to není moc dobře udělané.

Jinak na zamykání souboru stačí udělat flock() na otevřený soubor a souběžné požadavky se v tom místě seřadí a počkají na sebe.
Hello world ! Segmentation fault (core dumped)
5.1.2012 21:14 Kit
Rozbalit Rozbalit vše Re: php concurrency
Ve chvíli, kdy pomyslím na flock(), znamená to, že jdu špatnou cestou.

Pokud potřebuji jen append, nic zamykat nemusím, pouze výstup udělám ve formě jediného řetězce < 8 KiB.

Přepisování uvnitř souborů nebo delší řetězce s radostí přenechávám databázím. Umí to lépe než já a hlavně přitom nespadnou do deadlocku. A také vím, že ten záznam tam buď bude nebo nebude, ale data se mi po neúplném zápisu nerozbijí. Je to pohodlnější, rychlejší a spolehlivější řešení.
Josef Kufner avatar 5.1.2012 23:38 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: php concurrency
A jsi si jistý, že si to mezitím neškytne, systémové volání write() neselže s chybou -EAGAIN (nebo něčím podobným) a mezitím se tam nevloudí kus jiných dat? A co když je potřeba zapsat o pár byte více než 8KB? Celkem běžně vídám v logu překřížené výpisy. Sice ne dost často na to, aby to vadilo, ale dost na to, abych tomu nevěřil.
Hello world ! Segmentation fault (core dumped)
6.1.2012 08:38 Kit
Rozbalit Rozbalit vše Re: php concurrency
Ano, jsem a budu si tím jist, dokud mi to někdo nevyvrátí. Pokud je potřeba zapsat delší řetězec, jiné vlákno se tam vloudit může a dokonce je to velmi pravděpodobné.

Překřížené výpisy v logu mohou vzniknout velmi snadno, pokud je výstup proveden více než jedním příkazem. Příkaz
echo $datum,$ip,$text;
je interpretován jako 3 příkazy. Jiné echo se do toho vloudit může.

Nějak si nedovedu představit situaci, při které bych potřeboval zapsat blok dat > 8 KiB a nebyla by výhodnější databáze, která se o potřebné zámky postará sama.
Josef Kufner avatar 6.1.2012 12:11 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: php concurrency
Dokumentace PHP říká, že:
If handle was fopen()ed in append mode, fwrite()s are atomic (unless the size of string exceeds the filesystem's block size, on some platforms, and as long as the file is on a local filesystem).
Než se spolehneš na atomicitu zápisu, musíš se přesvědčit, že souborový systém má bloky větší než je potřeba zapsat dat a že ten souborový systém je lokální. Nikde není ani slovo o 8KB, i když to nejspíš bude hodnota, kterou obvykle vrátí fstat(). Navíc jsi se ani nezmínil o tom, že se musí jednat o lokální soubor. Tvé tvrzení je tedy nepravdivé, byť za určitých podmínek to může fungovat.
Hello world ! Segmentation fault (core dumped)
6.1.2012 14:55 Kit
Rozbalit Rozbalit vše Re: php concurrency
Lokální soubor jsem bral jako základní podmínku. Zřejmě až moc samozřejmě. Na síťových úložištích takové opičky nedělám.

fstat() mi tvrdí, že mám velikost bloku 4096 B, což souhlasí s tím, co jsem věděl předtím.

Při experimentech s konkurenčním zápisem docházelo k mixování až při > 8192 B, což souhlasilo s některým z parametrů php.ini . Při zvýšení hodnoty toho parametru se zvýšil i limit pro mixování. Už nevím, který to byl. Nepotřebuji ho. Používám databáze.
6.1.2012 16:12 Ivan
Rozbalit Rozbalit vše Re: php concurrency
fwrite mozna atomicky je(za urcitych okolnosti). sekvence "fopen, fseek, fwrite" ovsem atomicka neni.

Jedniny FS na linuxu, ktery podporuje "bezpecny" append bez zamykani je nejaky FS od google, ktery je na to primo delany. POSIX IMHO neobsahuje nic co by vas uvedomilo o tom, ze na konec souboru bylo neco pripsano.
6.1.2012 16:29 Kit
Rozbalit Rozbalit vše Re: php concurrency
O fseek() nediskutujeme, u něj je snad jasné, že se na to spolehnout nedá. V režimu append mě nemusí zajímat, že mezi otevřením souboru a zápisem do něj se ten soubor prodloužil.

Řešíme otázku, do jaké míry je spolehlivý zápis do souboru otevřeného v režimu append bez použití funkce flock(), což je typické pro zápis do logů.

Testoval jsem to tuším na ReiserFS. Můžu zkusit ještě Ext3, Ext4 a XFS. Případně i FAT :-)
AraxoN avatar 6.1.2012 21:20 AraxoN | skóre: 45 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: php concurrency
Celkem běžně vídám v logu překřížené výpisy.
Používaj funkciu error_log() s parametrom $message_type=3. Za 10 rokov som ešte skrížené záznamy v logu nevidel. Samozrejme, celý záznam musíš zapísať na jedno volanie. Ak skladáš záznam z viacerých častí, najprv si ich pospájaj do jedného stringu a až potom volaj error_log().
A fine is a tax for doing wrong. A tax is a fine for doing well.
Řešení 1× (mektige)
29.12.2011 14:09 Kit
Rozbalit Rozbalit vše Re: php concurrency
Pokud se zapisuje jen jeden řetězec, je uložen vcelku, pokud jeho délka nepřekročí 8192 B. Hodnota se dá změnit v php.ini. To umožňuje například vytvářet logy.

Pro echo s parametry oddělenými čárkou už to neplatí, protože interpretr to už bere jako více příkazů pro výstup. Může se mezi ně vloudit výstup z jiného vlákna.

A jak už psali ostatní: Používej raději DB.
rADOn avatar 6.1.2012 20:13 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: php concurrency
  • Na zamykání nespoléhej. Nikdy nevíš že apačovi z nějakýho důvodu neumře děťátko a zámek zůstane viset. PHP interpet dokonce může sám předčasně ukončit skript kterému se zavřel socket (záleží na nastavení).
  • Nepostradatelnost databáze je mýtus. Atomický zápis jde realizovat i bez databáze a dokonce to ani není těžký. Včetně toho nákupního košíku v csv :-) Ale je pravda že databáze je dnes na každým rohu a každej s tím umí zacházet, takže ve výsledku je to většinou nejjednodušší řešení.
"2^24 comments ought to be enough for anyone" -- CmdrTaco
6.1.2012 20:56 Kit
Rozbalit Rozbalit vše Re: php concurrency
Nákupní košík se dá snadno realizovat jak v souboru, tak i v databázi. Ovšem v té databázi je to jaksi pohodlnější a při správném výběru databáze i rychlejší.
Josef Kufner avatar 6.1.2012 21:36 Josef Kufner | skóre: 66
Rozbalit Rozbalit vše Re: php concurrency
Pokud děťátko umře, tak se soubor uzavře a s tím zmizí i zámek.
Hello world ! Segmentation fault (core dumped)
7.1.2012 00:57 Kit
Rozbalit Rozbalit vše Re: php concurrency
Bohužel záleží na druhu zámku. Pokud je ten zámek realizován souborem, tak může zůstat viset i po úmrtí děťátka... Nemám rád takové zámky.
rADOn avatar 9.1.2012 17:55 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: php concurrency
Přesně tak. Flock i posixové zámky se samozřejmě při pádu odemknou, ale dotaz je na zamykání obecně a třeba synchronizace přes semafory (a přes sdílenou paměť vůbec) to nezajišťuje. Navíc je řeč o php, tedy z principu masivně paralelní úloha kde zamykání může tvořit úzké hrdlo nebo vyhladovět zdroje (zámků nemůžu vzít nekonečno). Ergo je lepší se zámkům vyhýbat jak to je jde. Třeba zmíněný nákupní košík v csv by šlo realizovat pomocí read-copy-update, zapsat změněný soubor někam bokem a přesunout ho na místo původního (rename je atomická operace).
"2^24 comments ought to be enough for anyone" -- CmdrTaco

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.