
рдЕрдореВрд░реНрдд
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдмрд╛рд░ ( рдмрд┐рд▓реНрдХреБрд▓-рдПрдХ рдмрд╛рд░ ) рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрддреНрдпрдВрдд рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реИ рдФрд░ рдЧрдгрдирд╛ рдХреА рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдПрдХ рдЧрдВрднреАрд░ рдФрд░ рд╡рд┐рдЪрд╛рд░рд╢реАрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХреБрдЫ рдХрд╛ рдпрд╣ рднреА рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд╛рд░реНрдп рдЕрд╕рдВрднрд╡ рд╣реИ ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдПрдХ рдРрд╕рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рджреЗрд░реА рдХреЗ рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдирдИ рдФрд░ рднреА рдЕрдзрд┐рдХ рдХрдареЛрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕рд╛рдордиреЗ рд░рдЦрддрд╛ рд╣реИ: рд╕рдорд╡рд░реНрддреА рдмрд┐рд▓реНрдХреБрд▓-рдПрдХ рдмрд╛рд░ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдкрд░рдд рдХреА рд╡рд┐рд╖рдорддрд╛ред рдЖрдЬ рддрдХ, рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореМрдЬреВрджрд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рдЧрд╛рддрд╛рд░ рдЧреБрдкреНрдд рдЕрд╡рдпрд╡реЛрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдкреНрд░рдХрдЯ рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐ рджреЛ рдШрдЯрдХреЛрдВ рд╕реЗ рд╢рд╛рдмреНрджрд┐рдХ рд╕рдорд╡рд░реНрддреА рдПрдХ рдмрд╛рд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рдмрдирд╛рддреЗ рд╣реИрдВред
рдкрд░рд┐рдЪрдп
рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдбреЗрд╡рд▓рдкрд░ рдХрдИ рдЪрд░рдгреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ:
рдЪрд░рдг 1: рдПрд▓реНрдЧреЛрд░рд┐рджрдо ред рдпрд╣рд╛рдБ рдмреБрдирд┐рдпрд╛рджреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬреИрд╕реЗ рдУрдУрдкреА, рдЖрджрд┐ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЛрдб рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдбреЗрдб рд╣реИред рдкреЗрд╢реЗ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдгред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рд╡рд░реНрд╖реЛрдВ рддрдХ рд░рд╣ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрдЯреЗрдЬ 2: рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ ред рдЗрд╕рдХреЗ рдмрд╛рдж, рд▓реЛрд╣реЗ рд╕реЗ рдЕрдзрд┐рдХрддрдо рджрдХреНрд╖рддрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдкрд░ рд╕рд╡рд╛рд▓ рдЙрдарддреЗ рд╣реИрдВ, рдЗрд╕рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕реА, рд░реЗрд╕рд┐рдВрдЧ, рдбрд┐рдмрдЧрд┐рдВрдЧ, рд╕реНрдЯреНрд░реЗрд╕, рд╕реНрд▓реАрд╡рд▓реЗрд╕ рдирд╛рдЗрдЯреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ ... рдХрдИ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЕрдЯрдХ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдПрдХ рдЕрдХрдердиреАрдп рд░реЛрдорд╛рдВрдЪ рдХреЛ рдкрдХрдбрд╝рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдореЛрд░реА рдФрд░ рдореЗрдореЛрд░реА рдореЙрдбрд▓, рд▓реЙрдХ-рдлреНрд░реА / рд╡реЗрдЯ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЙрдбрд▓ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реА рдЖрддреЗ рд╣реИрдВред рдФрд░ рд▓рдЧрднрдЧ рдХрднреА рднреА рдирд╣реАрдВ - рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рд╕рддреНрдпрд╛рдкрдиред
рд╕реНрдЯреЗрдЬ 3: рд╡рд┐рддрд░рдг ред рдпрд╣рд╛рдБ рдРрд╕рд╛ рдХрдЪрд░рд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рди рддреЛ рдХрд┐рд╕реА рдкрд░реА рдХрдерд╛ рдореЗрдВ рдФрд░ рди рд╣реА рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд▓рдоред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЬрдЯрд┐рд▓ рд╣реЛрдЧрд╛ред рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ: рдХрдИ рдереНрд░реЗрдб -> рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ -> рдХрдИ рд╕рд░реНрд╡рд░ред рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдЧреБрдгрд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рддрд╛ рд╣реИ, рдФрд░ рд╡реЗ рд╕рднреА рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЧрд┐рд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдХреБрдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдзреВрд▓ рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред
рдФрд░ рдпрд╣рд╛рдБ рдмрд┐рдВрджреБ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдбреЛрдореЗрди рдФрд░ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЛ рдмрджрд▓рдирд╛ рд╣реИред рдпрджрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрд╢рд╛ рд╕реНрдореГрддрд┐ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдерд╛ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдерд╛, рдФрд░ рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╣рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЕрдм рдРрд╕рд╛ рдХреЛрдИ рдЯреБрдХрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдиреЗ рд▓рд┐рдП, рд╕реНрд╡рддрдВрддреНрд░ рдФрд░ рдЧреМрд░рд╡рд╢рд╛рд▓реАред
рдпрджрд┐ рдкрд╣рд▓реЗ рдзрд╛рд░рд╛ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдзрд╛рд░рд╛ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрдлрди рдХрд░ рджреЗрддреА рд╣реИ, рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдВрд╢рд┐рдХ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЕрдм рдЖрдВрд╢рд┐рдХ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдЖрджрд░реНрд╢ рдФрд░ рд╣рд░ рдмрд╛рд░ рд╣рд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рд╕реЛрдЪрддреЗ рд╣реИрдВ: "рдХреНрдпрд╛ рдЕрдЧрд░"? рдпрд╣ рд▓реЗрдЦрди рд╕реЗ рдЗрддрдирд╛ рдХрд╖реНрдЯрдкреНрд░рдж рдФрд░ рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ рдХрд┐ рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рдХреЛрдб рдХрдИ рдмрд╛рд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдкрд░рд┐рдорд╛рдг рдХреЗ рдЖрджреЗрд╢реЛрдВ рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдиреВрдбрд▓реНрд╕ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рд░рд╛рдЬреНрдп рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдФрд░ рд╕рдВрджрд░реНрдн рд╕рдВрд░рдХреНрд╖рдг, рдПрдХ рдШрдЯрдХ рдХреА рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдмрд╣рд╛рд▓реА, рджреВрд╕рд░рд╛ рдШрдЯрдХ, рдХреБрдЫ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдЕрдХреНрд╖рдорддрд╛, рдЖрджрд┐ред рдЖрджрд┐ рдЗрди рд╕рднреА рд╕рд╛рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдЧрд░рд╛рдиреА рд░рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рд▓реИрдкрдЯреЙрдк рдкрд░ рд░рд╛рдд рдХреА рд╢рд╛рдирджрд╛рд░ рдиреАрдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд╛рд╣реЗ рд╡рд╣ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреА рдмрд╛рдд рд╣реЛ: рдореИрдВ рдореНрдпреВрдЯреЗрдХреНрд╕ рд▓реЗ рдЧрдпрд╛ рдФрд░ рдЦреБрд╢реА рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ рд╕реНрдореГрддрд┐ рдХреЛ рд╣рд┐рд▓рд╛ рджрд┐рдпрд╛ред рдмреНрдпреВрдЯреА!
рдирддреАрдЬрддрди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдВрдЬреА рдФрд░ рдпреБрджреНрдз-рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдкреИрдЯрд░реНрди рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдирдП, рдЙрдиреНрд╣реЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рдПрдХ рдордЬрд╛рдХ рдХреА рддрд░рд╣ рдирд┐рдХрд▓рд╛ рдХрд┐ рдкрд░реА рдиреЗ рдЕрдкрдиреА рдЫрдбрд╝реА рдХреИрд╕реЗ рд▓рд╣рд░рд╛рдИ рдФрд░ рдЯреЙрд╡рд░ рдиреЗ рдЯреИрдВрдХ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕рд┐рджреНрдз рдкреНрд░рдерд╛рдУрдВ рдФрд░ рд╕рд┐рджреНрдз рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рд╛рднрд┐рдорд╛рдиреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬреНрдЮрд╛рдд рдЙрдкрд▓рдмреНрдзрд┐рдпреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд▓реЗрдЦреЛрдВ рдФрд░ рд╢реИрдХреНрд╖рд┐рдХ рдЕрдиреБрд╕рдВрдзрд╛рди рдХреА рдХрд╛рдлреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЕрдкрдиреА рдЦреБрдж рдХреА рдмрд╛рдЗрдХ рдХреЛ рдЕрдкрдирд╛ рдХрд░реНрддрд╡реНрдп рдорд╛рдирддрд╛ рд╣реИред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпрджрд┐ рдЖрдк рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╡рд┐рддрд░рдг рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝реА рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕рдореЗрдВ рдХреЛрдИ рджреЛ рд░рд╛рдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА!
рдирддреАрдЬрддрди, рд╕рд┐рд╕реНрдЯрдо рдЫреЛрдЯреА рдЧрд╛рдбрд╝реА, рдбреЗрдЯрд╛ рд╡рд┐рдЪрд▓рди рдФрд░ рдмрд┐рдЧрдбрд╝рддреЗ рд╣реИрдВ, рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╕рдордп-рд╕рдордп рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЪрд╛рдирдХ рдПрдХ рдиреЛрдб рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛, рдиреЗрдЯрд╡рд░реНрдХ рдиреАрдЪреЗ рдЪрд▓рд╛ рдЧрдпрд╛, рдЬрд╛рд╡рд╛ рдиреЗ рдмрд╣реБрдд рдореЗрдореЛрд░реА рдФрд░ рдЬреАрд╕реА рд╕реБрд╕реНрдд рдХрд╛ рд╕реЗрд╡рди рдХрд┐рдпрд╛, рдФрд░ рдХрдИ рдЕрдиреНрдп рдХрд╛рд░рдг рд╣реИрдВ рдЬреЛ рдЗрд╕рдХреЗ рдЕрдВрдд рдореЗрдВ рджреЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рд░рд┐рдпреЛрдВ рдХреЛред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреНрд░рд╕рд┐рджреНрдз рдФрд░ рд╕рд┐рджреНрдз рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд╕рд╛рде, рдЬреАрд╡рди рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рддрд░рд┐рдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЖрджрд┐рдо рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХреЗ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдЧрдВрднреАрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рднрд╛рд░реА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЬрд╣рд╛рдВ рднреА рд╕рдВрднрд╡ рд╣реЛ, рдХреЛрдиреЛрдВ рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рдХрдЯреЗ рд╣реБрдП рдХреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде, рд╕рд╛рджрдЧреА рдФрд░ рд╕рд╛рдкреЗрдХреНрд╖ рдорд╛рдкрдиреАрдпрддрд╛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛, рдЙрдкрд▓рдмреНрдзрддрд╛ рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдЖрджрд░реНрд╢ рд░реВрдк рдореЗрдВ, рдореИрдВ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реА рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рддрд░рд┐рдд рдФрд░ рдмрд╣реБрдкрд░рдд рд╣реИ, рдЕрд░реНрдерд╛рддреНред 2 (рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ + рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ) рдФрд░ 3 рдбреА (рд╡рд┐рддрд░рдг) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛, 1 рдЪрд░рдг (рдПрд▓реНрдЧреЛрд░рд┐рджрдо) рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЕрдореВрд░реНрдд рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛ рд▓реЗрдЦрди рдХреЛрдб рдХреА рд╕рд╛рджрдЧреА, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдФрд░ рдЧрддрд┐ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХрд░реЗрдЧрд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдлрд┐рд▓рд╣рд╛рд▓ рдпрд╣ рдХреЗрд╡рд▓ рд╕рдкрдиреЛрдВ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреГрдердХреНрдХрд░рдг рд░рд┐рд╢реНрддреЗрджрд╛рд░ рдЕрд▓рдЧрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛрд░рдЯрд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ , рдЬрд╣рд╛рдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рд╣рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдорд┐рд▓рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╣рдо рджреВрд╕рд░реЗ рдЪрд░рдг рд╕реЗ рдкреНрд░рдердо рдЪрд░рдг рдореЗрдВ рдкрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдХреЛрдб рдХреЗ рд▓реЗрдЦрди рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдХреЛ рдХрд╛рдлреА рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЖрд▓реЗрдЦ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рд╡рд┐рддрд░рд┐рдд рд╕реНрдХреЗрд▓реЗрдмрд▓ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред 2-рдЪрд░рдг рдХреА рд▓реЙрдХ-рдлреНрд░реА рдЙрдкрд▓рдмреНрдзрд┐рдпрд╛рдВ 3 рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВ, 1 рдЪрд░рдг рдХреЗ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреЛ рдХрдо рдХрд░рддреА рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди
рдпрд╣ рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдХрд╛рд░реНрдп: рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ ред
рд╕рдВрдЦреНрдпрд╛ рдХреА рджреЛ рдзрд╛рд░рд╛рдПрдБ рд╣реИрдВред рд╣реИрдВрдбрд▓рд░ рдЗрди рдЗрдирдкреБрдЯ рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдЗрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдФрд╕рдд рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдПрдХ рджрд┐рдП рдЧрдП рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд▓рд╛рдЗрдбрд┐рдВрдЧ рдбреЗрдЯрд╛ рд╡рд┐рдВрдбреЛ рдореЗрдВред рдкреНрд░рд╛рдкреНрдд рдФрд╕рдд рдореВрд▓реНрдп рдмрд╛рдж рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рдХрддрд╛рд░ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдмрд╛рд╣рд░реА рд▓реЗрдирджреЗрди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рд╕реЗ рд╡реГрджреНрдзрд┐ рдХрд░реЗрдВред

рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВред
- рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рдХрд╡рд╛рдж ред рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рджреЛ рд╕реНрд░реЛрдд рд╣реИрдВ: рдпрд╣ рджреЛ рдзрд╛рд░рд╛рдУрдВ рд╕реЗ рдПрдХ рд░реАрдбрд┐рдВрдЧ рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рд╕рдордп рдЦрд┐рдбрд╝рдХреА рднреА рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд░реАрдбрд┐рдВрдЧ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ рдХрд┐ рдбреЗрдЯрд╛ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдордп рд╡рд┐рдВрдбреЛ рднреА рд╢реБрд░реВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмрджрд▓рддреА рд╣реИ, рдЬреИрд╕реЗ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХрд╛рдо рдХреА рдЧрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧреАред
- рд╣реИрдВрдбрд▓рд░ рдХреА рдЕрд╡рд╕реНрдерд╛ ред рдЦрд┐рдбрд╝рдХреА рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдХреА рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдХрд╛рдо рдХреЗ рд╡рд░реНрддрдорд╛рди рдФрд░ рдмрд╛рдж рдХреЗ рдкрд░рд┐рдгрд╛рдо рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╛рдиреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдЯреЗрдЯрдлреБрд▓ рд╣реИрдВрдбрд▓рд░ рд╣реИред
- рдмрд╛рд╣рд░реА рднрдВрдбрд╛рд░рдг рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ ред рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрд╛рдЙрдВрдЯрд░ рд╡реИрд▓реНрдпреВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рднрдВрдбрд╛рд░рдг рдХрд╛ рдкреНрд░рдХрд╛рд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рднрдВрдбрд╛рд░рдг рд╕реЗ рдЕрд▓рдЧ рд╣реИред
рдпрд╣ рд╕рдм, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реНрдкрд░реНрд╢ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИ, рдЬреЛ рддреБрд░рдВрдд рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓рддрд╛ рд╕реЗ рдкрд░реЗ рдХреЗ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЕрд╕рдВрднрд╡ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ: рдПрдХ рд╕рдорд╡рд░реНрддреА рдмрд┐рд▓реНрдХреБрд▓-рдПрдХ рдмрд╛рд░ рдЧрд╛рд░рдВрдЯреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ-рдПрдХ рдмрд╛рд░
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ-рдПрдХ рдмрд╛рд░ рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд╢рдмреНрдж рдХреЛ рд╣реА рдорд┐рдЯрд╛ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд╛рд░реНрдп рдХреА рдореВрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо рдПрдХ рдРрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ - рддреЛ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдЕрдзрд┐рдХ рд▓реЗрдВ, рдЖрдЧреЗ рдлреЗрдВрдХреЗрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ:
- рд╣реИрдВрдбрд▓рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдбрд╝реА рд╣реЛ рд╕рдХрддреА рд╣реИ: рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░рд┐рдгрд╛рдо рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛рдмреЗрд╕, рд╕рдВрднрд╡рддрдГ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдлреЗрд░рдмрджрд▓ рднреАред
- рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░ рдЕрдЪрд╛рдирдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЧрд▓рддреА-рд╕рд╣рд┐рд╖реНрдгреБ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рднреА рдирд┐рд░рдВрддрд░ рд╕рдВрдЪрд╛рд▓рдиред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣реИрдВрдбрд▓рд░ рдЧрд┐рд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдХрд┐рдП рдЧрдП рдХрд╛рдо рдХреЛ рдЪреБрдирдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рд╢реНрди рддреБрд░рдВрдд рдЙрдарддрд╛ рд╣реИ: рдпрджрд┐ рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд╣реИрдВрдбрд▓рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓, рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдгрд╛рдореА рд░рд╛рдЬреНрдпред рдпрд╣рд╛рдВ рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рдмрд┐рд▓реНрдХреБрд▓-рдПрдХ рдмрд╛рд░, рдПрдХ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдирд┐рд╖реНрдкрд╛рджрди рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдкреБрдЯ рдорд╛рди рдХреЛ рдПрдХ рдмрд╛рд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдмрдВрдзрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдПрдХ рд╣реА рдиреЛрдб рдкрд░ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рд╕рдм рдХреБрдЫ рдХреНрд░реИрд╢ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдиреЛрдб рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рдордХрд╛рд▓рд┐рдХ-рдПрдХ рдмрд╛рд░
рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ : рд╕рдорд╡рд░реНрддреА рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдмрд╛рд░ ред рд╕рд░рд▓ рдмрд┐рд▓реНрдХреБрд▓-рдПрдХ рдмрд╛рд░ рд╕реЗ рдореВрд▓рднреВрдд рдЕрдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдард╣рд░рд╛рд╡ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕рдм рдХреБрдЫ рдПрдХ рд╣реА рдиреЛрдб рдкрд░ рдмреВрдВрджреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдФрд░ рдмрд┐рдирд╛ рд░реБрдХреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдореЗрдВ, рд╣рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдмрд╛рд░ рд╕рдорд╡рд░реНрддреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рддрд╛рдХрд┐ рдореМрдЬреВрджрд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рди рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдЖрдЬ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред
рдРрд╕реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рд▓реЗрди-рджреЗрди рд╕рдВрдмрдВрдзреА
рддрд╛рдХрд┐ рдкрд╛рдардХ рдФрд░ рднреА рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛ рдЬрд╛рдП, рдЬреЛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╡рд┐рднрд┐рдиреНрди рдмреБрд░реЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╣рдореЗрдВ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдзреНрдпрд╛рди рдореЗрдВ рдЖрддреА рд╣реИ рд╡рд╣ рд╣реИрдВрдбрд▓рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рд▓ рдХрддрд╛рд░ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрди рдореЗрдВ рд╕реНрдерд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдЗрдирдкреБрдЯ рдзрд╛рд░рд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдПрдХ рдзрд╛рд░рд╛ рдПрдХ рдЕрдирдВрдд рдХрддрд╛рд░ рд╣реИ, рдФрд░ рдХрддрд╛рд░ рдореЗрдВ рдПрдХ рд╕реНрдерд╛рди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдерд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдирд┐рдореНрди рднреЛрд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреБрдг рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Pseco рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ (Pseco: = pseudo рдХреЛрдб):
handle(input_queues, output_queues, state): # input_indexes = storage.get_input_indexes() # while true: # items, new_input_indexes = input_queues.get_from(input_indexes) # state.queue.push(items) # duration state.queue.trim_time_window(duration) avg = state.queue.avg() need_update_counter = state.queue.size() > size_boundary # (A) output_queues[0].push(avg) if need_update_counter: # (B) db.increment_counter() # (C) storage.save_state(state) # (D) storage.save_queue_indexes(new_input_indexes) # (E) input_indexes = new_input_indexes
рдпрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдзрд╛рд░рд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд╛рдВрдЫрд┐рдд рдорд╛рди рд▓рд┐рдЦрддрд╛ рд╣реИред
рдЖрдЗрдП рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдордп рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдиреЛрдб рдХреЗ рдЧрд┐рд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрд╛рдо рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдмрд┐рдВрджреБрдУрдВ (A)
рдФрд░ (E)
рдкрд░ рдЧрд┐рд░рд╛рд╡рдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛: рдпрд╛ рддреЛ рдбреЗрдЯрд╛ рдЕрднреА рддрдХ рдХрд╣реАрдВ рднреА рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣рдо рдХреЗрд╡рд▓ рд░рд╛рдЬреНрдп рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЗ рдиреЛрдб рдкрд░ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рдпрд╛ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкрд╣рд▓реЗ рд╣реА рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рдмрд╕ рдЕрдЧрд▓реЗ рдЪрд░рдг рдХреЛ рдЬрд╛рд░реА рд░рдЦреЗрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдиреНрдп рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЧрд┐рд░рд╛рд╡рдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реИред рдпрджрд┐ рдмрд┐рдВрджреБ (B)
рдкрд░ рдПрдХ рдмреВрдВрдж рд╣реЛрддреА рд╣реИ, рддреЛ рдЬрдм рд╣реИрдВрдбрд▓рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд░рд╛рдЬреНрдп рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рд▓рдЧрднрдЧ рдЙрд╕реА рд░реЗрдВрдЬ рдореЗрдВ рдФрд╕рдд рдореВрд▓реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВрдЧреЗред рдмрд┐рдВрджреБ (C)
рдкрд░ рдЧрд┐рд░рд╛рд╡рдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ (C)
рдФрд╕рдд рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореВрд▓реНрдп рдХреА рд╡реГрджреНрдзрд┐ рдореЗрдВ рдПрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛ред рдФрд░ (D)
рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ (D)
рд╣рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдХреА рдПрдХ рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдорд┐рд▓реЗрдЧреА: рд░рд╛рдЬреНрдп рд╕рдордп рдореЗрдВ рдПрдХ рдирдП рдХреНрд╖рдг рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдФрд░ рд╣рдо рдЗрдирдкреБрдЯ рдзрд╛рд░рд╛рдУрдВ рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрдврд╝реЗрдВрдЧреЗ рдкреБрд░рд╛рдиреЗред

рдЙрд╕реА рд╕рдордп, рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдкрд░ рдХреБрдЫ рднреА рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛: рдЕрд╕рдВрдЧрддрд┐ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдРрд╕рд╛ рд╣реА рд░рд╣реЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЗрд╕ рдирд┐рд╖реНрдХрд░реНрд╖ рдкрд░ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА, рдЖрдЙрдЯрдкреБрдЯ рдХрддрд╛рд░ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓реЗрди-рджреЗрди, рдЕрд░реНрдерд╛рддреН рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рдм рдХреБрдЫ рдкрд░рдорд╛рдгреБ рд╣реИред
рддрджрдиреБрд╕рд╛рд░, рдПрдХ рддрдВрддреНрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдЯреЛрд░реЗрдЬ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рдмрджрд▓ рд╕рдХреЗрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЕрдВрджрд░ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рд╛рде рд▓реЗрдирджреЗрди рдХрд░ рд╕рдХреЗрдВред рдмреЗрд╢рдХ, рдЖрдк рд╣рдорд╛рд░реЗ рднрдВрдбрд╛рд░рдг рдХреЛ рдПрдХ рдмрд╛рд╣рд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЕрдВрджрд░ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╛рд░реНрдп рдиреЗ рдпрд╣ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрдЬрди рдФрд░ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдЗрдВрдЬрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдореИрдВ рд╕рдмрд╕реЗ рдХрдард┐рди рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред
рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдПрдХ рдмрд╛рд░ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдирд┐рд╖реНрдкрд╛рджрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБ рд╕реЗ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рдВрджреБ рдЕрддреАрдд рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрддрдорд╛рди рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рднреА рдХреНрд╖рдгреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ: рдпрд╛ рддреЛ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдпрд╛ рдереНрд░реВрдкреБрдЯ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЛ рдмрдЪрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣рдореЗрдВ рддреБрд░рдВрдд рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдХреБрдЫ рджреЗрд░реА рд╣реЛрдЧреА, рдпрд╣ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреЗ рдмрдврд╝рддреЗ рдЖрдХрд╛рд░ рдФрд░ рд░рд╛рдЬреНрдп рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмрдврд╝реЗрдЧрд╛ред
рдЗрд╕ рджреЗрд░реА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░рд╛рдЬреНрдп рдХреЛ рджреВрд╕рд░реЗ рдиреЛрдб рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдЬреБрдбрд╝реА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рджреЗрд░реА рднреА рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдПрдХ рд╕рдорд╕реНрдпрд╛ рдиреЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рднреА рдХреБрдЫ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЕрдХреНрд╕рд░ рдмрд╣реБрдд рдХреБрдЫред рдпрд╣ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рддрдереНрдп рд╕реЗ рдХрд┐ рдпрджрд┐ рд╣рдо рдПрдХ рдЫреЛрдЯреА рдкрд╣рдЪрд╛рди рдХрд╛ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд▓рдЧрд╛рддрд╛рд░ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛рдПрдВ рд╕рдВрднрд╡ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкреНрд░рд┐рдп рд╡рд┐рд╢реЗрд╖ рдкреНрд░рднрд╛рд╡ рд╣реЛрдВрдЧреЗред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдпрд╣ рдЕрдЪрд╛рдирдХ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ рднреА рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХрднреА-рдХрднреА рдХреБрдВрдж рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднреА рджреЗрд░реА рд╣реЛрддреА рд╣реИред рдРрд╕реЗ рдХреБрдВрджреЛрдВ рдХрд╛ рдХрд╛рд░рдг рд╡рд┐рд╡рд┐рдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
- рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ : GC рдкреЙрдЬрд╝, рдореЗрдореЛрд░реА рдлрд╝реНрд░реЗрдЧреНрдореЗрдВрдЯреЗрд╢рди, рдПрд▓реЛрдХреЗрд╢рди рдкреЙрдЬрд╝, рдХрд░реНрдиреЗрд▓ рд░реБрдХрд╛рд╡рдЯ рдФрд░ рдХрд╛рд░реНрдп рд╢реЗрдбреНрдпреВрд▓рд┐рдВрдЧ, рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░реНрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдБ рдЬреЛ рдордВрджреА рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИрдВред
- рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ : рд╣рд╛рдИ рдбрд┐рд╕реНрдХ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЛрдб, рд╕реАрдкреАрдпреВ рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рд╢реАрддрд▓рди рд╕рдорд╕реНрдпрд╛рдУрдВ, рдЕрдзрд┐рднрд╛рд░ рдЖрджрд┐ рдХреЗ рдХрд╛рд░рдг, рддрдХрдиреАрдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдбрд┐рд╕реНрдХ рдордВрджреАред
рдФрд░ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдзреАрдорд╛ рдХрд░ рд╕рдХрддреА рд╣реИред
рддрджрдиреБрд╕рд╛рд░, рдзреАрдорд╛ рдХрд░рдирд╛ рдПрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣ рдПрдХ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдХрднреА-рдХрднреА рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдпрд╛ рдордВрджреА рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЙрдЪреНрдЪ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЧрддрд┐ рдмрдирд╛рдП рд░рдЦрдирд╛ рдмреЗрд╣рдж рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддрд╛ рд╣реИред
рддреБрд░рдВрдд рд╕рд┐рд╕реНрдЯрдо рдХреЗ рджреЛрд╣рд░рд╛рд╡ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЙрдарддрд╛ рд╣реИ: рдЪрд▓реЛ рдПрдХ рдФрд░ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рджреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдпрд╛ рддреАрди рднреАред рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдФрд░ рдЕрд╕рдВрдЧрдд рдкреНрд░рдгрд╛рд▓реА рд╡реНрдпрд╡рд╣рд╛рд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдордп рд╣реИрдВрдбрд▓рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдЬреЛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╡рд░реНрдгрд┐рдд рджреЛрд╣рд░рд╛рд╡ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рд╕рдорд╡рд░реНрддреА рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред
рдпрд╣ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рде рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
- рдлреЗрд▓рд╕реЗрдл рд╡реНрдпрд╡рд╣рд╛рд░: рдпрджрд┐ рдиреЛрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдЧрд┐рд░рддрд╛ рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рдмрд╕ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдордиреНрд╡рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рджреВрд╕рд░реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрд╣рд▓реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдХреБрдВрдж рдирд┐рдХрд╛рд▓рдирд╛: рдЬрд┐рд╕рдиреЗ рднреА рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рдгрд╛рдо рджрд┐рдпрд╛, рд╡рд╣ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИред рджреВрд╕рд░реЗ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ рд░рд╛рдЬреНрдп рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕ рдХреНрд╖рдг рд╕реЗ рдЬрд╛рд░реА рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдард┐рди, рдХрдард┐рди рд▓рдВрдмреА рдЧрдгрдирд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдореВрд░реНрдЦ рд╣реЛрдВрдЧреЗ рдФрд░ рдХрд╛рдлреА рдХрдо рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди
рдЖрдЗрдП рдкреНрд░рджрд░реНрд╢рди рдХреЗ рджреЛрд╣рд░рд╛рд╡ рдХреЗ рд▓рд╛рднреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рд╣рд░ рджрд┐рди рдФрд╕рддрди рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ: рдпрд╛ рддреЛ рдЬреАрд╕реА рд╡рд┐рд╕реНрдлреЛрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдпрд╛ рдиреЛрдб рдЭреВрда рдмреЛрд▓ рд░рд╣рд╛ рд╣реИ, рдпрд╛ рдХрдВрдЯреЗрдирд░ рдХреИрдВрд╕рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рднреА рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо 10 рд╕реЗрдХрдВрдб рдореЗрдВ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рддрдм рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдкреИрдХ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдХреБрдЫ рд╣реЛрдЧрд╛ 10 / (24 ┬╖ 3600) тЙГ 1e-4
ред
рдпрджрд┐ рдЖрдк рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рджреЛ рд╣реИрдВрдбрд▓рд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдордХреНрдЦрд┐рдпрд╛рдВ тЙГ 1e-8
ред рддреЛ рдпрд╣ рдШрдЯрдирд╛ 23 рд╕рд╛рд▓ рдореЗрдВ рдЖ рдЬрд╛рдПрдЧреА! рд╣рд╛рдВ, рд╕рд┐рд╕реНрдЯрдо рдЙрддрдирд╛ рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдХрднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛!
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдкреИрдХ рдХреА рддреИрдпрд╛рд░реА рдХрд╛ рд╕рдордп рдФрд░ рднреА рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ / рдпрд╛ рдХреБрдВрдж рднреА рдХрдо рдмрд╛рд░ рд╣реЛрдЧрд╛, рддреЛ рдпрд╣ рдЖрдВрдХрдбрд╝рд╛ рдХреЗрд╡рд▓ рдмрдврд╝реЗрдЧрд╛ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рдорд╛рд░реЗ рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдкреНрд░рд╢реНрди рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ: рдЬрд╣рд╛рдВ рдПрдХ рд╕рдорд╡рд░реНрддреА рдмрд┐рд▓реНрдХреБрд▓ рдПрдХ рдмрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдирд╛ рд╣реИред рдФрд░ рдЬрд╡рд╛рдм рд╕рд░рд▓ рд╣реИ: рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдзрд╛ рд▓реЗрди-рджреЗрди
рдЖрдЧреЗ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдЖрдзреЗ рд▓реЗрдирджреЗрди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред
рдПрдХ рдмреИрдВрдХ рдЦрд╛рддреЗ рд╕реЗ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рдореЗрдВ рдзрдирд░рд╛рд╢рд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред Pseco рднрд╛рд╖рд╛ рдореЗрдВ рд▓реЗрдирджреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
transfer(from, to, amount): tx = db.begin_transaction() amount_from = tx.get(from) if amount_from < amount: return error.insufficient_funds tx.set(from, amount_from - amount) tx.set(to, tx.get(to) + amount) tx.commit() return ok
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдЧрд░ рдпреЗ рд▓реЗрдирджреЗрди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рддрд╛рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
transfer(from, to, amount): # lock_from = db.lock(from) lock_to = db.lock(to) amount_from = db.get(from) if amount_from < amount: return error.insufficient_funds db.set(from, amount_from - amount) db.set(to, db.get(to) + amount) return ok
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЧрддрд┐рд░реЛрдз рдкреИрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдХреНрд░рдореЛрдВ рдореЗрдВ рддрд╛рд▓реЗ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рде рдПрдХ рдирд┐рдпрддрдХрд╛рд▓рд┐рдХ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдХрдИ рддрд╛рд▓реЗ рд▓реЗрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ), рдЬреЛ рд╕рдВрднрд╡ рдЧрддрд┐рд░реЛрдз рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рд╣рдж рддрдХ рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
transfer(from, to, amount): lock_from = db.lock(from) amount_from = db.get(from) if amount_from < amount: return error.insufficient_funds db.set(from, amount_from - amount) lock_from.release() # , # .. db.set(db.get...) lock_to = db.lock(to) db.set(to, db.get(to) + amount) return ok
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдХреЛ рднреА рд╕реБрд╕рдВрдЧрдд рдмрдирд╛рддрд╛ рд╣реИ, рдзрди рдХреЗ рдЕрддреНрдпрдзрд┐рдХ рд╡реНрдпрдп рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ред рдкрд┐рдЫрд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЦрд╛рддреЗ рдЕрд╕рдВрдЧрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВред рдЕрд░реНрдерд╛рддреН, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЦрд╛рддреЛрдВ рдореЗрдВ рдзрди рдХреА рдХреБрд▓ рд╕реНрдерд┐рддрд┐ рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, lock_from.release()
рдФрд░ db.lock(to)
рдмреАрдЪ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрд╕рдВрдЧрдд рдореВрд▓реНрдп рджреЗ рд╕рдХрддрд╛ рд╣реИ: рдХреБрд▓ рд░рд╛рд╢рд┐ рд╕рд╣реА рдПрдХ рдиреАрдЪреЗ рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдкреИрд╕реЗ рдХреЛ рджреЛ рдЖрдзреЗ рд▓реЗрдирджреЗрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдирджреЗрди рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
- рдкрд╣рд▓рд╛ рдЖрдзрд╛ рд▓реЗрди-рджреЗрди рдПрдХ рдЪреЗрдХ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЦрд╛рддреЗ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд░рд╛рд╢рд┐ рдХрд╛рдЯрддрд╛ рд╣реИред
- рджреВрд╕рд░реЗ рдЖрдзреЗ рд▓реЗрди-рджреЗрди рдХреА рдЖрд╣рд░рдг рд░рд╛рд╢рд┐ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рдореЗрдВ рд▓рд┐рдЦрддреА рд╣реИред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд▓реЗрди-рджреЗрди рдХреЛ рдЫреЛрдЯреЗ рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛, рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рдирд╛, рд▓реЗрдирджреЗрди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рднреА рдЖрдзреЗ рд▓реЗрдирджреЗрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреВрд░реЗ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рд╕рднреА рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдЬреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реИрдВред рдпрд╣ рдареАрдХ рд╡рд╣реА рд╣реИ рдЬреЛ рдПрдХ рдЖрдзрд╛ рд▓реЗрди-рджреЗрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдкрддреНрддрд┐ рд╣реИред
рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдХреБрдЫ рд╕реНрдерд┐рд░рддрд╛ рдЦреЛрдиреЗ рдкрд░, рд╣рдо рдлрд┐рд░ рднреА рдПрдХ рдФрд░ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ: рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛, рдФрд░, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдмреЗрд╣рддрд░ рдорд╛рдкрдиреАрдпрддрд╛ред рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдПрдХ рдЖрдзрд╛ рд▓реЗрдирджреЗрди рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЕрдиреНрдп рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛, рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдирд╛, рдЬрд╛рдВрдЪрдирд╛ рдФрд░ рдмрджрд▓рдирд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдк рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдлреЗрд░рдмрджрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд▓реЗрдирджреЗрди рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╢рд╛рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╖рдо рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЖрдзрд╛ рд▓реЗрди-рджреЗрди рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рднрдВрдбрд╛рд░рдг рдкрд░ рд╢реБрд░реВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдРрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЧреБрдг рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рд╡реИрдз рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЕрд░реНрдз-рдЯреНрд░рд╛рдиреНрд╕ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рд░реЗрдХ рдирд╣реАрдВ? рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓реЙрдХ-рдлреНрд░реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рддрд╛рд▓рд╛ рдореБрдХреНрдд
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЙрдХ-рдлреНрд░реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрднреА-рдХрднреА рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдкрд╣реБрдВрдЪ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреБрджрд╛рдИ рдХрд░реЗрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рддрд╛рд▓рд╛-рдореБрдХреНрдд рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХреНрдпреЛрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред
рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрднреА-рдХрднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ рдХрд┐ рд▓реЙрдХ-рдлреНрд░реА рдХреНрдпрд╛ рд╣реИред рд╕рдВрдХреАрд░реНрдг рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░рдорд╛рдгреБ рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрд╣рд╛рдВ рдпрд╣ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд▓реЙрдХ-рдлреНрд░реА рдХрд╛ рдЕрд░реНрде рд╣реИ "рдкрд░рдорд╛рдгреБрдУрдВ" рдХрд╛ рдЙрдкрдпреЛрдЧ, рд╡рд┐рдкрд░реАрдд рд╕рдЪ рдирд╣реАрдВ рд╣реИ, рдЕрд░реНрдерд╛рдд рд╕рднреА "рдПрдЯреЙрдорд┐рдХреНрд╕" рд▓реЙрдХ-рдлреНрд░реА рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред
рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдкрддреНрддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдзрд╛рдЧрд╛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рдЧрддрд┐ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рдХрдИ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ (рдпрд╣ рдПрдХ рдРрд╕реА рдХреБрдВрдж рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдорд┐рд▓ рд╕рдХрддреА рд╣реИ)ред рдпрд╣рд╛рдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рдкреНрд░рдЧрддрд┐ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдзрд╛рдЧреЗ рдХреЗ рдХреБрдВрдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдХреНрд╕рд░ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдЧрдВрднреАрд░ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реИрдВред
рдХрдо рд╕реЗ рдХрдо рдПрдХ рдзрд╛рдЧреЗ рдХреА рдкреНрд░рдЧрддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдПрдХ рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдХреНрдпреЛрдВ рдирдХрд╛рд░рддреА рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдкрд┐рдирд▓реЙрдХ рднреА рд▓реЙрдХ-рдлрд╝реНрд░реА рд╣реЛрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЬрд┐рд╕рдиреЗ рддрд╛рд▓рд╛ рд▓рд┐рдпрд╛ рд╡рд╣ рдкреНрд░рдЧрддрд┐ рдХрд░реЗрдЧрд╛ред рдХреНрдпрд╛ рдкреНрд░рдЧрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдзрд╛рдЧрд╛ рд╣реИ => рд▓реЙрдХ-рдлрд╝реНрд░реА?
рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдмрд┐рдирд╛ рд▓реЙрдХ рдХреЗ рд▓реЙрдХ-рдлреНрд░реА рдХрд╛ рдорддрд▓рдм рд╣реИ, рдЬрдмрдХрд┐ рдЗрд╕рдХреЗ рдирд╛рдо рд╕реЗ рд╕реНрдкрд┐рдирд▓реЙрдХ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓реЙрдХ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкреНрд░рдЧрддрд┐ рдкрд░ рдПрдХ рд╢рд░реНрдд рдЬреЛрдбрд╝рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреБрдВрдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреАред рдЖрдЦрд┐рд░рдХрд╛рд░, рдпреЗ рджреЗрд░реА рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рд░рд╣ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рднрд╛рд╖рд╛ рдКрдкрд░реА рд╕рдордп рд░реЗрдЦрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рддреА рд╣реИред рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рджреЗрд░реА рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЗ рдЕрд░реНрде рдореЗрдВ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рдЧрддрд┐ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред
рд▓реЗрдХрд┐рди рдХрд┐рд╕рдиреЗ рдХрд╣рд╛ рдХрд┐ рд▓реЙрдХ-рдлреНрд░реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ? рд╡рд┐рднрд┐рдиреНрди рдиреЛрдбреНрд╕ рдкрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдиреЛрдб рдкрд░ рдПрдХ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛, рдФрд░ рд╕рд╛рдЭрд╛ рд╡рд┐рддрд░рд┐рдд рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд╕рд╛рде рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА, рд╣рдореЗрдВ рд▓реЙрдХ-рдлреНрд░реА рд╡рд┐рддрд░рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдорд┐рд▓рддрд╛ рд╣реИред
рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдПрдХ рдиреЛрдб рдбреНрд░реЙрдк рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рдереНрд░реЗрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рдо рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдЙрд╕реА рд╕рдордп, рд▓реЙрдХ-рдореБрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдЕрдиреНрдп рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢реЗрд╖ рд▓реЙрдХ-рдлреНрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рдХрд╛рдЯ рд╕рдХрддрд╛ рд╣реИред
рд╕рдЯреАрдХ-рдПрдХ рдмрд╛рд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рдирд┐рд░рдВрддрд░ рд╡рд┐рддрд░рд┐рдд рднрдВрдбрд╛рд░рдг рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рднрдВрдбрд╛рд░рдг рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдирд┐рд░рдВрддрд░ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрднрд╡ рд╕рдВрдЪрд╛рд▓рди: set
, get
, del
ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓реЙрдХ-рдореБрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдСрдкрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдХреИрд╕ рдпрд╛ рддреБрд▓рдирд╛-рдФрд░-рд╕реНрд╡реИрдкред рдЖрдЗрдП рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдпрд╣ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред
рдХреИрд╕
рдХреИрд╕ рдпрд╛ рддреБрд▓рдирд╛-рдФрд░-рдЕрджрд▓рд╛-рдмрджрд▓реА рддрд╛рд▓рд╛-рдореБрдХреНрдд рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛-рдореБрдХреНрдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдЖрджрд┐рдо рд╣реИред рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд Pseco рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
CAS(var, expected, new): # , atomic, atomic: if var.get() != expected: return false var.set(new) return true
рдХрднреА-рдХрднреА, рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП, рд╡реЗ true
рдпрд╛ false
рдирд╣реАрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд┐рдЫрд▓реЗ рдореВрд▓реНрдп, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рдмрд╛рд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрд╢рди рдПрдХ рд▓реВрдк рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ expected
рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП:
CAS_optimized(var, expected, new): # , atomic, atomic: current = var.get() if current == expected: var.set(new) return current # CAS CAS_optimized CAS(var, expected, new): return var.CAS_optimized(expected, new) == expected
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдкрдврд╝рдиреЗ рдХреЛ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо CAS
рдПрдХ рд╕рд░рд▓ рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрддрд╛ рд╣реИред рдпрд╛рдиреА рдкрд╣рд▓реЗ рд╣рдо рд╕реНрдЯреЛрд░ рд╕реЗ рдореВрд▓реНрдп рдкрдврд╝рддреЗ рд╣реИрдВ, рдбреЗрдЯрд╛ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░ рд╣рдо рдпрд╣ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рд░ рдмрд╛рд░ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдкрд░ рд╕рдВрд╕реНрдХрд░рдг рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ:
CAS_versioned(var, expected_version, new): atomic: if var.get_version() != expected_version: return false var.set(new, expected_version + 1) return true
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдПрдмреАрдП рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд╕рд╛рде рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЕрджреНрдпрддрди рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рдВрд╕реНрдХрд░рдг рдХреЛ Etcd рдФрд░ Zookeeper рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЙрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдкрддреНрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдЬреЛ CAS_versioned
рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рджреЗрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреЗ рдмрд┐рдирд╛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдВ, рдпрджрд┐ рдСрдкрд░реЗрд╢рди рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛, рддреЛ рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдм рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рддрд░реНрдХ рдХреЗ рдЖрдХреНрд░рдордгрдХрд╛рд░рд┐рдпреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдбрд░ рдХреЗ рдмрд┐рдирд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдпрд╣ рд╡рд╣ рд╕рдВрдкрддреНрддрд┐ рд╣реИ рдЬреЛ CAS_versioned
рдХрд╛рд░реНрд░рд╡рд╛рдИ CAS_versioned
ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдЕрдВрддрд╣реАрди рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрддреА рд╣реИред рдЬреЛ, рдмрджрд▓реЗ рдореЗрдВ, рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рдХрдХреНрд╖рд╛ рдХреЛ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ, CAS_versioned
рдФрд░ рдЖрдзреЗ рд▓реЗрдирджреЗрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдЦрд╛рддреЗ рд╕реЗ рджреВрд╕рд░реЗ рдЦрд╛рддреЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Etcd рдХреА рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рддрд┐рдпреЛрдВ рдореЗрдВ рд╣реИрдВред рдпрд╣рд╛рдБ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ CAS_versioned
рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ CAS_versioned
рд╣реА рджрд┐рдП рдЧрдП API рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
withdraw(from, amount): # CAS- while true: # version_from, amount_from = from.get_versioned() if amount_from < amount: return error.insufficient_funds if from.CAS_versioned(version_from, amount_from - amount): break return ok deposit(to, amount): # CAS- while true: version_to, amount_to = to.get_versioned() if to.CAS_versioned(version_to, amount_to + amount): break return ok transfer(from, to, amount): # if withdraw(from, amount) is ok: # , # deposit(to, amount)
рдпрд╣рд╛рдВ рд╣рдордиреЗ рдЕрдкрдиреЗ рдСрдкрд░реЗрд╢рди рдХреЛ рдЖрдзрд╛ рд▓реЗрди-рджреЗрди рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЖрдзрд╛ рд▓реЗрди-рджреЗрди CAS_versioned
рдСрдкрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЦрд╛рддреЗ рдХреЗ рд╕рд╛рде рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рд╖рдо рднрдВрдбрд╛рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИред рдЖрдзреА-рд▓реЗрди-рджреЗрди рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдЬреЛ рд╣рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреА рд╣реИ, рд╡рд╣ рд╣реИ рдзрди рдХреА рд╣рд╛рдирд┐ред
рдмрд╛рд░реА
рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдШрдЯрдирд╛ рдХрддрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣реИрдВрдбрд▓рд░ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдСрд░реНрдбрд░ рдХреА рдЧрдИ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдЧреБрдо рдпрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рди рд╣реЛред рддрджрдиреБрд╕рд╛рд░, рд╣реИрдВрдбрд▓рд░ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рднреА рдЗрдВрдЯрд░реИрдХреНрд╢рди рдЗрд╕ рдЖрджрд┐рдо рдкрд░ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рдЖрдиреЗ рд╡рд╛рд▓реА рдФрд░ рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрд╛ рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдСрдбрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣реИрдВрдбрд▓рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХрддрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧреА:
- рдХрддрд╛рд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВред
- рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реВрдЪрдХрд╛рдВрдХ рдкрд░ рдХрддрд╛рд░ рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдореИрдВ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдХрддрд╛рд░ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛:
- рдХрдИ рдкреНрд░реЛрд╕реЗрд╕рд░ рдПрдХ рд╣реА рдХрддрд╛рд░ рд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╣рдЯрд╛рдирд╛ рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред
- рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рдСрдбрд┐рдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд▓рдВрдмреЗ рдЕрдВрддрд░рд╛рд▓ (рджрд┐рди рдпрд╛ рд╕рдкреНрддрд╛рд╣) рдХреЗ рд▓рд┐рдП рдПрдХ рдХрддрд╛рд░ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИред рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
- рдЖрдк рдкреБрд░рд╛рдиреЗ рдЖрдЗрдЯрдо рдХреЛ рдпрд╛ рддреЛ рд╢реЗрдбреНрдпреВрд▓ рдкрд░ рдпрд╛ рдХрддрд╛рд░ рдХреЗ рдЖрдЗрдЯрдо рдкрд░ TTL рд╕реЗрдЯ рдХрд░рдХреЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЭрд╛рдбрд╝реВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рд╕реЗрдХрдВрдб рдХреЗ рдХреНрд░рдо рдХрд╛ рд╣реИ, рдФрд░ рджрд┐рдиреЛрдВ рдХреЗ рдЖрджреЗрд╢ рдХрд╛ TTL рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рд╡рд░реНрддрдорд╛рди рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдореВрд▓реНрдпред рдпрд╣ рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░ рдХреЗ рдЕрдВрдд рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред
- , .
lock-free
: . :
- CAS .
- .
, , .
- lock-free . , , . Lock-free? ! , 2 : . lock-free, тАФ ! , , , . . , .. , .
- . , . .
, lock-free .
Lock-free
, , : , .. , :
push(queue, value): # index = queue.get_current_index() while true: # , # var = queue.at(index) # = 0 , .. # , if var.CAS_versioned(0, value): # , queue.update_index(index + 1) break # , . index = max(queue.get_current_index(), index + 1) update_index(queue, index): while true: # cur_index, version = queue.get_current_index_versioned() # , # , . if cur_index >= index: # - , # break if queue.current_index_var().CAS_versioned(version, index): # , break # - . # , ,
. , ( тАФ , , ). lock-free . ?
, push
, ! , , .
. : . , - , - . , , .. . . ? , .. , , .
, , . рдпрд╛рдиреА . , , . , .
, . , . , , . , .
, , , .
. .
, :
- , .. stateless.
- , тАФ .
, , concurrent exactly-once .
:
handle(input, output): index = 0 while true: value = input.get(index) output.push(value) index += 1
. :
handle(input, output, state): # index = state.get() while true: value = input.get(index) output.push(value) index += 1 # state.set(index)
exactly-once . , , , .
exactly-once , , . .., , , , , тАФ :
# get_next_index(queue): index = queue.get_index() # while queue.has(index): # queue.push index = max(index + 1, queue.get_index()) return index # . # true push_at(queue, value, index): var = queue.at(index) if var.CAS_versioned(0, value): # queue.update_index(index + 1) return true return false handle(input, output, state): # # {PREPARING, 0} fsm_state = state.get() while true: switch fsm_state: case {PREPARING, input_index}: # : , # output_index = output.get_next_index() fsm_state = {WRITING, input_index, output_index} case {WRITING, input_index, output_index}: value = input.get(input_index) if output.push_at(value, output_index): # , input_index += 1 # , push_at false, # fsm_state = {PREPARING, input_index} state.set(fsm_state)
push_at
? , . , , , . , . . - , lock-free .
, :
- : .
- , : .
: concurrent exactly-once .
? :
- , ,
push_at
false. . - , . , , .
concurrent exactly-once ? , , . , . .
:
# , , # .. true, # true. # false push_at_idempotent(queue, value, index): return queue.push_at(value, index) or queue.get(index) == value handle(input, output, state): version, fsm_state = state.get_versioned() while true: switch fsm_state: case {PREPARING, input_index}: # , , # output_index = output.get_next_index() fsm_state = {WRITING, input_index, output_index} case {WRITING, input_index, output_index}: value = input.get(input_index) # , # if output.push_at_idempotent(value, output_index): input_index += 1 fsm_state = {PREPARING, input_index} # if state.CAS_versioned(version, fsm_state): version += 1 else: # , version, fsm_state = state.get_versioned()
:

, . , .
kernel panic, , .. . . : , . , .
, , .
: .
: , , , , :
# : # - input_queues - # - output_queues - # - state - # - handler - : state, inputs -> state, outputs handle(input_queues, output_queues, state, handler): # version, fsm_state = state.get_versioned() while true: switch fsm_state: # input_indexes case {HANDLING, user_state, input_indexes}: # inputs = [queue.get(index) for queue, index in zip(input_queues, input_indexes)] # , next_indexes = next(inputs, input_indexes) # # user_state, outputs = handler(user_state, inputs) # , # fsm_state = {PREPARING, user_state, next_indexes, outputs, 0} case {PREPARING, user_state, input_indexes, outputs, output_pos}: # , # output_index = output_queues[output_pos].get_next_index() # fsm_state = { WRITING, user_state, input_indexes, outputs, output_pos, output_index } case { WRITING, user_state, input_indexes, outputs, output_pos, output_index }: value = outputs[output_pos] # if output_queues[output_pos].push_at_idempotent( value, output_index ): # , output_pos += 1 # , PREPARING. # # fsm_state = if output_pos == len(outputs): # , # {HANDLING, user_state, input_indexes} else: # # , # {PREPARING, user_state, input_indexes, outputs, output_pos} if state.CAS_versioned(version, fsm_state): version += 1 else: # , version, fsm_state = state.get_versioned()
:

: HANDLING
. , .., , . , . , PREPARING
WRITING
, . , HANDLING
.
, , , . , . , .
. . .

:
my_handler(state, inputs): # state.queue.push(inputs) # duration state.queue.trim_time_window(duration) # avg = state.queue.avg() need_update_counter = state.queue.size() > size_boundary return state, [ avg, if need_update_counter: true else: # none none ]
, , concurrent exactly-once handle
.
:
handle_db(input_queue, db): while true: # tx = db.begin_transaction() # . # , # index = tx.get_current_index() # tx.write_current_index(index + 1) # value = intput_queue.get(index) if value: # tx.increment_counter() tx.commit() # , , #
. рдХреНрдпреЛрдВрдХрд┐ , , , , concurrent exactly-once . .
тАФ . , , .
, , . , , .
. , . рдХреНрдпреЛрдВрдХрд┐ , . . .
тАФ . , , . , - , , . , .. , , .
. , , . , , .
. , . : , . , .
, , :
- , . .
- . , .
- . , . , , . рдпрд╛рдиреА . : .
, , -, , -, .
, . :
transfer(from, to, amount): # if withdraw(from, amount) is ok: # , # deposit(to, amount)
withdraw
, , deposit
: ? deposit
- (, , ), . , , , , ? , , - , .
, , , . , , , . , . , , . рдХреНрдпреЛрдВрдХрд┐ , , . , : , тАФ .
, .
: , , , , . , - :
, , .
, , .. , , . , .
: lock-free , . , .. , .
CAS . , :
# , handle(input, output, state): # ... while true: switch fsm_state: case {HANDLING, ...}: # fsm_state = {PREPARING, ...} case {PREPARING, input_index}: # ... output_index = ...get_next_index() fsm_state = {WRITING, output_index, ...} case {WRITING, output_index, ...}: # , output_index
, . . :
- PREPARING . , .
- WRITING . . , PREPARING .
, . , , тАФ . :
- . , , .. , .
- , .. . , .
, lock-free , , .
, . , Stale Read , . тАФ CAS: . :
- Distributed single register тАФ (, etcd Zookeeper):
- Linearizability
- Sequential consistency
- Transactional тАФ (, MySQL, PostgreSQL ..):
- Serializability
- Snapshot Isolation
- Repeatable Read
- Read Committed
- Distributed Transactional тАФ NewSQL :
- Strict Consistency
: ? , , . , , CAS . , , Read My Writes .
рдирд┐рд╖реНрдХрд░реНрд╖
exactly-once . , .. , , , . , , , , .. , .
lock-free .
:
- : .
- : .
- : : exactly-once .
- Concurrent : .
- Real-time : .
- Lock-free : , .
- Deadlock free : , .
- Race condition free : .
- Hot-hot : .
- Hard stop : .
- No failover : .
- No downtime : .
- : , .
- : .
- : .
- : .
, . рд▓реЗрдХрд┐рди рд╡рд╣ рдПрдХ рдФрд░ рдХрд╣рд╛рдиреА рд╣реИред

:
- Concurrent exactly-once.
- Semi-transactions .
- Lock-free two-phase commit, .
- .
- lock-free .
- .
рд╕рд╛рд╣рд┐рддреНрдп
[1] : ABA.
[2] Blog: You Cannot Have Exactly-Once Delivery
[3] : .
[4] : 3: .
[5] : .