{"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\/no\/blog\/administrirovanie\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel","title":{"rendered":"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/a4bfc8a3f7f7de0298623b1bf9dcfc54.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI \u00f8kosystemet PHP eksisterer det for \u00f8yeblikket to koblingsprogrammer for \u00e5 jobbe med Tarantool-serveren \u2013 dette er den offisielle PECL-utvidelsen <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool-php\">tarantool\/tarantool-php<\/a><\/noindex>, skrevet i C, og <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool-php\/client\">tarantool-php\/client<\/a><\/noindex>, skrevet i PHP. Jeg er forfatteren av den siste.<\/p>\n<p>I denne artikkelen \u00f8nsker jeg \u00e5 dele resultatene fra ytelsestesting av begge bibliotekene og vise hvordan man med minimale endringer i koden kan oppn\u00e5 en 3-5% \u00f8kning i ytelse (<i>p\u00e5 syntetiske tester!<\/i>).<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Hva skal vi teste?<\/h2>\n<p>\nVi skal teste de ovennevnte <i>synkrone<\/i> koblingsprogrammene, kj\u00f8rt asynkront, parallelt og asynkront-parallelt. \ud83d\ude42 Vi \u00f8nsker heller ikke \u00e5 r\u00f8re ved koden til koblingsprogrammene selv. For \u00f8yeblikket er det tilgjengelig flere utvidelser som kan oppn\u00e5 det \u00f8nskede:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/swoole\/swoole-src\">Swoole<\/a><\/noindex> \u2013 et h\u00f8ytytende asynkront rammeverk for PHP. Brukes av slike internett-giganter som Alibaba og Baidu. Fra versjon 4.1.0 ble det introdusert en magisk metode <i>SwooleRuntime::enableCoroutine()<\/i>, som lar \u00abbare en linje med kode konvertere synkrone nettbiblioteker til asynkrone\u00bb.\n<\/li>\n<li>Async \u2013 inntil nylig var det en ganske lovende utvidelse for asynkron arbeid i PHP. Hvorfor inntil nylig? Dessverre, av en grunn jeg ikke kjenner, har forfatteren fjernet repositoriet, og prosjektets videre skjebne er uklar. Vi m\u00e5 bruke <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/dreamsxin\/ext-async\">en<\/a><\/noindex> fra forks. Som Swoole lar dette tillegget deg enkelt aktivere asynkronitet i bukser ved \u00e5 erstatte standard TCP- og TLS-str\u00f8mmer med deres asynkrone versjoner. Dette gj\u00f8res via alternativet &#171;<i>async.tcp = 1<\/i>'.\n<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/krakjoe\/parallel\">Parallel<\/a><\/noindex> \u2013 en relativt ny utvidelse fra den kjente Joe Watkins, skaperen av biblioteker som phpdbg, apcu, pthreads, pcov, uopz. Utvidelsen gir et API for flertr\u00e5det arbeid i PHP og posisjoneres som en erstatning for pthreads. En betydelig begrensning ved biblioteket er at det kun fungerer med ZTS (Zend Thread Safe) versjonen av PHP.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>Hvordan skal vi teste?<\/h2>\n<p>\nLa oss starte en instans av Tarantool uten forh\u00e5ndsopptakslogg (<i>wal_mode = none<\/i>) og med en \u00f8kt nettverksbuffer (<i>readahead = 1 * 1024 * 1024<\/i>). Det f\u00f8rste alternativet utelukker diskoperasjoner, mens det andre gir mulighet til \u00e5 lese flere foresp\u00f8rseler fra operativsystemets buffer og dermed minimere antall systemanrop.<\/p>\n<p>For benchmarks that work with data (insertion, deletion, reading, etc.), a memtx-space will be (re)created before the benchmark starts, in which the values of the primary index are generated by a sequential integer value generator (sequence).<br \/>\nThe DDL of the space looks like this:<\/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>\nIf necessary, before running the benchmark, the space is filled with 10,000 tuples of the form<\/p>\n<pre><code class=\"lua\">{id, \"tuple_\"}<\/code><\/pre>\n<p>\nAccess to tuples is performed based on a random key value.<\/p>\n<p>The benchmark itself represents a single request to the server, which is performed 10,000 times (revolutions), which, in turn, are carried out in iterations. The iterations are repeated until all time deviations between 5 iterations fall within an acceptable error margin of 3%*. After that, an average result is taken. There is a 1-second pause between iterations to prevent the CPU from throttling. The Lua garbage collector is disabled before each iteration and forced to run after it is completed. The PHP process is started only with the necessary extensions for the benchmark, with output buffering enabled and garbage collection disabled.<\/p>\n<p><i>* The number of revolutions, iterations, and the error margin threshold can be changed in the benchmark settings.<\/i><\/p>\n<h2>Testing environment<\/h2>\n<p>\nResultatene publisert nedenfor ble utf\u00f8rt p\u00e5 en MacBook Pro (2015), operativsystem \u2014 Fedora 30 (kjerneversjon 5.3.8-200.fc30.x86_64). Tarantool ble kj\u00f8rt i Docker med parameteren &#171;<code>--network host\"<\/code>.<\/p>\n<p>Package versions:<\/p>\n<p>Tarantool: 2.3.0-115-g5ba5ed37e<br \/>\nDocker: 19.03.3, build a872fc2f86<br \/>\nPHP: 7.3.11 (cli) (built: Oct 22 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>Unfortunately, the official connector does not work with PHP version &gt; 7.2. To compile and run the extension on PHP 7.3, it was necessary to use <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool-php\/pull\/148\/files\">patch<\/a><\/noindex>.<\/i><\/p>\n<h2>Resultater<\/h2>\n<p><\/p>\n<h4>Synchronous mode<\/h4>\n<p>\nTarantool's protocol uses a binary format <noindex><a rel=\"nofollow\" href=\"https:\/\/msgpack.org\/\">MessagePack<\/a><\/noindex> for serializing messages. In the PECL connector, serialization is deeply hidden within the library and it is not possible to affect the encoding process from userland code <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool-php\/issues\/89\">.<\/a><\/noindex>. En connector i ren PHP gir mulighet for \u00e5 tilpasse kodingsprosessen ved \u00e5 utvide den standard koderen eller ved \u00e5 bruke sin egen implementering. Ut av boksen er to kodere tilgjengelige, en basert p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/msgpack\/msgpack-php\/\">msgpack\/msgpack-php<\/a><\/noindex> (offisiell MessagePack PECL-utvidelse), den andre er basert p\u00e5 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rybakit\/msgpack.php\">rybakit\/msgpack<\/a><\/noindex> (i ren PHP).<\/p>\n<p>F\u00f8r vi sammenligner tilkoblerne, la oss m\u00e5le ytelsen til MessagePack-kodere for PHP-tilkobleren, og i de videre testene vil vi bruke den som gir best resultat:<\/p>\n<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/a293ec51cb8bf18cb88df2dc276142c4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSelv om PHP-versjonen (Pure) er tregere enn PECL-utvidelsen, vil jeg i virkelige prosjekter fortsatt anbefale \u00e5 bruke nettopp <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/rybakit\/msgpack.php\">rybakit\/msgpack<\/a><\/noindex>, fordi i den offisielle MessagePack-utvidelsen er spesifikasjonen for formatet bare delvis implementert (for eksempel er det ikke st\u00f8tte for brukerdefinerte datatyper, uten hvilken du ikke vil kunne bruke Decimal \u2014 den nye datatypen introdusert i Tarantool 2.3) og har en rekke andre <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/msgpack\/msgpack-php\/issues\">problemer<\/a><\/noindex> (inkludert kompatibilitetsproblemer med PHP 7.4). Generelt ser prosjektet ut som om det er forlatt.<\/p>\n<p>S\u00e5, la oss m\u00e5le ytelsen til tilkoblerne i synkront modus:<\/p>\n<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/d8c5765956c62b927014ec4f26547820.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSom det fremg\u00e5r av grafen, viser PECL-tilkobleren (Tarantool) bedre ytelse sammenlignet med tilkobleren i PHP (Client). Men det er ikke overraskende, gitt at sistnevnte, i tillegg til at det er implementert i et tregere spr\u00e5k, ogs\u00e5 gj\u00f8r mer arbeid: ved hvert kall opprettes et nytt objekt <i>Request<\/i> og <i>Response<\/i> (i tilfelle Select \u2014 ogs\u00e5 <i>Criteria<\/i>, og i tilfelle Update\/Upsert \u2014 <i>Operations<\/i>), separate entiteter <i>Connection<\/i>, <i>Packer <\/i>og <i>Handler<\/i> tilf\u00f8yer ogs\u00e5 overhead. Det er \u00e5penbart at fleksibilitet har sin pris. Likevel viser PHP-tolkeren god ytelse, selv om det er en forskjell, er den ikke betydelig, og kanskje vil den bli enda mindre med bruk av preloading i PHP 7.4, for ikke \u00e5 snakke om JIT i PHP 8.<\/p>\n<p>La oss g\u00e5 videre. Tarantool 2.0 fikk st\u00f8tte for SQL. La oss pr\u00f8ve \u00e5 utf\u00f8re Select-, Insert-, Update- og Delete-operasjoner ved hjelp av SQL-protokollen og sammenligne resultatene med noSQL (binariske) ekvivalenter:<\/p>\n<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/cbc61697d9670dc7384c25de3c63c8d5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSQL-resultatene er ikke s\u00e6rlig imponerende (jeg minner om at vi fortsatt tester synkront modus). Men jeg ville ikke blitt bekymret for dette for tidlig, ettersom SQL-st\u00f8tte fortsatt er under aktiv utvikling (relativt nylig, for eksempel, ble st\u00f8tte for <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool\/commit\/ff2091e09b5a7e9b7aa3f3e996dc7a06189889f3\">prepared statements<\/a><\/noindex>) lagt til, og if\u00f8lge listen <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool\/tarantool\/issues?q=is%3Aissue+is%3Aopen+sql+label%3Aperformance\">issues<\/a><\/noindex>, venter SQL-motoren en rekke optimaliseringer i fremtiden.<\/p>\n<h4>Asynkron<\/h4>\n<p>\nLa oss n\u00e5 se hvordan Async-utvidelsen kan hjelpe oss med \u00e5 forbedre resultatene ovenfor. For \u00e5 skrive asynkrone programmer gir utvidelsen et API basert p\u00e5 korutiner (coroutines), og det er det vi skal bruke. Gjennom eksperimentering finner vi ut at det optimale antallet korutiner for v\u00e5rt milj\u00f8 er 25:<\/p>\n<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/4ceefef522b3bd91db7327c609ddda09.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVi \"fordeler\" 10 000 operasjoner p\u00e5 25 korutiner og ser hva vi f\u00e5r:<\/p>\n<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/916e461dfa5d1be08317e3703c267afe.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAntallet operasjoner per sekund har \u00f8kt med mer enn tre ganger for <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool-php\/client\">tarantool-php\/client<\/a><\/noindex>!<\/p>\n<p>Det er trist, men PECL-kontakten klarte ikke \u00e5 starte med ext-async.<\/p>\n<p>Hva med SQL?<\/p>\n<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/39a0da214b893a217d9ae4eae23c4168.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSom du ser, i asynkront modus, er forskjellen mellom bin\u00e6rprotokollen og SQL innenfor marginene for feil.<\/p>\n<h4>Swoole<\/h4>\n<p>\nVi finner igjen det optimale antallet korutiner, n\u00e5 for Swoole:<br \/>\n<img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/70d5bb26b91b7459e2f0b80a3fab7e06.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nVi holder oss til 25. La oss gjenta det samme triks som med Async-utvidelsen \u2013 vi fordeler 10 000 operasjoner mellom 25 korutiner. I tillegg legger vi til en ny test hvor vi deler hele jobben p\u00e5 2 prosesser (det vil si hver prosess vil utf\u00f8re 5 000 operasjoner i 25 korutiner). Prosessene vil bli opprettet ved hjelp av <i>SwooleProcess<\/i>. <\/p>\n<p>Resultater:<\/p>\n<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/55f55d2661aa43ca3b6641abfff078a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSwoole viser en litt lavere ytelse sammenlignet med Async n\u00e5r det kj\u00f8res i \u00e9n prosess, men med 2 prosesser endres bildet radikalt (tallet 2 er ikke tilfeldig, p\u00e5 min maskin viste 2 prosesser det beste resultatet).<\/p>\n<p><i>Forresten, i Async-utvidelsen finnes det ogs\u00e5 et API for \u00e5 jobbe med prosesser, men jeg la ikke merke til noen forskjell i ytelsen fra \u00e5 kj\u00f8re benchmarkene i \u00e9n eller flere prosesser (det kan v\u00e6re jeg gjorde noe feil).<\/i><\/p>\n<p>SQL vs bin\u00e6rprotokoll:<\/p>\n<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/dfa56be01ebba25edbec492838112778.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAkkurat som med Async, blir forskjellen mellom bin\u00e6re og SQL-operasjoner utjevnet i asynkront modus.<\/p>\n<h4>Parallel<\/h4>\n<p>\nSiden Parallel-utvidelsen ikke handler om korutiner, men om tr\u00e5der, m\u00e5ler vi det optimale antallet parallelle tr\u00e5der:<\/p>\n<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/acc6796d5731b0402ad6323e0f5bf38f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nDet er 16 p\u00e5 min maskin. La oss kj\u00f8re benchmarkene for kontaktene med 16 parallelle tr\u00e5der:<\/p>\n<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/03210b70f15e445fdd311a17c1034290.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSom du ser, er resultatet til og med bedre enn med asynkrone utvidelser (unntatt Swoole som kj\u00f8rer p\u00e5 2 prosesser). Merk at for PECL-kontakten er det tomt ved oppdatering og upsert-operasjoner. Dette er relatert til at disse operasjonene feilet \u2013 jeg vet ikke om det er p\u00e5 grunn av ext-parallel, ext-tarantool eller begge.<\/p>\n<p>N\u00e5 sammenligner vi ytelsen for SQL:<\/p>\n<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/4be3025b424ad6485dc96968ce224bf5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLa oss se likheten med grafen for kontaktene som ble kj\u00f8rt synkront?<\/p>\n<h4>Alt tilsammen<\/h4>\n<p>\nOg til slutt, la oss samle alle resultatene i \u00e9n graf for \u00e5 se det totale bildet for de testede utvidelsene. Vi vil legge til \u00e9n ny test p\u00e5 grafen som vi ikke har gjort enn\u00e5 \u2015 vi vil kj\u00f8re Async-korutiner parallelt ved hjelp av Parallel*. Ideen om \u00e5 integrere de nevnte utvidelsene har allerede <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/krakjoe\/parallel\/issues\/25\">blitt diskutert<\/a><\/noindex> av forfatterne, men det ble aldri oppn\u00e5dd noen konsensus, s\u00e5 vi m\u00e5 gj\u00f8re det selv. <\/p>\n<p><i>* Det ble ikke mulig \u00e5 kj\u00f8re Swoole-korutiner med Parallel, disse utvidelsene ser ut til \u00e5 v\u00e6re inkompatible.<\/i><\/p>\n<p>S\u00e5, de endelige resultatene:<\/p>\n<p><img decoding=\"async\" alt=\"Vi akselererer PHP-tilkoblinger til Tarantool ved hjelp av Async, Swoole og Parallel\" src=\"\/wp-content\/uploads\/2019\/12\/85478d9dd5d8bd166f4aa91963c1af95.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>In conclusion<\/h2>\n<p>\nEtter min mening er resultatene ganske imponerende, og jeg er merkelig sikker p\u00e5 at dette ikke er slutten! Om dette er n\u00f8dvendig for deg i et virkelig prosjekt, m\u00e5 du avgj\u00f8re selv, jeg vil bare si at for meg har dette v\u00e6rt et interessant eksperiment som gj\u00f8r det mulig \u00e5 vurdere hvor mye man kan \"klemme\" ut av en synkron TCP-tilkobling med minimalt med innsats. Hvis du har ideer for \u00e5 forbedre benchmarkene \u2015 vil jeg gjerne vurdere din pull request. Hele koden med instruksjoner for kj\u00f8ring og resultater er publisert i en egen <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tarantool-php\/benchmarks\">depotet<\/a><\/noindex>.<br \/>\n<br \/>Kilde: <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.5 - 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\/no\/blog\/administrirovanie\/uskoryaem-php-konnektory-dlya-tarantool-s-pomoshhyu-async-swoole-i-parallel\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"nn_NO\" \/>\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\/no\/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\udd47Vi akselererer PHP-tilkoblinger for Tarantool med Async, Swoole og Parallel | ProHoster","description":"\u00f8kosystem for PHP.","canonical_url":"https:\/\/prohoster.info\/no\/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":"nn_NO","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\/no\/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\/no\/wp-json\/wp\/v2\/posts\/53530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/comments?post=53530"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/posts\/53530\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/media?parent=53530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/categories?post=53530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/no\/wp-json\/wp\/v2\/tags?post=53530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}