рдЯрд╛рдЗрдкрд╕реЗрдХ рд╕реНрдЯреИрдХ - рдПрдХ рдЖрдзреБрдирд┐рдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЬреЛ рдЬрд╛рд╡рд╛ рдФрд░ рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдХреЗрд▓реЗрдмрд▓ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕реНрдЯреИрдХ 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
рдкрд░рд┐рдгрд╛рдо рднреЗрдЬрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рд╡рд┐рд╡рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдЙрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ:
Calculate
- рдЧрдгрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Master
рдЕрднрд┐рдиреЗрддрд╛ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИWork
- Master
Worker
рдЕрднрд┐рдиреЗрддрд╛ рдХреЛ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ Master
рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрд╢рди рдХреЗ рд╡рд┐рд╡рд░рдг рд╣реЛрддреЗ рд╣реИрдВResult
- Worker
рджреНрд╡рд╛рд░рд╛ рдЕрднрд┐рдиреЗрддрд╛ рд╕реЗ Master
рдЕрднрд┐рдиреЗрддрд╛ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬрд╛ рдЧрдпрд╛PiApproximation
- 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 -
Worker
рдПрдХреНрдЯрд░реНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ - nrOfMessages - рд╕рдВрдЪрд╛рд▓рди рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛
- nrOfElements - рдкреНрд░рддреНрдпреЗрдХ
Worker
рдЕрднрд┐рдиреЗрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХреА рдЧрдИ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛
рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╣реИрдВ:
рдХрдХреНрд╖рд╛ рдорд╛рд╕реНрдЯрд░ (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 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреЛрд╕реНрдЯ рдЬрд▓реНрдж рд╣реА рдЖ рд░рд╣реА рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╣реИ