Kotiin / Internet / Aneeminen keskusteluketju php. Monisäikeinen laskenta PHP:ssä: pthreads. Mitä ovat pthreadit

Aneeminen keskusteluketju php. Monisäikeinen laskenta PHP:ssä: pthreads. Mitä ovat pthreadit

Näyttää siltä, ​​että PHP-kehittäjät käyttävät harvoin samanaikaisuutta. En puhu synkronisen koodin yksinkertaisuudesta, yksisäikeinen ohjelmointi on tietysti yksinkertaisempaa ja selkeämpää, mutta joskus pientä käyttöä rinnakkaisuus voi parantaa suorituskykyä merkittävästi.

Tässä artikkelissa tarkastellaan, kuinka monisäikeinen voidaan saavuttaa PHP:ssä käyttämällä pthreads-laajennusta. Tätä varten sinun on asennettava PHP 7.x:n ZTS (Zend Thread Safety) -versio sekä asennettu laajennus pthreads v3. (Kirjoitushetkellä PHP 7.1:ssä käyttäjien on asennettava päähaaroista pthreads-tietovaraston - katso kolmannen osapuolen laajennus.)

Pieni selvennys: pthreads v2 on tarkoitettu PHP 5.x:lle eikä sitä enää tueta, pthreads v3 on PHP 7.x:lle ja sitä kehitetään aktiivisesti.

Tällaisen poikkeaman jälkeen mennään suoraan asiaan!

Kertaluonteisten tehtävien käsittely

Joskus haluat käsitellä kertaluonteisia tehtäviä monisäikeisellä tavalla (esimerkiksi suorittaa jonkin I/O-sidottu tehtävän). Tällaisissa tapauksissa voit käyttää Thread-luokkaa luodaksesi uuden säikeen ja suorittaaksesi käsittelyä erillisessä säikeessä.

Esimerkiksi:

$tehtävä = uusi luokka laajentaa säiettä ( yksityinen $response; julkinen funktio run() ( $content = file_get_contents("http://google.com"); preg_match("~ (.+)~", $sisältö, $osumat); $this->response = $osumia; ) ); $tehtävä->aloitus() && $tehtävä->liitty(); var_dump($tehtävä->vastaus); // merkkijono (6) "Google"

Tässä suoritusmenetelmä on meidän käsittelymme, joka suoritetaan uuden säikeen sisällä. Kun Thread::start kutsutaan, syntyy uusi säie ja ajomenetelmä kutsutaan. Yhdistämme sitten alasäikeen takaisin pääsäikeeseen kutsumalla Thread::join , joka estää, kunnes aliketju on suoritettu loppuun. Tämä varmistaa, että tehtävä päättyy ennen kuin yritämme tulostaa tuloksen (joka on tallennettu kohtaan $task->response).

Ei ehkä ole toivottavaa saastuttaa luokkaa virtalogiikkaan liittyvillä lisävastuilla (mukaan lukien vastuu ajomenetelmän määrittämisestä). Voimme erottaa tällaiset luokat perimällä ne säikeitetystä luokasta. Sitten ne voidaan ajaa toisen säikeen sisällä:

Luokkatehtävä laajentaa säikeitettyä ( julkinen $ vastaus; julkinen toiminto someWork() ( $content = file_get_contents("http://google.com"); preg_match("~ (.+) ~", $content, $matches); $ this->response = $matches ) ) $tehtävä = uusi tehtävä; $thread = uusi luokka($tehtävä) laajentaa säiettä ( yksityinen $tehtävä; julkinen funktio __construct(Threaded $tehtävä) ( $this->task = $tehtävä; ) julkinen funktio run() ( $this->task->someWork( ) ) ); $säie->aloitus() && $säie->liitty(); var_dump($tehtävä->vastaus);

Mikä tahansa luokka, joka on suoritettava erillisessä säikeessä pakko periä säikeitetyistä luokasta. Tämä johtuu siitä, että se tarjoaa tarvittavat ominaisuudet eri säikeiden käsittelyyn sekä implisiittisen suojauksen ja hyödylliset rajapinnat (kuten resurssien synkronoinnin).

Katsotaanpa pthreads-laajennuksen tarjoamaa luokkahierarkiaa:

Kierre (toteuttaa Traversable, Collectable) Thread Worker Volatile Pool

Olemme jo käsitelleet ja oppineet Thread- ja Threaded-luokkien perusteet, katsotaanpa nyt kolmea muuta (Worker, Volatile ja Pool).

Lankojen uudelleenkäyttö

Uuden säikeen aloittaminen jokaiselle rinnakkaiskuvalle tehtävälle on melko kallista. Tämä johtuu siitä, että yhteinen-ei-mitään-arkkitehtuuri on otettava käyttöön psäikeissä, jotta monisäikeisyys saadaan aikaan PHP:ssä. Tämä tarkoittaa, että PHP-tulkin nykyisen ilmentymän koko suorituskonteksti (mukaan lukien jokainen luokka, käyttöliittymä, ominaisuus ja funktio) on kopioitava jokaista luotua säiettä varten. Koska tällä on huomattava vaikutus suorituskykyyn, striimiä tulee aina käyttää uudelleen aina kun mahdollista. Säikeitä voidaan käyttää uudelleen kahdella tavalla: käyttämällä Workersia tai käyttämällä pooleja.

Worker-luokkaa käytetään useiden tehtävien suorittamiseen synkronisesti toisessa säikeessä. Tämä tehdään luomalla uusi Worker-instanssi (joka luo uuden säikeen) ja työntämällä sitten tehtävät kyseisen erillisen säikeen pinoon (käyttäen Worker::pinoa).

Tässä pieni esimerkki:

Luokkatehtävä laajentaa säikeistettyä ( yksityinen $arvo; julkinen funktio __construct(int $i) ( $this->value = $i; ) julkinen funktio run() ( usleep(250000); echo "Tehtävä: ($this->value) \n"; ) ) $työntekijä = uusi Työntekijä(); $työntekijä->aloitus(); for ($i = 0; $i pino(new Task($i)); ) while ($työläinen->kerää()); $työntekijä->sammutus();

Yllä olevassa esimerkissä 15 tehtävää uudelle $worker-objektille työnnetään pinoon Worker::stack-metodin kautta ja ne käsitellään sitten työntöjärjestyksessä. Worker::collect-menetelmää, kuten yllä on esitetty, käytetään tehtävien puhdistamiseen, kun ne on suoritettu. Sillä, while-silmukan sisällä, estämme pääsäikeen, kunnes kaikki pinon tehtävät on suoritettu ja tyhjennetty - ennen kuin kutsumme Worker::shutdown -sovelluksen. Työntekijän irtisanominen aikaisin (eli kun tehtäviä on vielä suoritettavana) estää edelleen pääsäikeen, kunnes kaikki tehtävät ovat suorittaneet suorituksensa, vain siksi, että tehtäviä ei kerätä roskiin (mikä tarkoittaa muistivuotoja).

Worker-luokka tarjoaa useita muita menetelmiä, jotka liittyvät sen tehtäväpinoon, mukaan lukien Worker::unstack viimeisen pinotun tehtävän poistamiseen ja Worker::getStacked suorituspinon tehtävien määrän hankkimiseen. Työntekijäpino sisältää vain ne tehtävät, jotka on suoritettava. Kun pinossa oleva tehtävä on suoritettu, se poistetaan ja sijoitetaan erilliseen (sisäiseen) pinoon roskien keräämistä varten (käyttämällä Worker::collect -menetelmää).

Toinen tapa käyttää säiettä uudelleen useissa tehtävissä on käyttää säievarastoa (pool-luokan kautta). Säiepooli käyttää työntekijöiden ryhmää tehtävien suorittamisen mahdollistamiseksi samanaikaisesti, jossa samanaikaisuuskerroin (joiden poolin säikeiden lukumäärä, joiden kanssa se toimii) asetetaan poolia luotaessa.

Mukautetaan yllä olevaa esimerkkiä työntekijöiden joukkoon:

Luokkatehtävä laajentaa säikeistettyä ( yksityinen $arvo; julkinen funktio __construct(int $i) ( $this->value = $i; ) julkinen funktio run() ( usleep(250000); echo "Tehtävä: ($this->value) \n"; ) ) $pool = uusi Pool(4); for ($i = 0; $i lähetä(new Task($i)); ) while ($pool->collect()); $pool->shutdown();

Allasta ja työntekijää käytettäessä on muutamia merkittäviä eroja. Ensinnäkin poolia ei tarvitse käynnistää manuaalisesti, se alkaa suorittaa tehtäviä heti, kun ne tulevat saataville. Toiseksi me lähetä tehtäviä uima-altaalle, ei laita ne pinoon. Lisäksi Pool-luokka ei peri säikeestä, eikä sitä siksi voida siirtää muille säikeille (toisin kuin Worker).

On hyvä käytäntö, että työntekijät ja poolit siivoavat aina tehtävänsä heti, kun he ovat saaneet päätökseen, ja lopettavat ne sitten manuaalisesti itse. Thread-luokalla luodut säikeet on myös liitettävä pääsäikeeseen.

psäikeet ja (ei)muuttumattomuus

Viimeinen luokka, johon puutumme, on Volatile, uusi lisäys pthreads v3:een. Muuttumattomuudesta on tullut tärkeä käsite p-säikeissä, koska ilman sitä suorituskyky kärsii merkittävästi. Siksi oletusarvoisesti säikeistetyt luokkien ominaisuudet, jotka ovat itse säikeistettyjä objekteja, ovat nyt muuttumattomia, eikä niitä siksi voida korvata alkuperäisen määrityksen jälkeen. Tällaisten ominaisuuksien eksplisiittinen muuntavuus on tällä hetkellä edullinen, ja se voidaan silti saavuttaa käyttämällä uutta Volatile-luokkaa.

Katsotaanpa esimerkkiä, joka osoittaa uudet muuttumattomuusrajoitukset:

Luokkatehtävä laajentaa säikeistettyä luokkaa (julkinen funktio __construct() ( $this->data = new Threaded(); // $this->data ei ole ylikirjoitettavissa, koska se on säikeitetyn luokan säikeistetty ominaisuus)) $task = new class(new Task()) laajentaa säiettä ( // säikeistetty luokka, koska säie laajentaa säikeen julkinen funktio __construct($tm) ( $this->threadedMember = $tm; var_dump($this->threadedMember-> data); // objekti(Threaded)#3 (0) () $this->threadedMember = new StdClass( // virheellinen, koska ominaisuus on säikeitetyn luokan jäsen ) );

Haihtuvien luokkien säikeiset ominaisuudet ovat toisaalta muuttuvia:

Luokkatehtävä laajentaa Volatilea ( julkinen funktio __construct() ( $this->data = new Threaded(); $this->data = new StdClass(); // kelvollinen, koska olemme haihtuvassa luokassa ) ) $tehtävä = uusi class(new Task()) laajentaa säiettä ( julkinen funktio __construct($vm) ( $this->volatileMember = $vm; var_dump($this->volatileMember->data); // objekti(stdClass)#4 (0) () // edelleen virheellinen, koska Volatile laajentaa Threaded, joten ominaisuus on edelleen säikeitetyn luokan jäsen $this->volatileMember = new StdClass() );

Voimme nähdä, että Volatile-luokka ohittaa emoketjunsa määräämän muuttumattomuuden tarjotakseen mahdollisuuden muuttaa säikeistettyjä ominaisuuksia (sekä unset()).

On toinenkin keskustelunaihe, joka kattaa vaihtelevuuden ja haihtuvan luokan - taulukot. P-säikeissä taulukot lähetetään automaattisesti haihtuviin objekteihin, kun ne on määritetty säikeistetty-luokan ominaisuuteen. Tämä johtuu siitä, että useiden PHP-kontekstien joukon manipulointi ei yksinkertaisesti ole turvallista.

Katsotaanpa esimerkkiä uudelleen ymmärtääksemme joitain asioita paremmin:

$taulukko = ; $tehtävä = new class($array) laajentaa säiettä ( yksityinen $data; julkinen funktio __construct(array $array) ( $this->data = $array; ) public function run() ( $this->data = 4; $ tämä->tiedot = 5; print_r($this->data) ); $tehtävä->aloitus() && $tehtävä->liitty(); /* Lähtö: haihtuva objekti ( => 1 => 2 => 3 => 4 => 5) */

Näemme, että haihtuvia objekteja voidaan käsitellä ikään kuin ne olisivat taulukoita, koska ne tukevat taulukkotoimintoja, kuten (kuten yllä on esitetty) subset()-operaattori. Volatile-luokat eivät kuitenkaan tue perustaulukkofunktioita, kuten array_pop ja array_shift. Sen sijaan Threaded-luokka tarjoaa meille sellaiset toiminnot sisäänrakennetuina menetelminä.

Esittelynä:

$data = uusi luokka laajenee Haihtuva (julkinen $a = 1; julkinen $b = 2; julkinen $c = 3; ); var_dump($data); var_dump($data->pop()); var_dump($data->shift()); var_dump($data); /* Tulos: object(class@anonymous)#1 (3) ( ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) ) int(3) int(1) object(class@anonymous)#1 (1) ( ["b"]=> int(2) ) */

Muita tuettuja toimintoja ovat Threaded::chunk ja Threaded::merge .

Synkronointi

Tämän artikkelin viimeisessä osassa tarkastelemme synkronointia psäikeissä. Synkronointi on menetelmä, jonka avulla voit hallita jaettujen resurssien käyttöä.

Toteutetaan esimerkiksi yksinkertainen laskuri:

$laskuri = uusi luokka laajentaa säiettä ( julkinen $i = 0; julkinen funktio run() ( for ($i = 0; $i i; ) ) ); $laskuri->aloitus(); for ($i = 0; $i i; ) $counter->join(); var_dump($laskuri->i); // tulostaa luvun 10-20

Ilman synkronointia lähtö ei ole deterministinen. Useat säikeet kirjoittavat samaan muuttujaan ilman valvottua pääsyä, mikä tarkoittaa, että päivitykset katoavat.

Korjataan tämä niin, että saadaan oikea tulos 20 lisäämällä ajoitus:

$laskuri = uusi luokka laajentaa säiettä ( public $i = 0; public function run() ( $this->synchronized(function () ( for ($i = 0; $i i; ) )); ) ); $laskuri->aloitus(); $laskuri->synkronoitu(funktio ($laskuri) ( for ($i = 0; $i i; ) ), $laskuri); $counter->join(); var_dump($laskuri->i); // int(20)

Synkronoidut koodilohkot voivat myös kommunikoida keskenään Threaded::wait- ja Threaded::notify- (tai Threaded::notifyAll) -menetelmillä.

Tässä on vaihtoehtoinen lisäys kahdessa synkronoidussa while-silmukassa:

$laskuri = uusi luokka laajentaa säiettä ( public $cond = 1; public function run() ( $this->synchronized(function ()) ( for ($i = 0; $i notify();); if ($this->cond === 1) ( $this->cond = 2; $this->wait(); ) ) )); $laskuri->aloitus(); $laskuri->synkronoitu(funktio ($laskuri) ( if ($laskuri->cond !== 2) ( $counter->wait(); // odota, että toinen alkaa ensin ) for ($i = 10; $i notify(); $counter->join(); /* Tulostus: int(0) int(10) int(1) int(11) int(2) int(12) int(3) int(13) int(4) int(14) int(5) int( 15) int(6) int(16) int(7) int(17) int(8) int(18) int(9) int(19) */

Saatat huomata lisäehtoja, jotka on asetettu Threaded::wait -puhelun ympärille. Nämä ehdot ovat kriittisiä, koska niiden avulla synkronoitu takaisinsoitto voi jatkua, kun se on vastaanottanut ilmoituksen ja määritetty ehto on tosi. Tämä on tärkeää, koska ilmoitukset voivat tulla muualtakin kuin silloin, kun Threaded::notify kutsutaan. Siten, jos kutsut Threaded::wait-metodille eivät olleet ehtojen sisällä, suoritamme vääriä herätyskutsuja, mikä johtaa arvaamattomaan koodin käyttäytymiseen.

Johtopäätös

Tarkastelimme pthreads-paketin viittä luokkaa (Threaded, Thread, Worker, Volatile ja Pool) ja kuinka kutakin luokkaa käytetään. Tarkastelimme myös uutta muuttumattomuuden käsitettä psäikeissä, tehty lyhyt yleiskatsaus tuetut synkronointiominaisuudet. Kun nämä perusasiat ovat kunnossa, voimme nyt alkaa tutkia, kuinka psäikeitä voidaan käyttää tosielämän tapauksissa! Tämä on seuraavan postauksen aihe.

Jos olet kiinnostunut seuraavan postauksen käännöksestä, kerro minulle: kommentoi sosiaalisessa mediassa. verkostoissa, äänestä ja jaa viesti kollegoiden ja ystävien kanssa.

Lankakeskustelu

A kierteistä keskustelua on sähköinen keskustelu (kuten sähköpostitse, sähköpostilista, ilmoitustaulu , uutisryhmä tai Internet-foorumi), jossa ohjelmisto auttaa käyttäjää ryhmittelemällä viestit visuaalisesti. Viestit ryhmitellään yleensä visuaalisesti aihekohtaiseen hierarkiaan. Tällä tavalla ryhmiteltyä viestijoukkoa kutsutaan a aiheen lanka tai yksinkertaisesti "lankaa". Keskustelufoorumilla, sähköpostiohjelmalla tai uutisasiakkaalla sanotaan olevan "ketjutettuja aiheita", jos se ryhmittelee samaa aihetta koskevat viestit yhteen, jotta se on helppo lukea tällä tavalla. Lisäksi ketjutetut keskustelut antavat käyttäjien yleensä vastata tiettyyn viestiin aiheen säikeessä. Tämän seurauksena keskustelujen hierarkia voi olla ketjun aiheen sisällä. Erityyppiset ohjelmistot voivat mahdollistaa tämän hierarkian näyttämisen missä nimeltään kierretila. (Vaihtoehtona on lineaarinen tila, joka näyttää tyypillisesti kaikki viestit päivämääräjärjestyksessä riippumatta siitä, kuka on vastannut kenelle.)

Edut

Hierarkkisesti ketjutettujen näkemysten etuna on, että niiden avulla lukija ymmärtää nopeasti keskustelun kokonaisrakenteen: erityisesti kuka vastaa kenelle. Sellaisenaan se on hyödyllisin tilanteissa, joissa on laajennettuja keskusteluja tai keskusteluja, kuten uutisryhmiä: todellakin monimutkaisissa keskusteluissa on nopeasti mahdotonta seurata argumenttia ilman jonkinlaista hierarkkista ketjutusjärjestelmää.

Toinen etu on yhteisön hienovaraisempi arvostus hierarkkisesti säikeitetyissä järjestelmissä. Koska vastaukset on annettava tiettyihin viesteihin, ne tehdään myös tietyille henkilöille. Lankakeskustelut keskittyvät siksi kirjoittajan erityisiin näkemyksiin ja persoonallisuuksiin sen yksilön, johon vastataan. Tätä tapahtuu vähemmän foorumeilla, joissa viimeisin kommentti lisätään vain yleiseen pooliin.

Haitat

Hierarkkisen kierteityksen haittapuoli litteään kierteitykseen verrattuna on lisääntynyt monimutkaisuus, ja siksi tällainen näkymä vaatii käyttäjiltä lisääntynyttä mukavuutta ja hienostuneisuutta. Siksi ei ole yllättävää, että sen käyttöönotto on ollut voimakkainta joissakin vanhimmissa ja/tai kehittyneimmissä verkkoyhteisöissä, kuten Usenet, CIX tai Slashdot. Verkkokeskustelu- ja kommenttijärjestelmät ovat verraten nuorempia ja avoimia laajemmalle yleisölle, ja sellaisenaan hierarkkinen ketjuttaminen on vasta äskettäin yleistynyt tällaisilla areenoilla.

Puuhierarkian asettamisella on myös tapana pirstalla keskustelua aiheen sisällä: ei enää ole mahdollista lähettää viestiä, joka vastaa tai tiivistää useisiin eri aikaisempiin viesteihin. Sen sijaan jokaiseen aikaisempaan viestiin on vastattava erikseen. Voidaan väittää, että tämä johtaa vastakkaisempaan keskustelutyyliin foorumeilla, jotka käyttävät hierarkkista lankaa. Vaikka se olisikin totta, jos suora ketjutettu vastaus ei ole enää mahdollista haluttuun viestiin annettujen vastausten suuren määrän vuoksi, käyttäjät käyttävät nyt usein vastaajansa lainauksia pitääkseen keskustelun raiteina ja sujuvana. sujuvasti Useimmat ilmoitustauluyhteisöt suosittelevat tätä siinä tapauksessa, että ketjuttaminen on saavuttanut muuten kattavan rajansa.

Avaa lanka

Avoin ketju viittaa blogikirjoitukseen, jossa lukijat voivat kommentoida ja keskustella mistä tahansa valitsemastaan ​​aiheesta. Ne ovat yleensä hyödyllisempiä suosituissa blogeissa, joissa on suuria määriä liikennettä; niitä käytetään usein, kun blogin kirjoittajalla ei ole aihetta julkaista tai kun lähettäminen on tyyntä.

Avoimia säikeitä käytetään myös rikkomaan blogien pääsivuilla olevien viestien yksitoikkoisuutta. Kommentteja voi kertyä sisältösuuntautuneisiin viesteihin; siksi kirjoittajat käyttävät avoimia säikeitä, jotta sivujen latausajat eivät hidastu.

Esimerkkejä

*Yahoo! Ryhmät [ http://groups.yahoo.com/], MSN-ryhmät [ http://groups.msn.com/] ja Slashdot [ http://www.slashdot.com/] kaikki tarjoavat verkkopohjaisia ​​keskustelupalstoja, joissa on keskusteluketjuja.

Katso myös

* Tieteellinen Skywriting
* Luettelo bloggaamisen termeistä

Viitteet

*Dartmouth. (2003). [ http://www.dartmouth.edu/~webteach/articles/discussion.html "Keskustelu verkossa" ]
*Wolsey, T. DeVere, [ http://www.readingonline.org/articles/art_index.asp?HREF=wolsey/index.html "Kirjallisuuskeskustelu kyberavaruudessa: Nuoret nuoret keskustelevat kirjoista keskusteluryhmissä] . "Reading Online", 7(4), tammi/helmikuu 2004. Haettu 30. joulukuuta 2007

Wikimedia Foundation.

  • 2010.
  • Leon Powe

Barh Azoum

    Katso muita sanakirjoja: Internet-foorumi

    - phpBB Internet Forum -ohjelmistopaketti, yksi suosituimmista foorumipaketeista… Wikipedia Virtuaalisten oppimisympäristöjen historia 1990-luku

    - Virtuaalisten oppimisympäristöjen historiassa 1990-luku oli kasvun aikaa, mikä johtui pääasiassa edullisen tietokoneen ja Internetin tulosta.1990s1990* Formal Systems Inc. Princeton, NJ, USA esittelee DOS-pohjaisen arvioinnin… … Wikipedia- Collaborative Face to Face Educational Environment Kehittäjä(t) LEAD-konsortio Vakaa julkaisu 5.0 / kesäkuu 2010 Käyttöjärjestelmä Cross platform … Wikipedia

    Keskustelun ketjuttaminen- on monien sähköpostiohjelmien, ilmoitustaulujen, uutisryhmien tai Internet-foorumien käyttämä ominaisuus, jossa ohjelmisto auttaa käyttäjää ryhmittelemään viestejä visuaalisesti. Viestit ryhmitellään yleensä visuaalisesti aihekohtaiseen hierarkiaan. Joukko viestejä ryhmiteltynä... ... Wikipediaan

    Slashdot- Kuvakaappaus Slashdot.org-pääsivun URL-osoitteesta slashdot.org-iskulause Uutiset nörteille. Asiat, joilla on merkitystä...Wikipedia

    MediaWiki- nimiavaruuden uudelleenohjaukset tänne. Ohjeita MediaWiki-nimiavaruudesta Wikipediassa on kohdassa Ohje:MediaWiki-nimiavaruus. Yleistä tietoa Wikipedian nimiavaruuksista löytyy kohdasta Wikipedia:Nimiavaruus. Keskustelusivun ja MediaWikin keskustelusivun uudelleenohjaus tähän. ... ... Wikipedialle

    Tietokonevälitteinen viestintä- Muita käyttötarkoituksia varten katso CMC (täsmennys). Tietokonevälitteisellä viestinnällä (CMC) tarkoitetaan mitä tahansa viestintätapahtumaa, joka tapahtuu kahden tai useamman verkkoon liitetyn tietokoneen käytön kautta. Vaikka termillä on perinteisesti viitattu niihin… … Wikipediaan

    Wiki-ohjelmiston vertailu- Seuraavissa taulukoissa verrataan yleisiä ja teknisiä tietoja useille wiki-ohjelmistopaketeille. Sisältö 1 Yleistä 2 Kohdeyleisö 3 Ominaisuudet 1 4 Ominaisuudet 2 … Wikipedia

    Tieteellinen Skywriting- on kognitiotieteilijän Stevan Harnadin keksimä termi, joka kuvaa useiden sähköpostien ja aiheeseen ketjutetun verkkoarkiston, kuten uutisryhmän, sähköpostilistan, hypermailin, netnews- tai Internet-foorumin yhdistelmää, linkitettynä ja lajiteltavissa päivämäärän mukaan,… … Wikipedia

    Yhteistyöllinen päätöksentekoohjelmisto- Collaborative Decision Making (CDM) -ohjelmisto on ohjelmistosovellus tai moduuli, joka koordinoi toimintoja ja ominaisuuksia, joita tarvitaan oikea-aikaisten kollektiivisten päätösten tekemiseen, jolloin kaikki asiaankuuluvat sidosryhmät voivat osallistua prosessiin. ... ... Wikipedia

Kokeilin äskettäin psäikeitä ja olin iloisesti yllättynyt - se on laajennus, joka lisää mahdollisuuden työskennellä useiden todellisten säikeiden kanssa PHP:ssä. Ei emulointia, ei taikuutta, ei väärennöksiä - kaikki on totta.



Harkitsen tällaista tehtävää. Siellä on joukko tehtäviä, jotka on suoritettava nopeasti. PHP:llä on muita työkaluja tämän ongelman ratkaisemiseen, niitä ei mainita tässä, artikkeli käsittelee p-säikeitä.



Mitä ovat pthreadit

Siinä se! No melkein kaikki. Itse asiassa on jotain, joka voi järkyttää utelias lukija. Mikään näistä ei toimi tavallisella PHP:llä, joka on käännetty oletusasetuksilla. Jotta voit nauttia monisäikeestä, sinun on oltava ZTS (Zend Thread Safety) käytössä PHP:ssäsi.

PHP-asetukset

Seuraavaksi PHP ja ZTS. Älä kiinnitä huomiota niin suureen eroon suoritusajassa verrattuna PHP:hen ilman ZTS:ää (37,65 vs 265,05 sekuntia), en yrittänyt yleistää PHP-asetuksia. Jos kyseessä on ilman ZTS:ää, minulla on esimerkiksi XDebug käytössä.


Kuten näet, käytettäessä kahta säiettä ohjelman suoritusnopeus on noin 1,5 kertaa suurempi kuin lineaarisen koodin tapauksessa. Käytettäessä 4 lankaa - 3 kertaa.


Huomaa, että vaikka prosessori on 8-ytiminen, ohjelman suoritusaika pysyi lähes ennallaan, jos käytettiin enemmän kuin 4 säiettä. Näyttää siltä, ​​​​että tämä johtuu siitä, että prosessorissani on 4 fyysistä ydintä. Selvyyden vuoksi olen kuvannut levyn kaavion muodossa.


Jatkaa

PHP:ssä on mahdollista työskennellä varsin tyylikkäästi monisäikeistyksen kanssa käyttämällä pthreads-laajennusta. Tämä lisää huomattavasti tuottavuutta.

Tunnisteet: Lisää tunnisteita

Hyvän ystäväni äiti menetti matkalaukkunsa lennolla Pietarista Moskovaan, ja hänellä oli seuraava lento lämpimille rannoille, ja nyt hän oli jo lomakeskuksessa - ilman uimapukua, sandaaleja ja vain T:n kanssa. -paita käsimatkatavaroistaan. Vanhojen aikojen vuoksi annoin hänelle pari vinkkiä mitä tehdä ja minne juosta, ja tänään päätin kirjoittaa tänne kaiken, mitä tiedän tietystä aiheesta.

Selvittääkseni, missä olen niin älykäs, haluan muistuttaa, että työskentelin aikoinaan useiden lentoyhtiöiden maapalveluissa, mukaan lukien tiettyjen matkatavaroiden etsintään liittyvien asioiden hoitaminen. No, plus tietysti oma lentokokemukseni. Kuitenkin, koska Poistuin lentopalvelualalta useita vuosia sitten, ehkä jotkut vivahteet ovat saattaneet muuttua - jos on, otan kiitollisena vastaan ​​kommentteja aiheesta ja korjaan postauksen tiedot.

Aloitan tästä Mitä sinun tulee tehdä, jotta matkatavarat eivät katoa:
1. Revi matkalaukustasi kaikki aikaisempien matkojen tagit ja tarrat, myös pienet viivakoodilla varustetut tarrat, jotka usein liimataan erikseen itse matkalaukkuun - ne voivat hämmentää automaattista matkatavaroiden skannaus- ja lajittelujärjestelmää.
2. Ripusta nimilappu matkalaukullesi (laukku, laatikko, paketti - yleensä kaikki mitä kirjaat matkatavaraksi): voit ostaa uudelleen käytettävän vaihtoehdon etukäteen tai ottaa paperilipun lähtöselvitystiskiltä - yleensä kaikki puolikunnolliset lentoyhtiöt antavat niitä ilman rajoituksia. Ja esimerkiksi Emiratesilla on yleensä erinomaisia ​​muovilappuja kestävässä johdossa, joka voi kestää hyvin pitkään:

Vanhat vainoharhaiset voivat tehdä kuten minä: minulla on aina matkalaukkuuni riippuva muovinen uudelleenkäytettävä Samsonite-setin etiketti, jossa on pysyvä kotiosoite, puhelinnumero ja sähköpostilla, ja kun lennän jonnekin lomalle, ripustan lisäksi paperilapun, johon ilmoitan uudessa paikassa oleskeluni päivämäärät ja kaikki mahdolliset yhteystiedot (hotellin nimi ja osoite, paikallinen puhelinnumero, jos sellainen on, ja tietysti etu- ja sukunimeni ).
3. Tarkista lähtöselvitystiskillä, että matkatavarasi on kiinnitetty matkatavaralipukkeella, jonka lähtöselvityksen välittäjä tulostaa - jossa on kaupunkikoodi, johon lennät, ja lennon numero.
4. Jos sinulla on useita jatkolentoja, kerro tästä lähtöselvityksen välittäjälle ja määritä mihin kohtaan haluat tarkistaa matkatavarasi. Joissakin tapauksissa matkatavarat on noudettava yhdeltä tai toiselta lentoasemalta reitin varrella toiveestasi riippumatta: tämä koskee esimerkiksi lentokenttien välisiä kuljetuksia (Orly ja Charles de Gaulle Pariisissa, Domodedovo - Sheremetyevo - "Vnukovo " Moskovassa), erilliset terminaalit (terminaalit 1 ja 2 Frankfurtissa) tai ensimmäisessä saapumispaikassa Yhdysvalloissa tai Meksikossa - tämä on tullivaatimus näissä maissa: oletetaan, että lennät Moskova-Washington-Phoenix, matkatavaralappu myönnetään kaikille kolmelle osuudelle Phoenixille, mutta Washingtonissa matkatavarat on noudettava fyysisesti, tulliselvitettävä ja tehtävä uudelleen lähtöselvitys lentokone tai eläin, sinun on todennäköisesti noudettava se kuljetuspisteestä. Yleensä monimutkaisen reitin, jossa on siirtoja, tapauksessa on parempi selvittää matkatavaroiden liikkumisen yksityiskohdat etukäteen lentoyhtiön puhelinkeskuksessa tai äärimmäisissä tapauksissa lähtöselvityksessä.
5. Tee matkatavarasi näkyväksi: matkatavaroiden viivästykset eivät aina ole matkatavaroiden käsittelijöiden tai lajittelujärjestelmän vikojen syy. Joskus toinen hajamielinen matkustaja, joka on väsynyt pitkän lennon jälkeen, ottaa matkatavarahihnalta saman mustan Samsonite- tai mitätön urheilulaukun kuin sinun. Merkitse siis matkatavarasi: ripusta kahvaan joukko kirkkaita nauhoja tai pieni pehmeä lelu, kiinnitä siihen suuri tarra tai anna matkalaukkua valittaessa yksinkertaisesti epätavallinen väri.

Mitä matkatavaroissa ei saa kirjata?
Muista, että kaikki lentoyhtiöt ja lentokentät menettävät matkatavarat. Tilastot ovat tietysti kaikilla erilaisia, mutta luotettavimmatkin lentoyhtiöt voivat kadota tai viivästyttää matkatavarat ja jopa pienimmällä lentokentällä, jossa yksi matkatavaroiden käsittelijä kuljettaa kärryn matkalaukkuineen suoraan lähtöselvityksestä lentokoneeseen. Siksi suosittelen ottamaan aina käsimatkatavarasi mukaan:
- tärkeät asiakirjat, mukaan lukien ne, joita ei tarvita lennon aikana (esimerkiksi viimeisellä Pietarin matkallani jouduin vaihtamaan ajokorttia, ja otin käsimatkatavaroihini vihkitodistuksen ja kaikenlaisia ​​kortteja autokoulu)
- avaimet (yhdessä osoitteesi tagin kanssa tämä voi olla vaarallista)
- rahaa, koruja (ei kommentteja)
- kalliit herkät laitteet
- lääkkeet, joita otat säännöllisesti, lennolle vaadittavan määrän ja pienellä varauksella siltä varalta, että joudut etsimään analogia vieraalta maasta tai kaupungista. Reseptilääkkeet, joita ei voi ostaa, jos matkatavarat katoavat, ota mukaasi koko matkan ajaksi tarvittava määrä.
- jotain, jota saatetaan tarvita kiireellisesti saapuessa (esim. laturi puhelimelle
- jotain, jolla on tunnearvoa sinulle henkilökohtaisesti: joskus matkatavarat katoavat ikuisesti, ja jos henkilökohtaisen päiväkirjan menettäminen särkee sydämesi, on parempi jättää se kotiin tai ottaa mukaan lentokoneeseen

Opettavainen tarina: työskennellessäni Lufthansalla Pietarissa toimistollemme juoksi yhdysvaltalainen aviopari vääntelemässä käsiään - heidän matkatavaransa, joka sisälsi adoptiooikeudenkäynnille erittäin tärkeitä asiakirjoja, ei ollut saapunut, oikeudenkäynti oli seuraavana päivänä. Tietenkin lentoyhtiö on syyllinen matkatavaroiden katoamiseen, mutta kuka tästä hyötyy? Tällaisen tilanteen välttämiseksi riitti vain laittaa tärkeät paperit käsimatkatavaroihin.

Joten saavuit etkä löytänyt matkatavaroitasi matkatavarahihnalta. Mitä tehdä?
1. Jos kirjasit matkatavaroihin jotain muuta kuin tavalliset matkalaukut: sukset, sello, seinän kokoinen plasmapaneeli, lastenrattaat, live-marmoritanska, tarkista onko siellä erillinen piste ns. ylisuuret matkatavarat tai Bulky-matkatavarat - yllä kuvatun kaltaiset matkatavarat ladataan usein erilliseen lokeroon ja puretaan erikseen, käsin. Jos matkatavarasi ei myöskään löydy sieltä
2. Mene matkatavaroiden jäljitys- tai Lost & Found -tiskille. Siellä sinun on täytettävä erityinen lomake yksityiskohtaiset tiedot matkatavaroistasi: reitti, ulkonäkö, lyhyt sisältöluettelo, yhteystietosi vakituisessa asuinpaikassasi ja tilapäisessä oleskelussasi. Lisäksi matkatavaroiden jäljityspalvelussa näet todennäköisemmin seuraavanlaisen matkatavarataulukon:

Tämän luokituksen mukaan kadonneet matkatavarasi koodataan ja, jotta ymmärrät, nämä kaksi matkalaukkua koodataan samalla tavalla:

Joten voit vapaasti lisätä lisätietoja kuvaukseen äläkä ohita sisältölauseketta. Yleensä kun täytät matkatavaroiden viivästysraportin ensimmäisen kerran, sinua pyydetään ilmoittamaan useita sisältökohteita, joista laukkusi voidaan tunnistaa, jos sen ulkopuolella ei ole tunnistemerkkejä ja laukku on avattava (jos pussi avataan, laitat asiasta ilmoituksen). Huono esimerkki: T-paita / kirja / kosteuspyyhkeet, hyvä esimerkki: kirkkaanpunaiset bikinit / Malevich-kopioiden luettelo / taitettava rauta. Hakemuksen täyttämisen jälkeen matkatavaroiden jäljityspalvelun työntekijä antaa sinulle numeron muodossa XXXYY11111, jossa XXX on saapuvan lentokentän koodi, YY on saapuvan lentoyhtiön koodi + 5 numeroa hakemuksen sarjanumerosta: esim. JFKLH12345, jos lensit Lufthansalla Kennedyn lentokentälle New Yorkiin. Muista tai kirjoita tämä numero muistiin - se on helpoin tapa löytää hakemuksesi tulevissa hakemuksissa.
Käyttämällä samaa numeroa voit tarkistaa haun tilan ITSE (jostain syystä linkki katoaa: jos se ei toimi sinulle, googlaa World Tracer Online ja kirjaimellisesti toinen linkki - otsikolla Baggage Tracing verkkosivuilla worldtracer.aero - on se mitä tarvitset), koska pääset kadotettuun on usein hyvin vaikeaa
3. Yritä ottaa yhteyttä lentoyhtiösi toimistoon saapumislentokentällä: joskus (korostan - TOSI!), jos et ole lentänyt kotiin, mutta tilapäiseen oleskelupaikkaan (loma, työmatka), lentoyhtiö voi tarjota paketin hygieniatarvikkeita (Lufthansalla on mukana ylikokoinen t-paita, hammasharja ja -tahna, kampa, pienet shampoo- ja suihkugeelipakkaukset, pesujauhepaketti jne.) tai maksaa pieni käteismaksu pienistä kuluista paikan päällä (käteismaksu paikalla).

Mitä tapahtuu seuraavaksi?
Tiedostosi (ns. AHL) menee keskitettyyn matkatavaroiden hakujärjestelmään (World Tracer). Kaikki lunastamattomat matkatavarat kuuluvat samaan hakujärjestelmään riippumatta siitä, löydettiinkö ne ilman tunnistetta matkatavarapihan nurkista vai jäivätkö ne matkatavarahihnalle, XXXYY11111-muotoinen tiedosto myös luotu, vain eri alatyyppi - ns. käsillä oleva raportti tai OHD. Jos AHL- ja OHD-tiedostojen tiedot täsmäävät (sukunimi, matkalaukun kuvaus, reitti jne.), molemmat asemat (jolta ilmoitettiin matkatavaroiden katoamisesta ja mistä noutamattomat matkatavarat löytyivät) saavat ilmoituksen ja sitten se on teknologiakysymys: uudelleentarkastus ja onnistuneen matkatavaroiden välittäminen haluttuun kaupunkiin. Tietenkin suuri määrä itse tehty- viestit, samankaltaisten mutta ei samojen matkalaukkujen hylkääminen sekä vastaukset useisiin puhelut- Yleensä matkatavaroiden etsintäpalvelun henkilökunta ei kyllästy koskaan.
Likimääräiset tilastot: yli 90% kadonneista matkatavaroista löytyy ensimmäisten 3 päivän aikana, 3% katoaa lopullisesti.
Mitä voit tehdä?
1. Jos joudut ostamaan jotain kiireellisesti tarvitsemaasi saapuessasi (hammasharjasta työpukuun), muista säilyttää kuitit myöhempää korvausta varten. Sinun tulisi kuitenkin välttää tarpeettomia kalliita ostoja. Selitän miksi myöhemmin.
2. Noudata uusia vaiheita, tee tarkin sisältöluettelo mieluiten värillä, merkillä ja likimääräiset kustannukset jokainen kohde, mieluiten englanniksi (muuten lentoyhtiön työntekijän on käännettävä tämä luettelo päästäkseen järjestelmään), ota yhteyttä lentoyhtiöön ja lähetä heille tämä luettelo, se lisätään matkatavaroiden hakusovellukseen. Ensimmäiset 5 päivää matkatavaroiden haun suorittaa saapumislentoasema, sitten etsinnästä tulee lentoyhtiön (hakemusnumerossa mainittu lentoyhtiö - muista JFKLH12345?), ja 21 päivän kuluttua sinä voi hakea lopullista korvausta.
3. Jos matkatavaroita ei ole löydetty 21 päivän kuluttua ilmoituksen jättämisestä, ota yhteyttä lentoyhtiöön korvauksen vaatimiseksi. Jos en erehdy, vanhentumisaika on 2 vuotta, ts. Voit hakea korvausta kahden vuoden kuluessa vahingonkorvausvaatimuksen jättämisestä.

Korvauksen maksaminen.
Korvauksen maksamiseksi sinun tulee ottaa yhteyttä lentoyhtiösi edustustoon ja esittää maksuhakemus, asiakirjat, jotka vahvistavat lennon ja matkatavaroiden katoamisen (maihinnousukortit, matkatavaralaput, matkatavaroiden katoamishakemuksen numero, maksutiedot). Jos en erehdy, Venäjän federaatiossa korvauspäätöstä on laillisesti harkittava 30 päivän kuluessa. Sinua voidaan myös pyytää arvioimaan sisällön hinta ja mahdollisuuksien mukaan toimittamaan kuitit matkalaukun ja siinä olevien tavaroiden ostosta (ymmärrän, että tämä on useimmissa tapauksissa epärealistista, mutta tämä on osa menettelyä).
Aikaisemmin maksut suoritettiin kirjattujen matkatavaroiden painon mukaan - noin 20 dollaria kilolta. Myöhemmin maksujärjestelmää muutettiin ja lentoyhtiöiden vastuu rajoitettiin 1 000 tavanomaiseen yksikköön (tavanomaisen yksikön hinta lasketaan lentoyhtiön sisällä), mikä vastasi työskentelyhetkelläni noin 1 300 euroa. Ne. vaikka tuot kuitin Louis Vuitton -matkalaukun ostosta, joka on valmistettu tuhannesta bolivialaisesta gekonnahasta ja täytetty timantilla, et saa yli 1 300 euroa.