CPAN рдХреЗ рдкрд╛рд╕ рдореЙрдбреНрдпреВрд▓ -
рдХреЛрд░реЛ рдХрд╛ рдРрд╕рд╛ рдЕрджреНрднреБрдд рдкрд░рд┐рд╡рд╛рд░ рд╣реИред рдпреЗ рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЛ corutin рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЛрддреА рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рдЫреЛрдЯрд╛ рд╕рд╛ рдкрд░рд┐рдЪрдп
рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдордп, рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХрд╣реАрдВ рднреА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдХреЗ рдЕрдВрджрд░ рдпрд╛ рдЪрдХреНрд░ рдХреЗ рдЕрдЧрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░), рдЖрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдмрд┐рдВрджреБ рдкрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдФрд░ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ "рд╕реНрд╡рд┐рдЪ" рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ "рдЕрдиреНрдп" рдмрд┐рдВрджреБ рдкрд░ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рд╣реЗрдЬреЗ рдЧрдП рд░рд╛рдЬреНрдп рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╕рднреА рдХрд╛рд░реНрдп рдРрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ "рд╕реНрд╡рд┐рдЪ" рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдерд╛ред рдареАрдХ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рдирдП рдмрд┐рдВрджреБ рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдореЗрдВ рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдирд╣реАрдВ рдЧрд┐рдирдирд╛ред рдХрдИ "рднрд╛рд░реА" рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рдж, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдХреА рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╕рдорд╛рди "рд╕реНрд╡рд┐рдЪ" рдЙрдирдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдмрд╛рд╣рд░ рд╕реЗ рдРрд╕рд╛ рд▓рдЧреЗрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖рдг рдореЗрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛ рдПрдХ "рдЯреБрдХрдбрд╝рд╛" рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕ "рдЯреБрдХрдбрд╝реЗ" рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдереНрд░реЗрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ (рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡реЗ рд╕рднреА рдХреЛ рдЗрд╕ рд╕рдордп рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред рд╕рд╣реА рд╕рдорд╛рдирддрд╛ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг, рдПрдХ рдзрд╛рдЧреЗ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдЭрд╛ рдбреЗрдЯрд╛ рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрди рддреБрд░рдВрдд рдЕрдиреНрдп рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╕реЗ рдЖрдк рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдХреНрд╖рдгреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рддреЗрдЬреА рд╕реЗ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ (рдореВрд▓ рд░реВрдк рд╕реЗ, рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ) )ред
рдпрд╣ рд╕рдм рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХреЛрд░реЛ рдирд╛рдордХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдПрдХ рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЛрддреА рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкрд░рд┐рд╡рд╛рд░ рдХрд╛ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдХреЛрдб рдХреЗ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдореИрдВ рдЗрди рдереНрд░реЗрдбреНрд╕ рдХреЛрд░реЛ рдереНрд░реЗрдбреНрд╕ рдХреЛ рдиреАрдЪреЗ рдХреЙрд▓ рдХрд░реВрдВрдЧрд╛), рдФрд░ рд╕рд╣рд╛рдпрдХ рдореЙрдбреНрдпреВрд▓ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдЯреВрд▓, рд╕рдВрджреЗрд╢ рдХрддрд╛рд░реЗрдВ, рдШрдЯрдирд╛ рдЫреЛрд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдЖрджрд┐ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдХреЛрд░реЛ рдереНрд░реЗрдб рдмрдирд╛рдирд╛
рдХреЛрд░реЛ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд┐рд╕реА рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
Coro::async { ... } @args;
рдмреНрд▓реЙрдХ рдФрд░ рдЗрд╕рдХреЗ рддрд░реНрдХреЛрдВ рдХреЗ рдмреАрдЪ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╛
my $coro = new Coro(\&code_ref, @args); $coro->ready();
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдзрд╛рд░рд╛
Coro::async
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдмреНрд▓реЙрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмреНрд▓реЙрдХ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрд░реНрдХ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ (
@_
рдорд╛рдзреНрдпрдо рд╕реЗ) рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рджреЗрддреЗ рд╣реИрдВред рджреВрд╕рд░рд╛ рдирд┐рд░реНрдорд╛рдг рдирд┐рд░реНрдорд┐рдд рдереНрд░реЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП
ready()
рд╡рд┐рдзрд┐ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдареАрдХ рджреВрд╕рд░реЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкрд╣рд▓реЗ рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рд╣реИ - рдмрдирд╛рдпрд╛ рдзрд╛рдЧрд╛ рддрдм рддрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд░рд╣реЗрдЧрд╛ рдЬрдм рддрдХ рдЗрд╕реЗ рддреИрдпрд╛рд░ рдХрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдиреАрдЪреЗ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ)ред
рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдЬрдм рддрдХ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдХреЛрдб рдХреЗ рдмреНрд▓реЙрдХ рдХреЛ "рдЬреАрд╡рди" рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реНрд╡рдпрдВ рдПрдХ рдЕрд▓рдЧ рдХреЛрд░реЛ рдзрд╛рдЧреЗ рдореЗрдВ рднреА рдЪрд▓рддрд╛ рд╣реИ - рдореБрдЦреНрдпред
рдХреЛрд░реЛ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛
рд╕рд┐рд╕реНрдЯрдо рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЖрдВрддреЛрдВ рдореЗрдВ рдХрд╣реАрдВ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрд░реЛ-рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ (рдЖрдк рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕реНрдкрд╖реНрдЯ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ):
- "рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ" рдЪрдХреНрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдПрди-рд╡реЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐
- рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди (рдиреЗрдЯрд╡рд░реНрдХ, рдбрд┐рд╕реНрдХ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛)
рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░реЛрд╕реЗрд╕рд░ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдбреЗрдЯрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рдпрд╛ рдбрд┐рд╕реНрдХ рд╕реЗ рдкрдврд╝рд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ (рд╕рд╛рде рд╣реА рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдбрд┐рд╕реНрдХ рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдХреЛрд░реЛ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдг рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ? рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рд╡рд░реНрддрдорд╛рди рдХреЛрд░реЛ-рд╕реНрдЯреНрд░реАрдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдереИрддрд┐рдХ
schedule()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдзрд┐ рд░реЗрдбреА-рдХреНрдпреВ рд╕реЗ рдЕрдЧрд▓реА рдХреЛрд░-рд╕реНрдЯреНрд░реАрдо рдирд┐рдХрд╛рд▓рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдХреЛрд░реЛ рдереНрд░реЗрдб рдХреЙрд▓рд┐рдВрдЧ
schedule()
рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдкрд╣рд▓реЗ рддреИрдпрд╛рд░ рдХрддрд╛рд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЦреБрдж рдХреЛ рдбрд╛рд▓ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП
ready()
рд╡рд┐рдзрд┐ (рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдзрд╛рдЧреЗ рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП )ред рдмрд╛рдзрд┐рдд рдзрд╛рдЧрд╛ рдЕрд╡рд░реБрджреНрдз рд░рд╣рддрд╛ рд╣реИ (рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдЬрдм рддрдХ рдЗрд╕реЗ рддреИрдпрд╛рд░-рдХрддрд╛рд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ; рдпрджрд┐ рдпрд╣ рддрдм рддрдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрдХ рдЕрдиреНрдп рд╕рдХреНрд░рд┐рдп рдзрд╛рдЧреЗ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрд░реЛ рдЗрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдХреНрд░реИрд╢ рдХрд░ рджреЗрдЧрд╛ред рдЪреВрдВрдХрд┐ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП
ready()
рдФрд░
schedule()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдПрдХ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛрд░реЛ рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓ рдХреЛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
cede()
, рдЬреЛ рдирд┐рдореНрди рдЬреЛрдбрд╝реА рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рд╣реИ:
$Coro::current->ready(); Coro::schedule;
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред
рдкрд░рд┐рдгрд╛рдо:
рдзрд╛рдЧрд╛ # 0 - рд╕рдВрд╕рд╛рдзрд┐рдд: 0 рдЖрдЗрдЯрдо
рдзрд╛рдЧрд╛ # 1 - рд╕рдВрд╕рд╛рдзрд┐рдд: 0 рдЖрдЗрдЯрдо
рдзрд╛рдЧрд╛ # 2 - рд╕рдВрд╕рд╛рдзрд┐рдд: 0 рдЖрдЗрдЯрдо
рдзрд╛рдЧрд╛ # 3 - рд╕рдВрд╕рд╛рдзрд┐рдд: 0 рдЖрдЗрдЯрдо
рдзрд╛рдЧрд╛ # 4 - рд╕рдВрд╕рд╛рдзрд┐рдд: 0 рдЖрдЗрдЯрдо
рдзрд╛рдЧрд╛ # 0 - рд╕рдВрд╕рд╛рдзрд┐рдд: 1000 рдЖрдЗрдЯрдо
рдзрд╛рдЧрд╛ # 1 - рд╕рдВрд╕рд╛рдзрд┐рдд: 1000 рдЖрдЗрдЯрдо
рдзрд╛рдЧрд╛ # 2 - рд╕рдВрд╕рд╛рдзрд┐рдд: 1000 рдЖрдЗрдЯрдо
рдзрд╛рдЧрд╛ # 3 - рд╕рдВрд╕рд╛рдзрд┐рдд: 1000 рдЖрдЗрдЯрдо
рдзрд╛рдЧрд╛ # 4 - рд╕рдВрд╕рд╛рдзрд┐рдд: 1000 рдЖрдЗрдЯрдо
...
рдзрд╛рдЧрд╛ # 0 - рд╕рдВрд╕рд╛рдзрд┐рдд: 999000 рдЖрдЗрдЯрдо
рдереНрд░реЗрдб # 1 - рд╕рдВрд╕рд╛рдзрд┐рдд: 999000 рдЖрдЗрдЯрдо
рдзрд╛рдЧрд╛ # 2 - рд╕рдВрд╕рд╛рдзрд┐рдд: 999000 рдЖрдЗрдЯрдо
рдзрд╛рдЧрд╛ # 3 - рд╕рдВрд╕рд╛рдзрд┐рдд: 999000 рдЖрдЗрдЯрдо
рдереНрд░реЗрдб # 4 - рд╕рдВрд╕рд╛рдзрд┐рдд: 999000 рдЖрдЗрдЯрдо
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреЛрд░реЛ рдзрд╛рдЧреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреЛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рднреА рдХреЛрд░реЛ-рд╕реНрдЯреНрд░реАрдо рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рдкреНрд░рддреНрдпреЗрдХ 1000 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ, рдкреНрд░рдЧрддрд┐ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рдмрд╛рдзрд╛ рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдХреЛрд░реЛ-рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмрд╛рдХреА рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рддреИрдпрд╛рд░ рдХрддрд╛рд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЦреБрдж рдХреЛ рд░рдЦрдХрд░ (рдпрд╛ рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛
cede()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдореБрдЦреНрдп рдХреЛрд░реЛ рд╕реНрдЯреНрд░реАрдо рдкреВрд░рд╛ рд╣реЛрдиреЗ рддрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛рдо рдХрд░рддрд╛ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рдореБрдЦреНрдп рдХреЛрд░реЛ рд╕реНрдЯреНрд░реАрдо 4 рдореЗрдВ рд╕реЗ 4 рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдХреЛрд░реЛ рд╕реНрдЯреНрд░реАрдо рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ (рдХреЙрд▓
join()
рдХрд░рддреЗ
join()
рд╡рд┐рдзрд┐ рдХреЛрд░реЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рд╕реЗ рдХреЙрд▓ рддрдм рддрдХ рдХреА рдЬрд╛рддреА рд╣реИ рдЬрдм рддрдХ рдХреЛрд░реЛ-рдереНрд░реЗрдб рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ)ред
рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди
рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрд░реЛ рдереНрд░реЗрдбреНрд╕ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдХреЛ рдХреИрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рдо рд╕реЗ рдмреНрд░реЗрдХ рд▓реЗрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рдЕрд╡рд░реБрджреНрдз рд╕рдВрдЪрд╛рд▓рди (рдЖрдорддреМрд░ рдкрд░ I / O) рдХрд░рдирд╛ рднреА рд╣реИред
рдЬрдм рд╣рдореЗрдВ рдХрдИ рдЕрд╡рд░реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡реА рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЖрдорддреМрд░ рдкрд░ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреА рдорджрдж рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдФрд░ рдЙрди рдкрд░ "рд╣реИрдВрдЧ" "рд╡реЙрдЪрд░реНрд╕" рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд▓рд┐рдЦрдиреЗ рдпрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЙрдХреЗрдЯ рдХреА рддрддреНрдкрд░рддрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдСрдкрд░реЗрд╢рди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд╛рдЗрдорд░ рдмрдирд╛рддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рд╣реА рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░реБрдЪрд┐ рдХреА рдШрдЯрдирд╛рдПрдВ рдШрдЯрддреА рд╣реИрдВ, рдШрдЯрдирд╛ рдЪрдХреНрд░ рдХреЗ рдЖрдШрд╛рдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд "рдШрдбрд╝реА" рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЙрд▓рдмреИрдХ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛрддреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдпрд╣ рд╕рдордЭрдирд╛ рдФрд░ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдХреЙрд▓рдмреИрдХ рдХреЛ рдХрдм рдФрд░ рдХреНрдпреЛрдВ рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдХреЛрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдЕрдзрд┐рдХ рд░реИрдЦрд┐рдХ рдФрд░ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ (рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдореЗрд░реА рд░рд╛рдп)ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЛрд░реЛ рдореЙрдбреНрдпреВрд▓ рдкрд░рд┐рд╡рд╛рд░ рдореЗрдВ
рдХреЛрд░ рд▓реВрдк рдХреЛ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ - рдпреЗ рд╣реИрдВ
рдХреЛрд░реЛ :: AnyEvent ,
Coro :: рдШрдЯрдирд╛ рдФрд░
рдХреЛрд░реЛ :: EV (рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛрд░реЛ :: EV рдХреЗ рд▓рд┐рдП рд╣реЛрдВрдЧреЗ)ред рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдИрд╡реЗрдВрдЯ рд▓реВрдк рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рд▓реВрдк рдХреЛ рдХрд┐рд╕реА рднреА рдХреЛрд░реЛ-рд╕реНрдЯреНрд░реАрдо (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп рдереНрд░реЗрдб рдореЗрдВ) рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
Coro::async { EV::run() };
рдШрдЯрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдХреЛрд░реЛ рдореЙрдбреНрдпреВрд▓ рджреЛ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ -
rouse_cb()
рдФрд░
rouse_wait()
:
rouse_cb()
рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдХреЙрд▓рдмреИрдХ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░, рдЙрд╕рдХреЗ рдкрд╛рд╕ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ рдФрд░ рдХреЙрд▓ рдХреЗ рддрдереНрдп рдХреЗ рдХреЛрд░реЛ рдЗрдВрдЯрд░реНрдирд▓ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИrouse_wait()
рд╡рд░реНрддрдорд╛рди рдХреЛрд░реЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рддрдм рддрдХ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ rouse_cb()
рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдЕрдВрддрд┐рдо rouse_cb()
(рдЖрдк рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдХреЛ рдХреЙрд▓ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ); рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рддреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ:
рд░реЛрд╕ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛрдб
rouse_cb()
рдФрд░
rouse_wait()
рдХреА рдкреВрд░реНрдг рд╢рдХреНрддрд┐ рдХреЛ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХреА рд╕рдордЭ рддрдм рдЖрддреА рд╣реИ рдЬрдм рдЖрдк рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рдЦреБрдж рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд
rouse_cb()
рдХреЙрд▓рдмреИрдХ рдХрд╛ рдореБрдЦреНрдп рдорд╛рдЗрдирд╕ рдорд┐рд▓рд╛ - рдЕрдЧрд░ рдЖрдк
rouse_cb()
рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдХреЙрд▓рдмреИрдХ рдХреЛ
rouse_cb()
рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ (рдЬреЛ рдЪрдХреНрд░реАрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рддрд╛рд░реНрдХрд┐рдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдФрд░ рдПрдХ рд╣реА рдХрд╛рдо?), рдЗрд╕рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рдЖрдПрдЧрд╛ред рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдХреЙрд▓рдмреИрдХ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП
rouse_wait()
рд▓рд┐рдП рд╕рднреА рдмрд╛рдж рдХреА рдХреЙрд▓ рддреБрд░рдВрдд рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рддрд░реНрдХреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рд░реЛрд╕-рдХреЙрд▓рдмреИрдХ рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдХреЙрд▓рдмреИрдХ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдФрд░
rouse_wait()
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп,
rouse_wait()
wait()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
my $cb = new My::RouseCallback; my $timer = EV::timer(5, 5, $cb); my ($watcher, $revents) = $cb->wait(); print "Timer $wathcer: timeout\n";
рдореЗрд░рд╛ :: RouseCallback рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди package My::RouseCallback; use strict; use warnings; use Coro;
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдореЗрдВ рдХреЛрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ, рд╢рд╛рдпрдж рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред
рдкреБрдирд╢реНрдЪред рдпрджрд┐ рдЖрдк рдИрд╡реА рдФрд░ рдХреЛрд░реЛ рдкрд░рд┐рд╡рд╛рд░реЛрдВ рд╕реЗ рдПрдХ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рджреЛрдиреЛрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ async () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдХреЛрд░реЛ рдереНрд░реЗрдбреНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрд░реЛ :: async рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред