Mfululizo wa mazungumzo ya kusisimua php. Kuchagua toleo la PHP kwa Windows. Tofauti kati ya vifurushi vya binary vya PHP vilivyo salama na visivyo salama vya nyuzi

Makini! Makala haya yamepitwa na wakati kabisa au sasa yametathminiwa na mwandishi kuwa hayana manufaa ya habari.

Uzuri wa msimbo wa chanzo-wazi ni uwazi wake :)) Hiyo ni. ikiwa una akili/wakati/hamu, unaweza kujua jinsi programu inavyofanya kazi. Upande wa chini wa nambari kama hiyo ni ugumu wa kupata vifurushi muhimu vilivyokusanywa. Kwa mfano, PHP inaweza kupakuliwa kama vyanzo vya mifumo ya Nix na mkusanyiko/mkusanyiko unaofuata. Kila kitu tayari kimekusanyika kwa Windows, lakini kuna vifurushi vingi vya binary vilivyotengenezwa tayari! Chaguzi na " uzi salama/usio na uzi salama", VC6/VC9 na matoleo tofauti ya PHP yenyewe. Nakala hiyo iliundwa ili kufafanua hali hiyo. Inategemea vyanzo tofauti, kwa sehemu kwenye tafsiri kutoka kwa Kiingereza. Yote ili wakati ujao sitalazimika kuijua tena - "kuna maana gani!?"

Inahitajika Toleo la PHP inategemea toleo la seva ya wavuti ambayo itatumika. Kwa mfano, Apache 1.3.x inafanya kazi na PHP toleo la 3.0.x, Apache 2.x inafanya kazi na PHP toleo la 4.0 na matoleo mapya zaidi. Lakini hii sio shida kama hiyo, zingatia matoleo mapya zaidi na yale ambayo mwenyeji anayo.

Ni aina gani za maandishi VC6, VC9, VC11? Vyanzo vya PHP vya Windows vimeundwa katika Visual Studio. VC9 inapatikana wakati imeundwa katika VS 2008, VC11 - Visual Studio 2012. Ipasavyo, ili jambo hili lote likufanyie kazi, maktaba lazima zisakinishwe kwenye kompyuta yako. Visual C++ Inaweza kusambazwa tena kwa Visual Studio mwaka husika. Ufafanuzi fulani juu ya jambo hili.

Kwa kuongeza, ikiwa seva yako ya wavuti ni Apache ya zamani kutoka kwa apache.org, basi unahitaji kupakua toleo la VC6 la PHP, kwa ajili ya kukusanya ambayo Visual Studio 6 ilitumiwa. Ikiwa PHP itafanya kazi kwa IIS au kwa kushirikiana na Apache mpya zaidi. , basi unaweza kukusanya kitu cha kisasa zaidi;)

Kwa mimi, kikwazo kuu katika kuchagua ni mhudumu. Sasa kuna toleo thabiti la PHP 5.5.4, lakini bado ana 5.2.17!

Sasa sehemu ya kuvutia zaidi: ". thread salama au si thread salama?"
Tafsiri bila malipo ya makala (Dominic Ryan, 09/27/2007)

Sijawahi kuona Kiingereza kilichovunjika namna hii:((Nilitaka kutafsiri makala hiyo haraka, lakini nina shida kuelewa alichoandika mwandishi. Mabadiliko ya mara kwa mara kati ya "nini-hicho" na sentensi ngumu kwa ujumla hufanya Moscow ionekane wazi. Kirusi ni ngumu sawa na ukweli kwamba sina ujuzi na mawazo ya kutosha juu ya jinsi ya kuiita kwa usahihi kitu katika Kirusi ambacho kawaida huandikwa tu kwa Kiingereza%) Kwa mfano, sijawahi kuona dhana ya kiufundi ya "usanifu wa mchakato mbalimbali" kwa Kirusi, lakini lulu yangu ni "flow- salama" kwa ujumla ni swali la akili ya kawaida. Kwa ujumla, nitakupa kilichotokea.

Tofauti kati ya thread salama Na bila thread salama PHP binary paket

Tangu PHP ionekane kwa mara ya kwanza kwenye Windows mnamo Oktoba 20, 2000 na PHP 3.0.17, vifurushi vyake vya binary vimekuwa vikijengwa kama salama ya uzi (TS). Sababu ni kama ifuatavyo: Windows hutumia usanifu wa nyuzi nyingi, na mifumo ya Nix inasaidia usanifu wa michakato mingi. Ikiwa PHP iliundwa kama programu ya CGI yenye michakato mingi badala ya iliyo na nyuzi nyingi, basi kuitumia kama moduli ya CGI chini ya Windows kwenye seva ya IIS husababisha kushuka kwa kasi na utumiaji wa CPU. Kwa upande mwingine, unaweza kuunganisha PHP kwa IIS kama moduli ya ISAPI ( muundo wa nyuzi nyingi unahitajika- takriban. mtafsiri). Kisha tatizo lingine linatokea: baadhi ya upanuzi maarufu wa PHP umeundwa kwa kuzingatia Unix / Linux, i.e. na usanifu wa michakato mingi, ambayo husababisha ajali ya PHP iliyounganishwa na IIS kama moduli ya ISAPI. Hiyo. Uundaji wa CGI ndio mazingira thabiti zaidi ya PHP kwenye IIS na shida kuu kwamba ni polepole sana. Tunapaswa kupakia na kupakua mazingira yote ya PHP kutoka kwa kumbukumbu kila wakati kuna ombi.

Wakati huo, kulikuwa na chaguzi kadhaa za kuboresha utendaji wa PHP kwenye IIS. Ya kwanza ni kutumia opcode caching na programu kama eAccelerator, ambayo huhifadhi hati za PHP katika hali iliyokusanywa kwa sehemu kwenye diski na/au kwenye kumbukumbu. Mbinu hii inapunguza kwa kiasi kikubwa muda wa utekelezaji wa hati. Chaguo jingine lilikuwa kusanidi IIS kutumia PHP katika hali FastCGI. Katika kesi hii, mchakato wa PHP haukufunga baada ya kukamilika, lakini ulipokea kazi mpya na ombi la pili la PHP. Kwa kuongeza, iliwezekana kuendesha michakato kadhaa ya PHP kwa wakati mmoja, kwa kiasi kikubwa kuharakisha usindikaji wa maombi, ambayo ilikuwa bonus ya hali ya PHP CGI. Hata hivyo, kunaweza kuwa na masuala madogo ya uoanifu na viendelezi vya PHP. Hii bado ndiyo njia ya haraka zaidi ya kutumia PHP, na ndivyo Kisakinishi cha IIS Aid PHP kimesanidiwa kufanya.

Binary zilizokusanywa ndani hali isiyo salama ya uzi (isiyo salama ya uzi, NTS), hukuruhusu kusanidi IIS (na seva zingine za wavuti kwenye Windows) kutumia PHP kama kiolesura cha kawaida cha CGI kilicho na utendakazi dhabiti, kwa sababu. katika kesi hii (katika ujenzi kama huo), mchakato wa PHP hauitaji kungojea nyuzi kusawazisha. Wakati wa kulinganisha utendakazi wa "sefa salama" na "zisizo salama" vifurushi vya binary vya PHP kwenye IIS kama kiolesura cha kawaida cha CGI, ongezeko la utendaji ni hadi 40%, lakini bado sio haraka kama kutumia opcode katika njia ya FastCGI. . Na shida kubwa ni kwamba huwezi kutumia waya zisizo salama pamoja na zile salama za uzi. Hii inamaanisha kuwa huwezi kutumia mifumo ya kuweka akiba ya opcode kama eAccelerator katika mazingira ya PHP iliyoundwa na vifurushi vya binary visivyo salama (taarifa ambayo ni sahihi wakati wa kuandika).

Ikiwa PHP isiyo salama ya nyuzi haiwezi kusanidiwa kwa kasi sawa na mazingira salama ya nyuzi, basi kwa nini inahitajika katika ujenzi kama huo? Wacha turudi kwa FastCGI na maendeleo ya Microsoft katika eneo hili katika miaka michache iliyopita. Nambari ndogo-laini zimeunda toleo lao la FastCGI, ambalo hukuruhusu kusanidi jozi za PHP zisizo salama katika hali ya FastCGI, ambayo huleta utendaji kwa kasi ya mwanga :)

Kutoka kwa kifungu nilihitimisha kuwa breki huzingatiwa tu wakati unatumiwa na seva ya wavuti ya IIS. Kwa hali yoyote, sijaona mambo yoyote ya kijinga chini ya Windows + Apache. Pia inasema kuwa unaweza kuzidisha mkusanyiko wa NTS kwa yoyote seva ya wavuti, lakini siwezi kufikiria usanidi kama huo wa Apache.

Majadiliano yenye nyuzi

A mjadala wa thread ni majadiliano ya kielektroniki (kama vile yale ya barua-pepe, orodha ya barua pepe, ubao wa matangazo, kikundi cha habari, au jukwaa la mtandao) ambamo programu humsaidia mtumiaji kwa kupanga ujumbe katika makundi. Ujumbe kwa kawaida hupangwa kwa kuonekana katika daraja kulingana na mada. Seti ya ujumbe uliowekwa kwa njia hii inaitwa a mada ya mada au tu "nyuzi". Jukwaa la majadiliano, mteja wa barua pepe au mteja wa habari inasemekana kuwa na "mada zilizounganishwa" ikiwa itaweka pamoja ujumbe kuhusu mada sawa ili usomaji rahisi kwa njia hii. Zaidi ya hayo, mijadala iliyounganishwa kwa kawaida huwaruhusu watumiaji kujibu uchapishaji fulani ndani ya mada. Kwa hivyo, kunaweza kuwa na safu ya majadiliano ndani ya mada ya mazungumzo. Aina mbalimbali za programu zinaweza kuruhusu uongozi huu kuonyeshwa katika kile inaitwa Njia ya Threaded. (Mbadala ni Njia ya Mstari, ambayo kwa kawaida huonyesha machapisho yote kwa mpangilio wa tarehe, bila kujali ni nani aliyemjibu nani haswa.)

Faida

Faida ya maoni yaliyounganishwa kwa mpangilio ni kwamba huruhusu msomaji kufahamu haraka muundo wa jumla wa mazungumzo: haswa ni nani anayejibu. Kwa hivyo ni muhimu sana katika hali ya mazungumzo marefu au mijadala, kama vile vikundi vya habari: kwa kweli, kwa mijadala tata sana, inakuwa vigumu kwa haraka kufuata hoja bila aina fulani ya mfumo wa upakuaji wa kidaraja.

Faida nyingine ni katika kuthamini kwa hila zaidi jumuiya katika mifumo iliyounganishwa kwa viwango. Kwa vile majibu yanapaswa kufanywa kwa machapisho maalum, pia yanatolewa kwa watu mahususi. Mazungumzo yenye nyuzi kwa hivyo huwa yanalenga mwandishi kwenye maoni na haiba mahususi ya mtu anayeitikiwa. Hii hutokea kidogo katika mkutano ambapo maoni ya hivi punde yameingizwa kwenye dimbwi la jumla.

Hasara

Ubaya wa uwekaji nyuzi za kihierarkia juu ya uzi wa gorofa ni kiwango cha kuongezeka cha shida, na mtazamo kama huo unahitaji kiwango cha juu cha faraja na ustaarabu kwa upande wa watumiaji wake. Kwa hivyo haishangazi kwamba uchukuaji wake umekuwa mzito zaidi katika baadhi ya jumuiya kongwe na/au za kisasa zaidi za mtandaoni, kama vile Usenet, CIX au Slashdot. Mifumo ya gumzo na maoni kwenye wavuti, kwa kulinganisha, ni changa na iko wazi kwa hadhira pana zaidi, na kwa hivyo uwekaji nyuzi wa tabaka umekuwa jambo la kawaida hivi majuzi katika nyanja kama hizo.

Kuweka daraja la mti pia kunaelekea kugawanya majadiliano ndani ya mada: haiwezekani tena kuchapisha ujumbe unaojibu au kufupisha machapisho kadhaa tofauti ya hapo awali. Badala yake, kila chapisho la awali lazima lijibiwe kibinafsi. Inaweza kubishaniwa kuwa hii inasababisha mtindo wa mijadala zaidi katika mabaraza ambayo hutumia utaftaji wa madaraja. Hata hivyo, ingawa hiyo inaweza kuwa kweli, ikiwa jibu lililounganishwa moja kwa moja haliwezekani tena kwa sababu ya wingi wa majibu kwa chapisho linalohitajika, watumiaji sasa mara nyingi wanatumia nukuu za mtu wanayemjibu ili kudumisha mazungumzo. vizuri Hili linapendekezwa na jumuia nyingi za bodi ya ujumbe katika tukio ambalo uchanganyaji umefikia kikomo chake cha kina.

Fungua uzi

Uzi ulio wazi hurejelea chapisho la blogu ambapo wasomaji wanaweza kutoa maoni na kujadili mada yoyote wanayochagua. Kawaida ni muhimu zaidi kwenye blogi maarufu zilizo na idadi kubwa ya trafiki; mara nyingi hutumika wakati mwandishi wa blogu hana mada ya kuchapisha au wakati kuna utulivu wa kuchapisha.

Nyuzi wazi pia hutumiwa kuvunja monotoni ya machapisho kwenye kurasa kuu za blogi. Maoni yanaweza kujengwa kwenye machapisho yanayolenga maudhui; kwa hivyo, waandishi hutumia nyuzi zilizo wazi ili nyakati za upakiaji wa ukurasa zisipunguzwe.

Mifano

*Yahoo! Vikundi[ http://groups.yahoo.com/], Vikundi vya MSN [ http://groups.msn.com/] na Slashdot [ http://www.slashdot.com/] zote hutoa mabaraza ya msingi ya wavuti ambayo yanaangazia mijadala yenye nyuzi.

Angalia pia

*Uandishi wa kisayansi wa anga
* Orodha ya masharti ya kublogi

Marejeleo

* Dartmouth. (2003). [ http://www.dartmouth.edu/~webteach/articles/discussion.html "Kuchukua majadiliano mtandaoni" ]
*Wolsey, T. DeVere, [ http://www.readingonline.org/articles/art_index.asp?HREF=wolsey/index.html "Mjadala wa fasihi kwenye mtandao: Vijana wanaobalehe wanatumia vikundi vya majadiliano ya nyuzi kuzungumzia vitabu.] . "Kusoma Mtandaoni", 7(4), Januari/Februari 2004. Ilirejeshwa tarehe 30 Desemba 2007

Wikimedia Foundation. 2010.

  • Leon Powe
  • Barh Azoum

Angalia kamusi zingine:

    Jukwaa la mtandao- Kifurushi cha programu cha phpBB Internet Forum, mojawapo ya vifurushi maarufu vya jukwaa… Wikipedia

    Historia ya mazingira halisi ya kujifunza miaka ya 1990- Katika historia ya mazingira ya ujifunzaji mtandaoni, miaka ya 1990 ilikuwa wakati wa ukuaji, hasa kutokana na ujio wa kompyuta ya bei nafuu na ya mtandao.1990s1990* Formal Systems Inc. ya Princeton, NJ, Marekani inatanguliza Tathmini ya msingi ya DOS… … Wikipedia

    KAHAWA- Uso kwa Uso Uso kwa Uso wa Mazingira ya Kielimu Wasanidi Programu/Muungano wa LEAD Toleo thabiti 5.0 / Juni 2010 Mfumo wa Uendeshaji Jukwaa tofauti … Wikipedia

    Uingizaji wa mazungumzo- ni kipengele kinachotumiwa na wateja wengi wa barua pepe, ubao wa matangazo, vikundi vya habari, au mijadala ya Mtandao ambapo programu humsaidia mtumiaji kwa kupanga ujumbe katika makundi. Ujumbe kwa kawaida hupangwa kwa kuonekana katika daraja kulingana na mada. Seti ya jumbe zilizowekwa kwenye vikundi... ... Wikipedia

    Slashdot- Picha ya skrini ya URL ya ukurasa kuu wa Slashdot.org slashdot.org Slogan News kwa wajinga. Mambo muhimu...Wikipedia

    MediaWiki- nafasi ya majina inaelekezwa kwingine hapa. Kwa usaidizi kuhusu nafasi ya majina ya MediaWiki kwenye Wikipedia, angalia Help:MediaWiki namespace. Kwa maelezo ya jumla kuhusu nafasi za majina za Wikipedia, angalia Wikipedia:Nafasi ya majina. Ukurasa wa Majadiliano na ukurasa wa mazungumzo wa MediaWiki uelekeze kwingine hapa. Kwa... ... Wikipedia

    Mawasiliano ya kompyuta- Kwa matumizi mengine, angalia CMC (disambiguation). Mawasiliano ya upatanishi wa kompyuta (CMC) inafafanuliwa kama shughuli yoyote ya mawasiliano ambayo hutokea kwa kutumia kompyuta mbili au zaidi zilizo na mtandao. Ingawa neno hilo kijadi limerejelea wale… … Wikipedia

    Ulinganisho wa programu ya wiki- Majedwali yafuatayo yanalinganisha maelezo ya jumla na ya kiufundi kwa idadi ya vifurushi vya programu za wiki. Yaliyomo 1 Maelezo ya jumla 2 Hadhira inayolengwa 3 Sifa 1 4 Vipengele 2 … Wikipedia

    Uandishi wa anga wa kitaaluma- ni neno lililobuniwa na mwanasayansi tambuzi Stevan Harnad akielezea mseto wa barua pepe nyingi na kumbukumbu ya wavuti iliyounganishwa na mada kama vile kikundi cha habari, orodha ya barua pepe za kielektroniki, hypermail, mtandao wa habari au jukwaa la mtandao, lililounganishwa na kupangwa kwa tarehe,… … Wikipedia

    Programu shirikishi ya kufanya maamuzi- Programu ya kufanya maamuzi shirikishi (CDM) ni programu-tumizi au moduli inayoratibu kazi na vipengele vinavyohitajika ili kufikia maamuzi ya pamoja kwa wakati, na kuwawezesha washikadau wote husika kushiriki katika mchakato. ... ... Wikipedia

Hivi majuzi nilijaribu pthreads na nilishangaa - ni kiendelezi ambacho kinaongeza uwezo wa kufanya kazi na nyuzi nyingi za kweli katika PHP. Hakuna kuiga, hakuna uchawi, hakuna bandia - kila kitu ni kweli.



Ninazingatia kazi kama hiyo. Kuna dimbwi la kazi ambazo zinahitaji kukamilishwa haraka. PHP ina zana zingine za kusuluhisha shida hii, hazijatajwa hapa, kifungu ni kuhusu pthreads.



Threads ni nini

Ni hayo tu! Naam, karibu kila kitu. Kwa kweli, kuna jambo ambalo linaweza kumkasirisha msomaji mdadisi. Hakuna kati ya hii inayofanya kazi kwenye PHP ya kawaida iliyojumuishwa na chaguo-msingi. Ili kufurahia usomaji mwingi, lazima uwezeshe ZTS (Zend Thread Safety) katika PHP yako.

Mpangilio wa PHP

Ifuatayo, PHP na ZTS. Usijali tofauti kubwa katika muda wa utekelezaji ikilinganishwa na PHP bila ZTS (sekunde 37.65 vs 265.05), sikujaribu kujumuisha usanidi wa PHP. Katika kesi bila ZTS, nina XDebug kuwezeshwa kwa mfano.


Kama unavyoona, unapotumia nyuzi 2, kasi ya utekelezaji wa programu ni takriban mara 1.5 kuliko ilivyo kwa nambari ya mstari. Wakati wa kutumia nyuzi 4 - mara 3.


Unaweza kutambua kwamba ingawa processor ni 8-msingi, wakati wa utekelezaji wa programu ulibakia karibu bila kubadilika ikiwa nyuzi zaidi ya 4 zilitumika. Inaonekana kwamba hii ni kutokana na ukweli kwamba processor yangu ina cores kimwili 4. Kwa uwazi, nimeonyesha sahani kwa namna ya mchoro.


Muhtasari

Katika PHP, inawezekana kufanya kazi kwa umaridadi na usomaji mwingi kwa kutumia kiendelezi cha pthreads. Hii inatoa ongezeko kubwa la tija.

Lebo: Ongeza vitambulisho

Wakati mwingine inakuwa muhimu kufanya vitendo kadhaa wakati huo huo, kwa mfano, kuangalia mabadiliko katika meza moja ya database na kufanya marekebisho kwa mwingine. Zaidi ya hayo, ikiwa moja ya shughuli (kwa mfano, kuangalia mabadiliko) inachukua muda mwingi, ni dhahiri kwamba utekelezaji wa mfululizo hautahakikisha kusawazisha rasilimali.

Ili kutatua tatizo la aina hii, programu hutumia multithreading - kila operesheni huwekwa kwenye thread tofauti na kiasi kilichotengwa cha rasilimali na hufanya kazi ndani yake. Kwa njia hii, kazi zote zitakamilika tofauti na kwa kujitegemea.

Ingawa PHP haiungi mkono usomaji mwingi, kuna njia kadhaa za kuiga, ambazo zitajadiliwa hapa chini.

1. Kuendesha nakala kadhaa za hati - nakala moja kwa kila operesheni

//woman.php ikiwa (!isset($_GET["thread"])) (mfumo("wget ​​​​http://localhost/woman.php?thread=make_me_happy"); mfumo("wget ​​​​http: //localhost/ woman.php?thread=make_me_rich"); ) elseif ($_GET["thread"] == "make_me_happy") ( make_her_happy(); ) elseif ($_GET["thread"] == "make_me_rich" ) (tafuta_mwingine_moja();)

Tunapotekeleza hati hii bila vigezo, inaendesha nakala zake mbili kiotomatiki, ikiwa na vitambulisho vya utendakazi ("thread=make_me_happy" na "thread=make_me_rich"), ambayo huanzisha utendakazi wa utendakazi unaohitajika.

Kwa njia hii tunafikia matokeo yaliyohitajika - shughuli mbili zinafanywa wakati huo huo - lakini hii, bila shaka, sio multithreading, lakini tu crutch ya kufanya kazi wakati huo huo.

2. Njia ya Jedi - kwa kutumia ugani wa PCNTL

PCNTL ni kiendelezi kinachokuruhusu kufanya kazi kikamilifu na michakato. Mbali na usimamizi, inasaidia kutuma ujumbe, kuangalia hali na kuweka vipaumbele. Hivi ndivyo hati iliyotangulia kutumia PCNTL inavyoonekana:

$ pid = pcntl_fork(); ikiwa ($pid == 0) ( make_her_happy(); ) elseif ($pid > 0) ( $pid2 = pcntl_fork(); ikiwa ($pid2 == 0) ( find_another_one(); ) )

Inaonekana inachanganya sana, wacha tuipitie mstari kwa mstari.

Katika mstari wa kwanza, tuna "uma" mchakato wa sasa (uma ni kunakili mchakato wakati wa kuhifadhi maadili ya anuwai zote), tukigawanya katika michakato miwili (ya sasa na ya mtoto) inayoendesha sambamba.

Ili kuelewa ikiwa kwa sasa tuko katika mchakato wa mtoto au mama, kitendakazi cha pcntl_fork kinarudisha 0 kwa mtoto na kitambulisho cha mchakato kwa mama. Kwa hiyo, katika mstari wa pili, tunaangalia $pid, ikiwa ni sifuri, basi tuko katika mchakato wa mtoto - tunafanya kazi, vinginevyo, sisi ni mama (mstari wa 4), basi tunaunda mchakato mwingine na. vile vile kufanya kazi.

Mchakato wa utekelezaji wa hati:

Kwa hivyo, script huunda michakato 2 zaidi ya mtoto, ambayo ni nakala zake na ina vigezo sawa na maadili sawa. Na kwa kutumia kitambulisho kilichorejeshwa na kazi ya pcntl_fork, tunapata ni thread gani ambayo tuko ndani na kufanya vitendo muhimu.