рдХреЛрд░реЛ рдФрд░ рдПрдХ рдЕрдиреНрдп рд░реЛрд╕-рдХреЙрд▓рдмреИрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

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; 

рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред
 #!/usr/bin/perl $| = 1; use strict; use warnings; use Coro; #  coro-   Coro::async Coro::async { my $thread_id = shift; #    coro- $Coro::current->desc("Thread #$thread_id"); for (my $i = 0; $i < 1_000_000; $i++) { if ($i % 1000 == 0) { print "$Coro::current->{desc} - Processed: $i items\n"; #   coro-   ready- $Coro::current->ready(); #      ready- Coro::schedule(); } } } 0; #       coro- sub my_thread { my $thread_id = shift; $Coro::current->desc("Thread #$thread_id"); for (my $i = 0; $i < 1_000_000; $i++) { if ($i % 1000 == 0) { print "$Coro::current->{desc} - Processed: $i items\n"; #     coro- Coro::cede(); } } } my @threads = (); for (my $thread_id = 1; $thread_id < 5; $thread_id++) { #   coro-   Coro::new() my $thread = new Coro(\&my_thread, $thread_id); #   coro-   ready- $thread->ready(); push @threads, $thread; } while (my $thread = shift @threads) { #   coro-   ,   coro-   $thread->join(); } 

рдкрд░рд┐рдгрд╛рдо:
 рдзрд╛рдЧрд╛ # 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() :

рддреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ:

 # 1.   rouse_cb()  rouse_wait() my $timer = EV::timer(5, 5, sub { my ($watcher, $revents) = @_; print "Timer $wathcer: timeout\n"; }); #2.   rouse_cb()  rouse_wait() my $timer = EV::timer(5, 5, rouse_cb()); my ($watcher, $revents) = rouse_wait(); print "Timer $wathcer: timeout\n"; 


рд░реЛрд╕ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреЛрдб 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; # ""      My::RouseCallback my %STORAGE = (); #  : my $cb = new My::RouseCallback; sub new { my ($class) = @_; my $context = {args => [], done => 0, coro => undef}; my $self = bless sub { #     $context->{args} = \@_; #   ,     $context->{done} = 1; if ($context->{coro}) { #   coro- $context->{coro}->ready(); } }, $class; $STORAGE{"$self"} = $context; return $self; }; #   : $cb->wait(); sub wait { my $self = shift; my $context = $STORAGE{"$self"}; #   ,  coro-   $context->{coro} = $Coro::current; #   coro-   ,      while ($context->{done} == 0) { Coro::schedule(); } #        my @args = @{ $context->{args} }; $context->{args} = []; $context->{done} = 0; return @args; } sub DESTROY { my $self = shift; $self->(); delete $STORAGE{"$self"}; }; 1; __END__ 



рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдореЗрдВ рдХреЛрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ, рд╢рд╛рдпрдж рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВ, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЬреНрдЮрд╛рди рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред

рдкреБрдирд╢реНрдЪред рдпрджрд┐ рдЖрдк рдИрд╡реА рдФрд░ рдХреЛрд░реЛ рдкрд░рд┐рд╡рд╛рд░реЛрдВ рд╕реЗ рдПрдХ рд╕рд╛рде рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рджреЛрдиреЛрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ async () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЬрдм рдХреЛрд░реЛ рдереНрд░реЗрдбреНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрд░реЛ :: async рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред

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


All Articles