POSIX рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ I / O рдХреЗ рд▓рд┐рдП PHP рд╡рд┐рд╕реНрддрд╛рд░

рдкреГрд╖реНрдарднреВрдорд┐



рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЖрд▓реЛрдЪрдирд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджреНрдпрдо рдХрд░рддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЛрдЧ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдЧрд╛, рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ "рдмреАрдЯрд╛-рд╕реНрдерд┐рд░" рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдо PECL eio рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ libeio рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред



libeio



рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ libeio рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджреВрдВрдЧрд╛ред рдпрд╣ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ POSIX) рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИ рдЬреЛ рдЦреЗрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓реЗрдЦрдХ рдПрдоред рд▓реЗрд╣ рд▓реЗрдЦрдХ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
"... рдПрдХ рдЧреЗрдо рд╕рд░реНрд╡рд░ рдореЗрдВ, рдЖрдк рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдлреНрд░реАрдЬ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдмреИрдХрдЕрдк рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЖрдк рд░реАрдбрдбреАрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред"


рдпрд╛рдиреА рдХреЙрд▓ рдЬреИрд╕реЗ рдХрд┐ рдУрдкрди, рд░реАрдб, рд░рд╛рдЗрдЯ, рдХреНрд▓реЛрдЬ, рд░реАрдбрд╣реЗрдб, рдЯреНрд░рдВрдХреЗрдЯ, рд░реАрдиреЗрдо, рд╕реЗрдВрдбрдлрд╛рдЗрд▓, рд╕реНрдЯреИрд╡рд┐рдлреНрд╕, рдЖрджрд┐ред libeio рдореЗрдВ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВред

Libeio рдкреНрд░рд▓реЗрдЦрди рд╡рд┐рдВрдбреЛрдЬ рдХреЛ рд╕реАрдзреЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреЛрдИ рд╕рдВрдЧрдд рдХреЙрд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ libeio рдЗрд╕ рдХреЙрд▓ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ рдХреЛрдб (рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ) рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦрдХ рд╡рд┐рдВрдбреЛрдЬ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред

Eio рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░



рдПрдХреНрд╕рдЯреЗрдВрд╢рди, libeio рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред Libeio рдХреЛ рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ eio_poll () рдХреЛ рдЪрдХреНрд░реАрдп рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЙрд╕реА рдирд╛рдо рдХрд╛ рдлрд╝рдВрдХреНрд╢рди PHP рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдПрдХ рдИрд╡реЗрдВрдЯ рд▓реВрдк рдХреЛ eio_event_loop () рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ IPC рд╕реЗрдореАрдлреЛрд░рд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореМрдЬреВрджрд╛ PHP рдЯреВрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдИрд╡реЗрдВрдЯ рд▓реВрдк рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ [рдХреЗрд╡рд▓ рд╕реАрдПрд▓рдЖрдИ рдореЗрдВ рдмреЗрд╣рддрд░] рдпрд╛ рд╕реЗрдореАрдлреЛрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реА рд╕реЗрдорд╛рдлреЛрд░)ред

рдкреНрд░рд▓реЗрдЦрди: http://www.php.net/eio

рд╕реНрдерд╛рдкрдирд╛



рдХрд╛рдореЗрдЪреНрдЫрд╛ :

$ touch ~/.cvspass
$ cvs -z3 -d :pserver:anonymous@cvs.schmorp.de/schmorpforge co libeio
$ cd libeio
$ ./autogen.sh
$ ./configure
$ make
$ su -
# make install


рдИрдУ :
$ wget 'http://pecl.php.net/get/eio' -O eio.tgz
$ tar xzvf eio.tgz && cd eio-*
$ phpize
$ ./configure --with-eio # further optional parameters(--enable-eio-debug recommended for first use) ...
$ make && make test
$ su -
# make install


рдЙрд╕рдХреЗ рдмрд╛рдж, php.ini config рдкрд░ рд▓рд┐рдЦреЗрдВ
extension=eio.so
рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рд╕реАрдПрд▓рдЖрдИ рдирд╣реАрдВ рд╣реИред

рдЕрдЧрд░ Gentoo рдЬреИрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ
libtool: Version mismatch error. This is libtool 2.4, but the
libtool: definition of this LT_INIT comes from an older release.
libtool: You should recreate aclocal.m4 with macros from libtool 2.4
libtool: and run autoconf again.
make: *** [libevent.lo] Error 63


рддрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдорджрдж рдХрд░реЗрдЧреА:

$ phpize
$ aclocal && libtoolize --force && autoreconf
$ ./configure --with-eio # further optional parameters(--enable-eio-debug recommended for first use) ...
$ make
#


рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд libeio рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдбреЗрдмрд┐рдпрди_6.0 i586, x86_64
RedHat_RHEL-6 i586, x86_64
openSUSE_11.4 i586, x86_64
xUbuntu_10.04 i586, x86_64
xUbuntu_11.10 i586, x86_64
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, libeio рдХрд╛ рд▓реЗрдЦрдХ рдХреЗрд╡рд▓ рд╕реАрд╡реАрдПрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдИрдУ рдХреЛ рдЖрд╕рд╛рди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
# pecl install eio # stable
# pecl install eio-beta # beta
# pecl install eio-alpha # alpha


рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк SVN рд╕реЗ рдирд╡реАрдирддрдо рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:
$ svn co https://svn.php.net/repository/pecl/eio/trunk eio && cd eio
# pecl install --force package.xml

рдЕрдВрддрд┐рдо рдЖрджреЗрд╢ рд░реВрдЯ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЕрдиреНрдд рдореЗрдВ



рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝рдиреЗ / рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕реБрдЭрд╛рд╡ рдкрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдкреБрдирд╢реНрдЪ
рдпрд╣ рдИрдУ рдЖрд╕рд╛рди рдирд╣реАрдВ рдерд╛ред

рдЕрджреНрдпрддрди


рдкрд░рд┐рд╡рд╛рдж рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк :
рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛: event_priority_set
рдЬреЛрдбрд╝рд╛: event_set рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
рдЬреЛрдбрд╝рд╛: event_buffer_new рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди

рджрд░рдЕрд╕рд▓, eio рдПрдХ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ libevent рдХреЛ рдмрд╛рдБрдзрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрднреА рддрдХ рдХреЗрд╡рд▓ SVN рдореЗрдВ (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)ред

рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ (рди рдХреЗрд╡рд▓ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд┐рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ;):
<?php
function my_eio_poll($fd, $events, $arg) {
/* Some libevent regulation might go here .. */
if (eio_nreqs()) {
eio_poll();
}
/* .. and here */
}

function my_nop_cb($d, $r) {
var_dump($r); var_dump($d);
}

$base = event_base_new();
$event = event_new();

$fd = eio_get_event_stream();
var_dump($fd);

eio_nop(EIO_PRI_DEFAULT, "my_nop_cb", "nop data");
/* some other eio_* calls here ... */

// set event flags
event_set($event, $fd, EV_READ /*| EV_PERSIST*/, "my_eio_poll", array($event, $base));

// Set event priorities
event_base_priority_init($base, 10);

// set event base
event_base_set($event, $base);

// This one is my patch to libevent. Tony should apply it soon
echo "setting priority...\n";
var_dump(event_priority_set($event, 2));

// enable event
event_add($event);

// start event loop
event_base_loop($base);

/* The same kind of stuff is available via buffered libevent API*/
?>


рдПрд╕рд╡реАрдПрди :

svn.php.net/repository/pecl/libevent/trunk
svn.php.net/repository/pecl/eio/trunk

Source: https://habr.com/ru/post/In131082/


All Articles