рдзрд╛рд░рд╛рдУрдВ рдпрд╛ рдШрдЯрдирд╛рдУрдВ

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

рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░ рдХреЗ рд▓реЛрдб рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рдХреЗ рд╕реА рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реАрдкреАрдпреВ рд╕рдордп рд╕рдХреНрд░рд┐рдп рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рднреА рдЕрдиреБрд░реЛрдз рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рдФрд░ 95 рдПрдордПрд╕ рд╕реЗ 5 рдЕрдиреБрд░реЛрдз рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрд░рд┐рдгрд╛рдо 100ms рд╣реИред рдЪрд▓реЛ рдпрд╣ рднреА рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕рд░реНрд╡рд░ рдХрд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕рдВрд╕реНрдХрд░рдг рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ рдФрд░ рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдкрд╣рд▓реЗ рдЯреА рдереНрд░реЗрдб рддрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ CPU рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 1000 / c рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ CPU рдХреЗ 2 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 1000/2 = 500 рдЕрдиреБрд░реЛрдз рдорд┐рд▓рддреЗ рд╣реИрдВред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб t * 1000 / w рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИред

рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдХреА рдмреИрдВрдбрд╡рд┐рдбреНрде рдЗрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдиреНрдпреВрдирддрдо рд╣реИ (1000 / c рдФрд░ t * 1000 / w )ред рдИрд╡реЗрдВрдЯ рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ CPU рдкреНрд░рджрд░реНрд╢рди (1000 / c ) рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдереНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

def max_request_rate(t, c, w): cpu_bound = 1000. / c thread_bound = t * 1000. / w print 'threaded: %d\nevented: %d' % (min(cpu_bound, thread_bound), cpu_bound) 


рдЕрдм рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдФрд░ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдореЗрдВ рдЦреБрдж рдХреЛ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ t = 100 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

рдЖрдЗрдП рдХреНрд▓рд╛рд╕рд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ: HTTP рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдХреЛрдИ CPU рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдорд╛рди рд▓реАрдЬрд┐рдП c = 0.1 msред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЙрдирдХреЗ рдЖрдЧреЗ рдХреЗ рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рджреЗрд░реА рд╣реЛ рд░рд╣реА рд╣реИ, рддреЛ w = 50 ms рдХрд╣реЗрдВред рдлрд┐рд░ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:

 >>> max_request_rate(100, 0.1, 50) threaded: 2000 evented: 10000 

рд╣рдорд╛рд░реА рдЧрдгрдирд╛ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 2,000 рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, рдФрд░ рдПрдХ рдЗрд╡реЗрдВрдЯ рд╕рд░реНрд╡рд░ 10,000ред рдЗрд╡реЗрдВрдЯ рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдЕрдбрд╝рдЪрди рдмрди рдЧрдИред

рдПрдХ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд░реНрд╡рд░ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдРрд╕реЗ рдЖрд╡реЗрджрди рдХреЗ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рд╣реЛрдЧрд╛, рдХрд╣рддреЗ рд╣реИрдВ 5 рдПрдордПрд╕ред рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЕрд╡рд░реЛрдзрдХ рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдордп w рднреА 5 рдПрдордПрд╕ рд╣реЛрдЧрд╛ред рддрдм:

 >>> max_request_rate(100, 5, 5) threaded: 200 evented: 200 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, CPU рдкреНрд░рджрд░реНрд╢рди рдПрдХ рдЕрдбрд╝рдЪрди рдмрди рдЧрдпрд╛ред

рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрд╛рд╣рд░реА рд╕рдВрд╕рд╛рдзрди рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╕реАрдкреАрдпреВ рд╕рдордп 0.5 рдПрдордПрд╕ рд╣реЛрдЧрд╛, рдФрд░ рдХреБрд▓ рд╕рдордп рдбрдмреНрд▓реНрдпреВ = 100 рдПрдордПрд╕ред

 >>> max_request_rate(100, 0.5, 100) threaded: 1000 evented: 2000 


рдЬреИрд╕рд╛ рдХрд┐ рд╕рд░рд▓ рдЧрдгрдирд╛ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрдгрд┐рдд рд╕реЗ, рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдШрдЯрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

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

рдПрдХ рдУрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдореГрджреНрдз рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдбрд╝рдЪрди рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдХреА рдХрдард┐рдирд╛рдИ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореМрдЬреВрджрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрд╡рд░реБрджреНрдз рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд▓реЗрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рддреНрд░реБрдЯрд┐ рдмрд╛рдХреА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред

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

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


All Articles