{"id":53530,"date":"2019-12-04T00:00:00","date_gmt":"2019-12-03T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel"},"modified":"2020-02-18T14:01:26","modified_gmt":"2020-02-18T11:01:26","slug":"uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel","title":{"rendered":"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/a4bfc8a3f7f7de0298623b1bf9dcfc54.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPHP \u00f6kos\u00fcsteemis on hetkel kaks konnektorit Tarantooli serveriga t\u00f6\u00f6tamiseks \u2013 ametlik PECL laiendus <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool-php\">tarantool\/tarantool-php<\/a><\/noindex>, mis on kirjutatud C-s, ja <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool-php\/client\">tarantool-php\/client<\/a><\/noindex>, mis on kirjutatud PHP-s. Mina olen selle viimase autor.<\/p>\n<p>Selles artiklis soovin jagada tulemusi m\u00f5lema teegi j\u00f5udluse testimisest ja n\u00e4idata, kuidas minimaalsete koodimuudatustega saab saavutada 3-5% j\u00f5udluse kasvu (<i>s\u00fcnthetikates testides!<\/i>).<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Mida me testime?<\/h2>\n<p>\nTestime \u00fclalmainitud <i>s\u00fcnkrone<\/i> konektoreid, k\u00e4ivitatuna as\u00fcnkroonselt, paralleelselt ja as\u00fcnkroonselt-paralleelselt. \ud83d\ude42 Samuti ei soovi me puutuda konnektorite enda koodi. Hetkel on saadaval mitmeid laiendusi, mis aitavad soovitud eesm\u00e4rki saavutada:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/swoole\/swoole-src\">Swoole<\/a><\/noindex> \u2015 k\u00f5rge j\u00f5udlusega as\u00fcnkroonne raamistik PHP jaoks. Seda kasutavad sellised internetigigandid nagu Alibaba ja Baidu. Versioonist 4.1.0 on ilmunud maagiline meetod <i>SwooleRuntime::enableCoroutine()<\/i>, mis v\u00f5imaldab \"\u00fche koodireaga muuta PHP s\u00fcnkrone v\u00f5rgu raamatukogud as\u00fcnkroonseteks\".\n<\/li>\n<li>Async \u2015 kuni hiljuti oli see \u00fcsna lootustandev laiendus as\u00fcnkroonses t\u00f6\u00f6tamises PHP-s. Miks kuni hiljuti? Kahjuks, teadmata p\u00f5hjusel, on autor kustutanud repositooriumi ja projekti tulevik on ebaselge. Peame kasutama <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dreamsxin\/ext-async\">\u00fchte<\/a><\/noindex> \u0438\u0437 \u0444\u043e\u0440\u043a\u043e\u0432. \u041a\u0430\u043a \u0438 Swoole, \u044d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u043a\u0438\u043c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0440\u0443\u043a\u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0431\u0440\u044e\u043a\u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u043e\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 TCP \u0438 TLS \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0438\u0445 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0446\u0438\u044e &#171;<i>async.tcp = 1<\/i>&#171;.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/krakjoe\/parallel\">Parallel<\/a><\/noindex> \u2015 \u00fcsna uus laiendus tuntud Joe Watkinselt, kes on selliste raamatukogude autor nagu phpdbg, apcu, pthreads, pcov, uopz. See laiendus pakub API-d mitme l\u00f5imega t\u00f6\u00f6tamiseks PHP-s ja positsioneeritakse kui pthreadsi asendaja. Oluline piirang raamatukogus on see, et see t\u00f6\u00f6tab ainult ZTS (Zend Thread Safe) versiooniga PHP.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>Kuidas me testime?<\/h2>\n<p>\n\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Tarantool&#8217;\u0430 \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0436\u0443\u0440\u043d\u0430\u043b\u043e\u043c \u0443\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 (<i>wal_mode = none<\/i>) ja suurendatud v\u00f5rgupuhvri (<i>readahead = 1 * 1024 * 1024<\/i>). Esimene valik v\u00e4listab t\u00f6\u00f6 koos kettaga, teine \u2014 v\u00f5imaldab lugeda rohkem p\u00e4ringuid operatsioonis\u00fcsteemi puhvrisse ja seel\u00e4bi minimeerida s\u00fcsteemik\u00f5nesid.<\/p>\n<p>Benchmarkide jaoks, mis t\u00f6\u00f6tavad andmete (sisestamine, kustutamine, lugemine jne) kallal, luuakse enne testimise algust memtx-ruum, kus primaarindeksi v\u00e4\u00e4rtused genereeritakse j\u00e4rjestatud t\u00e4isarvude genereerija abil (sequence).<br \/>\nDDL ruum n\u00e4eb v\u00e4lja j\u00e4rgmiselt:<\/p>\n<pre><code class=\"lua\">space = box.schema.space.create(config.space_name, {id = config.space_id, temporary = true})\nspace:create_index('primary', {type = 'tree', parts = {1, 'unsigned'}, sequence = true})\nspace:format({{name = 'id', type = 'unsigned'}, {name = 'name', type = 'string', is_nullable = false}})<\/code><\/pre>\n<p>\nVajadusel t\u00e4idetakse ruum enne testimise k\u00e4ivitamist 10,000 kursoriga kujul<\/p>\n<pre><code class=\"lua\">{id, \"tupl\u0435_\"}<\/code><\/pre>\n<p>\nKursoritele p\u00e4\u00e4seb ligi juhusliku v\u00f5tme v\u00e4\u00e4rtuse kaudu.<\/p>\n<p>Ise testimine esindab \u00fchte p\u00e4ringut serverisse, mis t\u00e4idetakse 10,000 korda (revolutsioonid), mis omakorda t\u00e4idetakse iteratsioonides. Iteratsioonid korduvad, kuni k\u00f5ik ajavahemikud 5 iteratsiooni vahel j\u00e4\u00e4vad lubatud 3%* veapiiri sisse. P\u00e4rast seda v\u00f5etakse keskmine tulemus. Iteratsioonide vahel on 1-sekundiline paus, et v\u00e4ltida protsessori throttling'ut. Lua pr\u00fcgikogu kogumismoodul on iga iteratsiooni eel v\u00e4lja l\u00fclitatud ja sunnitakse k\u00e4ivituma p\u00e4rast selle l\u00f5petamist. PHP-protsess k\u00e4ivitatakse ainult nendega, mis on testimise jaoks vajalikud laiendused, koos v\u00e4ljundite puhversalviga ja ilma pr\u00fcgikogu kogumismoodulita.<\/p>\n<p><i>* Revolutsioonide, iteratsioonide ja veapiiri v\u00e4\u00e4rtust saab muuta testimise seadetes.<\/i><\/p>\n<h2>Testikeskkond<\/h2>\n<p>\n\u041e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u044b\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u043d\u0430 MacBookPro (2015), \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u2014 Fedora 30 (\u0432\u0435\u0440\u0441\u0438\u044f \u044f\u0434\u0440\u0430 5.3.8-200.fc30.x86_64). Tarantool \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0441\u044f \u0432 \u0434\u043e\u043a\u0435\u0440\u0435 \u0432 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c &#171;<code>--network host\"<\/code>.<\/p>\n<p>Pakettide versioonid:<\/p>\n<p>Tarantool: 2.3.0-115-g5ba5ed37e<br \/>\nDocker: 19.03.3, build a872fc2f86<br \/>\nPHP: 7.3.11 (cli) (kokku pandud: 22. okt 2019 08:11:04)<br \/>\ntarantool\/client: 0.6.0<br \/>\nrybakit\/msgpack: 0.6.1<br \/>\next-tarantool: 0.3.2 (+ patch for 7.3)*<br \/>\next-msgpack: 2.0.3<br \/>\next-async: 0.3.0-8c1da46<br \/>\next-swoole: 4.4.12<br \/>\next-parallel: 1.1.3<\/p>\n<p>* <i>Kahjuks ametlik konektor ei toimi PHP versiooni &gt; 7.2 puhul. PHP 7.3-l laienduse kompileerimiseks ja k\u00e4ivitamiseks tuli kasutada <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool-php\/pull\/148\/files\">patchiga<\/a><\/noindex>.<\/i><\/p>\n<h2>tulemused n\u00e4itasid ainult nelja ebaolulise koodibloki kattuvust, mis olid tingitud POSIX ja ANSI C n\u00f5uetest.<\/h2>\n<p><\/p>\n<h4>S\u00fcnkroonsusre\u017eiim<\/h4>\n<p>\nTarantooli protokoll kasutab s\u00f5numite serialiseerimiseks binaarset formaati. <noindex><a rel=\"nofollow\" href=\"https:\/\/msgpack.org\/\">MessagePack<\/a><\/noindex> PECL konektoris on serialiseerimine peidetud s\u00fcgavale raamatukogu s\u00fcgavustesse ja userland-koodist ei saa kiirendust m\u00f5jutada <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool-php\/issues\/89\">pole v\u00f5imalik.<\/a><\/noindex>PHP-l p\u00f5hinev konnektor pakub vastupidiselt v\u00f5imaluse kohandada kodeerimisprotsessi standardse kodeerija laiendamise v\u00f5i oma teostuse kasutamise kaudu. Karbis on saadaval kaks kodeerijat, millest \u00fcks p\u00f5hineb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/msgpack\/msgpack-php\/\">msgpack\/msgpack-php<\/a><\/noindex> (ametlik MessagePack PECL laiendus), teine - <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rybakit\/msgpack.php\">rybakit\/msgpack<\/a><\/noindex> (puhta PHP-l p\u00f5hinev).<\/p>\n<p>Enne konnektorite v\u00f5rdlemist m\u00f5\u00f5dame MessagePack kodeerijate j\u00f5udlust PHP konnektori jaoks ja edasistes testides kasutame seda, mis n\u00e4itab parimat tulemust:<\/p>\n<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/a293ec51cb8bf18cb88df2dc276142c4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKuigi PHP versioon (Pure) j\u00e4\u00e4b kiiruselt PECL laiendusele alla, soovitaksin ma siiski reaalses projektis kasutada just <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rybakit\/msgpack.php\">rybakit\/msgpack<\/a><\/noindex>, kuna ametlikus MessagePack laienduses on formaadi spetsifikatsioon teostatud vaid osaliselt (n\u00e4iteks ei toeta see kasutaja defineeritud andmet\u00fc\u00fcpe, ilma milleta te ei saa kasutada Decimal - uut andmet\u00fc\u00fcpi, mis ilmus Tarantool 2.3) ja sellel on mitmeid teisi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/msgpack\/msgpack-php\/issues\">probleemide<\/a><\/noindex> (sealhulgas \u00fchilduvusprobleemid PHP 7.4-ga). Kokkuv\u00f5ttes n\u00e4eb projekt aga maha j\u00e4etud.<\/p>\n<p>Nii et m\u00f5\u00f5dame konnektorite j\u00f5udlust s\u00fcnkroonses re\u017eiimis:<\/p>\n<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/d8c5765956c62b927014ec4f26547820.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNagu jooniselt n\u00e4ha, n\u00e4itab PECL konnektor (Tarantool) paremat j\u00f5udlust v\u00f5rreldes PHP-l p\u00f5hineva konnektoriga (Client). Kuid see ei ole \u00fcllatav, arvestades, et viimane, lisaks sellele, et on teostatud aeglasemas keeles, teeb p\u00f5him\u00f5tteliselt rohkem t\u00f6\u00f6d: iga kutsumise ajal luuakse uus objekt <i>P\u00e4ring<\/i> ja <i>Vastus<\/i> (Selecti puhul - veel ka <i>Criteria<\/i>, ja Update\/Upsert puhul - <i>Operations<\/i>), eraldi entiteedid <i>\u00dchendus<\/i>, <i>Packer <\/i>ja <i>Handler<\/i> lisavad samuti \u00fcleliigset koormust. Kindlasti tuleb paindlikkuse eest maksta. \u00dcldiselt n\u00e4itab PHP t\u00f5lkija head j\u00f5udlust, kuigi vahe on olemas, on see ebaoluline ja v\u00f5ib olla veelgi v\u00e4iksem, kui kasutada preloading PHP 7.4-s, r\u00e4\u00e4kimata JIT-st PHP 8-s.<\/p>\n<p>Liigume edasi. Tarantool 2.0-s lisandus SQL toetus. Proovime teostada Select, Insert, Update ja Delete toimingud SQL-protokolli kasutades ning v\u00f5rreldame tulemusi noSQL (binaarsete) ekvivalentidega:<\/p>\n<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/cbc61697d9670dc7384c25de3c63c8d5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSQL-i tulemused ei ole kuigi muljetavaldavad (meenutan, et me veel testime s\u00fcnkroonset re\u017eiimi). Siiski, ma ei hakkaks selle p\u00e4rast enne aega muretsema, SQL toetamine on endiselt aktiivses arenduses (relatiivselt hiljuti lisati n\u00e4iteks <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool\/commit\/ff2091e09b5a7e9b7aa3f3e996dc7a06189889f3\">prepared statements<\/a><\/noindex>) ja, l\u00e4htudes nimekirjast <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool\/issues?q=is%3Aissue+is%3Aopen+sql+label%3Aperformance\">issues<\/a><\/noindex>, ootel on SQL mootoril veel mitmed optimeerimised.<\/p>\n<h4>Async<\/h4>\n<p>\nNoh, vaatame n\u00fc\u00fcd, kuidas Async laiendus saab aidata meil eelnevaid tulemusi parandada. As\u00fcnkroonsete programmeerimise jaoks pakub laiendus API kurooide p\u00f5hjal (coroutines), mille kasutamisest me ka l\u00e4htume. Katsetamise k\u00e4igus selgub, et meie keskkonna optimaalne kurooide arv on 25:<\/p>\n<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/4ceefef522b3bd91db7327c609ddda09.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u201eJaotame\u201c 10 000 operatsiooni 25 kurooidi vahel ja vaatame, mis saame:<\/p>\n<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/916e461dfa5d1be08317e3703c267afe.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOperatsioonide arv sekundis kasvas enam kui 3 korda <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool-php\/client\">tarantool-php\/client<\/a><\/noindex>!<\/p>\n<p>Kahjuks ei k\u00e4ivitunud PECL konnektor ega ext-async.<\/p>\n<p>Aga mis SQL-iga?<\/p>\n<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/39a0da214b893a217d9ae4eae23c4168.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKuidas n\u00e4ha, et as\u00fcnkroonses re\u017eiimis on erinevus binaarprotokolli ja SQL-i vahel j\u00e4\u00e4b m\u00f5\u00f5tmisvea piiresse.<\/p>\n<h4>Swoole<\/h4>\n<p>\nUurime uuesti optimaalset kurooide arvu, seekord juba Swoole'i jaoks:<br \/>\n<img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/70d5bb26b91b7459e2f0b80a3fab7e06.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPeatume 25 peal. Korrame sama trikki nagu Async laiendusega \u2013 jagame 10 000 operatsiooni 25 kurooidi vahel. Lisaks sellele lisame veel \u00fche testi, kus jagame kogu t\u00f6\u00f6 kaheks protsessiks (st iga protsess teeb 5 000 operatsiooni 25 kurooidi vahel). Protsessid luuakse l\u00e4bi <i>SwooleProcess<\/i>. <\/p>\n<p>Tulemused:<\/p>\n<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/55f55d2661aa43ca3b6641abfff078a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSwoole n\u00e4itab veidi madalamat tulemust v\u00f5rreldes Asynciga \u00fche protsessi k\u00e4ivitamisel, kuid kahe protsessiga muutub olukord kardinaalselt (arv 2 ei ole juhuslik, mu masinas n\u00e4itasid just 2 protsessi parimat tulemust).<\/p>\n<p><i>Muide, Async laiendusel on ka API protsessidega t\u00f6\u00f6tamiseks, kuid ma ei m\u00e4rganud seal mingit erinevust \u00fche v\u00f5i mitme protsessi k\u00e4ivitamisel (pole v\u00e4listatud, et tegin kuskil vea).<\/i><\/p>\n<p>SQL vs binaarprotokoll:<\/p>\n<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/dfa56be01ebba25edbec492838112778.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNagu Asynciga, nii ka as\u00fcnkroonses re\u017eiimis binaarne ja SQL-operatsioonide vahel ei ole mingit erinevust.<\/p>\n<h4>Parallel<\/h4>\n<p>\nKuna Parallel laiendus ei k\u00e4sitle kurooide, vaid l\u00f5ime, m\u00f5\u00f5dame optimaalse paralleelsete l\u00f5imede arvu:<\/p>\n<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/acc6796d5731b0402ad6323e0f5bf38f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSee on 16 mu masinas. K\u00e4ivitame konnektorite b\u00e4nshmarkid 16 paralleelse l\u00f5ime peal:<\/p>\n<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/03210b70f15e445fdd311a17c1034290.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNagu n\u00e4ete, on tulemus isegi parem kui as\u00fcnkroonsete laienduste puhul (v\u00e4lja arvatud Swoole kahe protsessiga). Pange t\u00e4hele, et PECL konnektori puhul on Update ja Upsert operatsioonide kohal t\u00fchjus. See on seotud asjaoluga, et need operatsioonid kukkusid veaga v\u00e4lja \u2013 ei oska \u00f6elda, kas see oli ext-paralleli, ext-tarantooli v\u00f5i nende m\u00f5lema s\u00fc\u00fc.<\/p>\n<p>N\u00fc\u00fcd v\u00f5rrelge SQL j\u00f5udlust:<\/p>\n<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/4be3025b424ad6485dc96968ce224bf5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKas olete t\u00e4hele pannud sarnasust graafikuga konnektorite jaoks, mis on k\u00e4ivitatud s\u00fcnkroonselt?<\/p>\n<h4>Kokkuv\u00f5ttes<\/h4>\n<p>\nJa l\u00f5puks viime k\u00f5ik tulemused \u00fcheks graafikuks, et n\u00e4ha \u00fcldpilti testitud laiendite kohta. Lisame graafikule vaid \u00fche uue testi, mida me veel teinud ei ole - k\u00e4ivitame Async koorutid on paralleelselt Parallel* abil. Idea sellest, kuidas k\u00e4ivitada eelpoolmainitud laiendeid, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/krakjoe\/parallel\/issues\/25\">on juba arutatud<\/a><\/noindex> autorite poolt, kuid konsensust pole saavutatud, tuleb seda teha ise. <\/p>\n<p><i>* Swoole koorutite k\u00e4ivitamine paralleelselt ei \u00f5nnestunud, tundub, et need laiendid ei ole \u00fchilduvad.<\/i><\/p>\n<p>Nii et l\u00f5ppkokkuv\u00f5tte tulemused:<\/p>\n<p><img decoding=\"async\" alt=\"Kiirendame PHP-konnektoreid Tarantooliga Async, Swoole ja Parallel abil\" src=\"\/wp-content\/uploads\/2019\/12\/85478d9dd5d8bd166f4aa91963c1af95.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>L\u00f5petuseks<\/h2>\n<p>\nMinu arvates olid tulemused \u00fcsna muljetavaldavad ja mul on mingi p\u00f5hjus kindel olla, et see ei ole veel piir! Kas see on teile reaalses projektis vajalik, otsustate t\u00e4ielikult teie, vaid \u00fctlen, et minu jaoks oli see huvitav katse, mis v\u00f5imaldas hinnata, kui palju saab \u00abv\u00e4lja pigistada\u00bb s\u00fcnkroonsest TCP-\u00fchendist minimaalsete pingutustega. Kui teil on ideid tulemusanal\u00fc\u00fctika parandamiseks - vaataksin r\u00f5\u00f5muga teie pull-requesti. Kogu kood koos k\u00e4ivitamisjuhiste ja tulemustega on avaldatud eraldi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool-php\/benchmarks\">hoidlad<\/a><\/noindex>.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/478336\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 PHP \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c Tarantool \u2015 \u044d\u0442\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 PECL tarantool\/tarantool-php, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u043d\u0430 \u0421, \u0438 tarantool-php\/client, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 PHP. \u042f \u044f\u0432\u043b\u044f\u044e\u0441\u044c \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0435\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043a\u043e\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-53530","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 PHP.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0423\u0441\u043a\u043e\u0440\u044f\u0435\u043c PHP-\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f Tarantool \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Async, Swoole \u0438 Parallel | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 PHP.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-03T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:01:26+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kiirendame PHP-\u00fchendusi Tarantooliga Async, Swoole ja Parallel abil | ProHoster","description":"PHP \u00f6kos\u00fcsteemis.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0423\u0441\u043a\u043e\u0440\u044f\u0435\u043c PHP-\u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u0440\u044b \u0434\u043b\u044f Tarantool \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Async, Swoole \u0438 Parallel | ProHoster","og:description":"\u0412 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 PHP.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-03T21:00:00+00:00","article:modified_time":"2020-02-18T11:01:26+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"53530","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 07:46:24","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:23:55","updated":"2026-01-24 07:46:24","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/53530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=53530"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/53530\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=53530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=53530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=53530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}