рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдХреНрдХрд╛ 2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЯрд╛рдЗрдкрд╕реЗрдХ рд╕реНрдЯреИрдХ 2.0 рдХреА рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рд╕реЗ рдкрд░рд┐рдЪрдп

рдЫрд╡рд┐

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

рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓

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

рдЕрдХреНрдХрд╛

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдХреНрдХрд╛ рдЬреЗрд╡реАрдПрдо рдкрд░ рдПрдХ рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЛ рдЕрдиреНрдпрдерд╛ рд╣рд▓реНрдХреЗ рдзрд╛рдЧреЗ (рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рдзрд╛рдЧреЗ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд▓реНрдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ ~ 2.7 рдорд┐рд▓рд┐рдпрди рдкреНрд░рддрд┐ 1 рдЬреАрдмреА рд░реИрдо рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИ, рдФрд░ рдкреНрд░реЗрд╖рд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдиреЛрдб рдкрд░ 20 рдорд┐рд▓рд┐рдпрди / рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЬреЛ рд╡рд┐рдХрд╕рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд▓рдЧрднрдЧ рдЕрд╕реАрдорд┐рдд рдорд╛рдкрдиреАрдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдХреНрдХрд╛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдЯрд╛рдЗрдкрд╕реЗрдл рдФрд░ рдЕрдХреНрдХрд╛ рдЙрджрд╛рд╣рд░рдг

рдореВрд▓: рдпрд╣рд╛рдБ

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

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо PI рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдСрдкрд░реЗрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЧрд╣рдирддрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдХреНрдХрд╛ рдЖрдкрдХреЛ рдорд▓реНрдЯреА-рдХреЛрд░ рдорд╢реАрди рдкрд░ рд╕реНрдХреЗрд▓реЗрдмрд▓, рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЧрдгрдирд╛ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдЬреЛ рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИред рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

рдЫрд╡рд┐

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

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрдорд╛рдг

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ giter8 рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЯрд╛рдЗрдкрд╕реЗрдХ рд╕реНрдЯреИрдХ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП):
c:\temp>g8 typesafehub/akka-scala-sbt

Akka 2.0 Project Using Scala and sbt

organization [org.example]: akka.tutorial
package [org.example]: akka.tutorial.first.scala
name [Akka Project In Scala]: PI Calculator
akka_version [2.0]:
version [0.1-SNAPSHOT]:

Applied typesafehub/akka-scala-sbt.g8 in pi-calculator

рдЕрдм рдЬрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдБ:
c:\temp>cd pi-calculator

рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЙрдкрдпреБрдХреНрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ ./src/main/scala/akka/tutorial/first/scala/ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ( ./src/main/scala/akka/tutorial/first/scala/ ) рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдпрд╛рдд рдХрд░реЗрдВ:
import akka.actor._
import akka.routing.RoundRobinRouter
import akka.util.Duration
import akka.util.duration._

рд╕рдВрджреЗрд╢ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдирд╛

рд╣рдо рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ Master рдЕрднрд┐рдиреЗрддрд╛ рд╣реИ рдЬреЛ рдХрдИ Worker рдЕрднрд┐рдиреЗрддрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЧрдгрдирд╛ рдХреЛ рдЖрд░рдВрдн рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдкреВрд░реЗ рдХрд╛рд░реНрдп рдХреЛ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ Worker рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, Worker рдПрдХреНрдЯрд░ рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЧрдгрдирд╛ рдкреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, Master рдЕрднрд┐рдиреЗрддрд╛ рдЕрднрд┐рдиреЗрддрд╛ рдХреЛ Listener рдкрд░рд┐рдгрд╛рдо рднреЗрдЬрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рд╡рд┐рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдЙрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ:

рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ, рдорд╛рдорд▓реЗ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИрдВред рд╣рдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЖрдзрд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рднреА рдмрдирд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЬреЛрдбрд╝ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
 рд╕реАрд▓рдмрдВрдж рд╡рд┐рд╢реЗрд╖рддрд╛ PiMessage
 рдХреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЧрдгрдирд╛ рдкрд╛рдИрдореИрд╕реЗрдЬ рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИ
 рдХреЗрд╕ рдХреНрд▓рд╛рд╕ рд╡рд░реНрдХ (рд╢реБрд░реВ: рдЗрдВрдЯ, рдПрдирдЖрд░рдУрдлрд╝реЗрд╣рд▓реНрдЯреНрд╕: рдЗрдВрдЯ) рдкреАрдореИрд╕реЗрдЬ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ
 рдХреЗрд╕ рдХреНрд▓рд╛рд╕ рд░рд┐рдЬрд▓реНрдЯ (рдорд╛рди: рдбрдмрд▓) рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ PiMessage рд╣реИ
 рдорд╛рдорд▓рд╛ рдХрдХреНрд╖рд╛ PiApproximation (pi: рдбрдмрд▓, рдЕрд╡рдзрд┐: рдЕрд╡рдзрд┐)

Worker рдПрдХреНрдЯрд░ рдмрдирд╛рдирд╛

рдЕрдм рд╣рдо рдПрдХ Worker рдПрдХреНрдЯрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ Actor рдЧреБрдг рдореЗрдВ рдорд┐рд╢реНрд░рдг рдФрд░ рдПрдХ receive рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рддрд░реАрдХрд╛ рдПрдХ рдЗрдирдХрдорд┐рдВрдЧ рдореИрд╕реЗрдЬ рд╣реИрдВрдбрд▓рд░ рд╣реИ:
 рдХреНрд▓рд╛рд╕ рд╡рд░реНрдХрд░ рдиреЗ рдирд┐рдХрд╛рд▓рд╛ рдПрдХреНрдЯрд░ {

   // рдХреИрд▓реНрдХреНрдпреБрд▓реЗрдЯрд░

   рдкрд░рд╛рдЬрдп = {
     рдорд╛рдорд▓рд╛ рдХрд╛рд░реНрдп (рдкреНрд░рд╛рд░рдВрдн, nrOfElements) тЗТ
       рдЗрд╕!  рдкрд░рд┐рдгрд╛рдо (рдЧрдгрдирд╛рдкрд╛рдЗрдлрд╝реЛрд░ (рд╢реБрд░реВ, nrOfElements)) // рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
   }
 }

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ Work рдореИрд╕реЗрдЬ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдЬреЛ рдХрд┐ calculatePiFor рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж Result рд░рд┐рд╕реНрдкрд╛рдВрд╕ рдореИрд╕реЗрдЬ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рднреЗрдЬ рджреЗрддрд╛ рд╣реИред рдЕрдм рд╣рдо calculatePiFor рд▓рд╛рдЧреВ рдХрд░рддреЗ calculatePiFor :
 рдбреАрдИрдПрдлрд╝ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ (рд╢реБрд░реВ рдХрд░реЗрдВ: Int, nrOfElements: Int): рдбрдмрд▓ = {
   var acc = 0.0
   рдХреЗ рд▓рд┐рдП (рдореИрдВ (рд╢реБрд░реВ рддрдХ (рд╢реБрд░реВ + nrOfElements))
     acc + = 4.0 * (1 - (i% 2) * 2) / (2 * i + 1)
   рдПрд╕реАрд╕реА
 }


рдПрдХ Master рдПрдХреНрдЯрд░ рдмрдирд╛рдирд╛

Master рдЕрднрд┐рдиреЗрддрд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ, Worker рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╡рд┐рддрд░рдг рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрдХреНрд░реАрдп рд░рд╛рдЙрдЯрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 рд╡реИрд▓ рд╡рд░реНрдХрд░ рд░рд╛рдЙрдЯрд░ = рд╕рдВрджрд░реНрдн.рдРрдХреНрдЯреЙрд░рдСрдл (
   рдкреНрд░реЙрдкреНрд╕ [рд╡рд░реНрдХрд░] .withRouter (RoundRobinRouter (nrOfWorkers)), рдирд╛рдо = "рд╡рд░реНрдХрд░ рд░рд╛рдЙрдЯрд░")

рдЕрдм рд╣рдо рдЦреБрдж Master рдПрдХреНрдЯрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдпрд╣ рдЕрднрд┐рдиреЗрддрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реИрдВ:
 рдХрдХреНрд╖рд╛ рдорд╛рд╕реНрдЯрд░ (nrOfWorkers: Int, 
   nrOfMessages: рдЗрдВрдЯ, 
   nrOfElements: Int, 
   рд╢реНрд░реЛрддрд╛: рдЕрднрд┐рдиреЗрддрд╛ (рдЕрднрд┐рдиреЗрддрд╛) {

   var pi: рдбрдмрд▓ = _
   var nrOfResults: Int = _
   рд╡реИрд▓ рд╢реБрд░реВ: рд▓рдВрдмреА = System.currentTimeMillis

   рд╡реИрд▓ рд╡рд░реНрдХрд░ рд░рд╛рдЙрдЯрд░ = рд╕рдВрджрд░реНрдн.рдРрдХреНрдЯреЙрд░рдСрдл (
     рдкреНрд░реЙрдкреНрд╕ [рд╡рд░реНрдХрд░] .withRouter (RoundRobinRouter (nrOfWorkers)), рдирд╛рдо = "рд╡рд░реНрдХрд░ рд░рд╛рдЙрдЯрд░")

   рдкрд░рд╛рдЬрдп = {
     // рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВ ...
   }

 }

рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, ActorRef рдСрдмреНрдЬреЗрдХреНрдЯ, рдЬреЛ рдХрд┐ Listener рдЕрднрд┐рдиреЗрддрд╛ рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИ, Master рдЕрднрд┐рдиреЗрддрд╛ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╣рдореЗрд╢рд╛ рдРрд╕реЗ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рд╕рдВрджреЗрд╢ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдЕрдм рд╣рдо рд▓рд┐рдЦреЗрдВрдЧреЗ:
 рдкрд░рд╛рдЬрдп = {
   рдорд╛рдорд▓реЗ рдХреА рдЧрдгрдирд╛ тЗТ
     рдХреЗ рд▓рд┐рдП (i (0 рддрдХ nrOfMessages) 
       workerRouter!  рдХрд╛рдо (i * nrOfElements, nrOfElements)
   рдорд╛рдорд▓рд╛ рдкрд░рд┐рдгрд╛рдо (рдорд╛рди) тЗТ
     pi + = рдорд╛рди
     nrOfResults + = 1
     рдЕрдЧрд░ (nrOfResults == nrOfMessages) {
       // рдкрд░рд┐рдгрд╛рдо рд╢реНрд░реЛрддрд╛ рдХреЛ рднреЗрдЬреЗрдВ
       рд╢реНрд░реЛрддрд╛!  рдкрд╛рдЗрдкреНрд░реЛрд╕реЗрдкреНрд╢рди (рдкреАрдЖрдИ, рдЕрд╡рдзрд┐ = (System.currentTimeMillis - start) .millis
       // рдЗрд╕ рдЕрднрд┐рдиреЗрддрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рднреА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдгреАрдп рдмрдЪреНрдЪреЛрдВ рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИ
       рд╕рдВрджрд░реНрднред рд╕реНрдЯреЙрдк (рд╕реНрд╡)
     }
 }

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЧрдгрдирд╛ рдкреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рдкрд░рд┐рдгрд╛рдо рдореБрджреНрд░рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, Master рдЕрднрд┐рдиреЗрддрд╛ рдХреЛ context.stop(self) рд╕рд╛рде рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред context.stop(self) рдХрдорд╛рдВрдбред

рдПрдХ Listener рдЕрднрд┐рдиреЗрддрд╛ рдмрдирд╛рдирд╛

рдЗрд╕ рдЕрднрд┐рдиреЗрддрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдпрд╣ Master рдЕрднрд┐рдиреЗрддрд╛ рд╕реЗ рдПрдХ PiApproximation рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрднрд┐рдиреЗрддрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ:
 рд╡рд░реНрдЧ рд╢реНрд░реЛрддрд╛ рдЕрднрд┐рдиреЗрддрд╛ {
   рдкрд░рд╛рдЬрдп = {
     рдорд╛рдорд▓рд╛ рдкрд╛рдЗрдкреНрд░реЛрд╕реЗрдкреНрд╢рди (pi, рдЕрд╡рдзрд┐) тЗТ
       Println ("\ n \ tPi рд╕рдиреНрдирд┐рдХрдЯрди: \ t \ t% s \ n \ t рд╕рдорд╛рдкреНтАНрдд рд╕рдордп: \"% s "
         .рдлреЙрд░реНрдореИрдЯ (рдкреАрдЖрдИ, рдЕрд╡рдзрд┐))
       рд╕рдВрджрд░реНрднред system.shutdown ()
   }
 }


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд┐рдЦрдирд╛

рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рддреИрдпрд╛рд░ рд╣реИ:
 рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рдИ рдРрдк {

   рдЧрдгрдирд╛ (nrOfWorkers = 4, nrOfElements = 10000, nrOfMessages = 10000)

   // рдЕрднрд┐рдиреЗрддрд╛ рдФрд░ рд╕рдВрджреЗрд╢ ...

   def рдЧрдгрдирд╛ (nrOfWorkers: Int, nrOfElements: Int, nrOfMessages: рдЗрдВрдЯ {
     // рдПрдХ рдЕрдХрд╛ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдПрдВ
     рд╡реИрд▓ рд╕рд┐рд╕реНрдЯрдо = рдЕрднрд┐рдиреЗрддрд╛ рдкреНрд░рдгрд╛рд▓реА ("рдкреАрдЖрдИрдПрд╕ рд╕рд┐рд╕реНрдЯрдо")

     // рдкрд░рд┐рдгрд╛рдо рд╢реНрд░реЛрддрд╛ рдмрдирд╛рдПрдВ, рдЬреЛ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛ рдФрд░ 
     // рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдмрдВрдж рдХрд░реЗрдВ
     рд╡реИрд▓ рд╢реНрд░реЛрддрд╛ = system.actorOf (Props [рд╢реНрд░реЛрддрд╛], рдирд╛рдо = "рд╢реНрд░реЛрддрд╛")

     // рдорд╛рд╕реНрдЯрд░ рдмрдирд╛рдПрдБ
     рд╡реИрд▓ рдорд╛рд╕реНрдЯрд░ = system.actorOf (рдкреНрд░реЙрдкреНрд╕ (рдирдП рдорд╛рд╕реНрдЯрд░)
       nrOfWorkers, nrOfMessages, nrOfElements, listener)),
       рдирд╛рдо = "рдорд╛рд╕реНрдЯрд░")

     // рдЧрдгрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ
     рдЧреБрд░реБ!  рдЧрдгрдирд╛

   }
 }


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ

Sbt рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ sbt рдХрдорд╛рдВрдб рдЯрд╛рдЗрдк рдХрд░реЗрдВред рддрдм рд╣рдо рдХрдорд╛рдВрдб рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
c:\temp\pi-calculator>sbt
[info] Loading project definition from C:\temp\pi-calculator\project
[info] Set current project to PI Calculator (in build file:/C:/temp/pi-calculator/)
> compile
[success] Total time: 0 s, completed 20.03.2012 16:33:03

> run
[info] Running akka.tutorial.first.scala.Pi

Pi approximation: 3.1415926435897883
Calculation time: 423 milliseconds
[success] Total time: 1 s, completed 20.03.2012 16:33:25

рдпрджрд┐ рдЖрдк рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 1 рддрдХ рдХрдо рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдмрджрд▓ рдЬрд╛рдПрдЧрд╛:
> run
[info] Running akka.tutorial.first.scala.Pi

Pi approximation: 3.1415926435897883
Calculation time: 1160 milliseconds
[success] Total time: 2 s, completed 20.03.2012 16:35:16

рдпрджрд┐ рдЖрдк 8 рддрдХ рдмрдврд╝ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:
> run
[info] Running akka.tutorial.first.scala.Pi

Pi approximation: 3.1415926435897905
Calculation time: 388 milliseconds
[success] Total time: 1 s, completed 20.03.2012 16:36:55

рдкрд░рд┐рдгрд╛рдо рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдкрд░реАрдХреНрд╖рдг 4-рдкрд░рдорд╛рдгреБ рдорд╢реАрди рдкрд░ рдХрд┐рдП рдЧрдП рдереЗред рддреЛ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ 16 рдХреА рд╡реГрджреНрдзрд┐ рд▓рдЧрднрдЧ рдХреЛрдИ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рдирд╣реАрдВ рджреЗрддреА рд╣реИ:
> run
[info] Running akka.tutorial.first.scala.Pi

Pi approximation: 3.141592643589789
Calculation time: 372 milliseconds
[success] Total time: 1 s, completed 20.03.2012 16:40:04

Play 2.0 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреЛрд╕реНрдЯ рдЬрд▓реНрдж рд╣реА рдЖ рд░рд╣реА рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╣реИ

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


All Articles