рд░реВрдмреА рдореЗрдВ рдзрд╛рдЧреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

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

IO рд░реВрдмреА рдореЗрдВ рдмрд╣рддреА рд╣реИ


рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

def call_remote(host) sleep 3 #      end 

рдпрджрд┐ рд╣рдореЗрдВ рджреЛ рд╕рд░реНрд╡рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджреЛ рдмрд╛рд░ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдореЗрдВ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ:

 call_remote 'host1/clear_caches' call_remote 'host2/clear_caches' 

рддрдм рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо 6 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдпрджрд┐ рд╣рдо рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЧрддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:

 threads = [] ['host1', 'host2'].each do |host| threads << Thread.new do call_remote "#{host}/clear_caches" end end threads.each(&:join) 

рд╣рдордиреЗ рджреЛ рдереНрд░реЗрдб рдмрдирд╛рдП, рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рд╣рдордиреЗ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреА рдУрд░ рд░реБрдЦ рдХрд┐рдпрд╛ рдФрд░ # рдЬреЙрдЗрди рдХрдорд╛рдВрдбреНрд╕ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо (рдореБрдЦреНрдп рдереНрд░реЗрдб) рдХреЛ рдЙрдирдХреЗ рдЦрддреНрдо рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдм рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо 3 рд╕реЗрдХрдВрдб рдореЗрдВ рддреЗрдЬреА рд╕реЗ рджреЛ рдмрд╛рд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЪрд▓рддрд╛ рд╣реИред

рдЕрдЪреНрдЫреА рдФрд░ рдЕрд▓рдЧ рдХреА рдЕрдзрд┐рдХ рдзрд╛рд░рд╛рдПрдБ

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

рдЪреВрдВрдХрд┐ рд╣рдо GitHub рдкрд░ DoS рдЕрдЯреИрдХ рдХрд░рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рд╕рд╛рде рдереНрд░реЗрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ, рдЙрдиреНрд╣реЗрдВ рдкреНрд▓рд╛рди рдХрд░рдиреЗ, рдЙрдиреНрд╣реЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдФрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдгрд╛рдо рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдорд╛рдирдХ рд░реВрдмреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд░реВрдмреА рдореЗрдВ рдереНрд░реЗрдб рд╕рдореВрд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ FutureProof рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЗрд╕рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рд░рд▓ рд╣реИ - рдЖрдкрдХреЛ рдПрдХ рдирдпрд╛ рд╕рдореВрд╣ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╕рд╛рде рд╕реВрддреНрд░ рдХреА рдЕрдзрд┐рдХрддрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ:

 thread_pool = FutureProof::ThreadPool.new(5) 

рдЗрд╕рдореЗрдВ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реЗрдВ:

 thread_pool.submit 2, 5 do |a, b| a + b end 

рдФрд░ рдЙрдирдХрд╛ рдЕрд░реНрде рдкреВрдЫреЗрдВ:

 thread_pool.values 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬреЗрдХреЗрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдЬреЛ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдП, рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛:

 require 'future_proof' require 'net/http' thread_pool = FutureProof::ThreadPool.new(5) 10.times do |i| thread_pool.submit i do |page| uri = URI.parse( "https://api.github.com/repos/mojombo/jekyll/issues?state=close&page=#{page + 1}&per_page=100.json" ) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.request(Net::HTTP::Get.new(uri.request_uri)).body end end thread_pool.perform puts thread_pool.values[3] # [{"url":"https://api.github.com/repo ... 

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

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

рдереНрд░реЗрдб рд╕рдореВрд╣реЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд░реВрдмреА рдХреА рдЬрд╛рд╡рд╛ рдФрд░ java.util.concurrent рдХреЗ рдХрд░реАрдм рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рдкреНрд░рдпрд╛рд╕ рд╣реИ, рдЬреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛ред

FutureProof рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк IO рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреБрд╕реНрддрдХрд╛рд▓рдп рд░реВрдмреА рд╕рдВрд╕реНрдХрд░рдг 1.9.3, 2.0, рд╕рд╛рде рд╣реА рд░реБрдмрд┐рдирд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдереНрд░реЗрдбреНрд╕ рдФрд░ рдХрдореНрдкреНрдпреВрдЯрд┐рдВрдЧ


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

 require 'benchmark' factorial = Proc.new { |n| 1.upto(n).inject(1) { |i, n| i * n } } Benchmark.bm do |x| x.report('sequential') do 10_000.times do 2.times do factorial.call 1000 end end end x.report('thready') do 10_000.times do threads = [] 2.times do threads << Thread.new do factorial.call 1000 end end threads.each &:join end end end 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдПрдХ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рд╛ ( рд░реВрдмреА 2.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) - рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рдПрдХ рджреВрд╕рд░рд╛ рд╕рдордп рд▓рдЧрд╛:

  user system total real sequential 24.130000 1.510000 25.640000 (25.696196) thready 24.600000 2.420000 27.020000 (26.877708) 

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

рдЪрд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рдЙрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВред

  user system total real sequential 33.180000 0.690000 33.870000 (33.090000) thready 37.820000 3.830000 41.650000 (24.333000) 


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

jRuby JVM рдкрд░ рд░реВрдмреА рдХрд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рдЬреЛ рднрд╛рд╖рд╛ рдореЗрдВ рдмрд╣реБрдд рд╣реА рд╢рд╛рдирджрд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд▓рд╛рддрд╛ рд╣реИред

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

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

рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрддрд░ рд╕рдВрдЧрд╛рдорд┐рддрд┐


рдЬреИрд╕рд╛ рдХрд┐ рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ, рд░реВрдмреА рдПрдордЖрд░рдЖрдИ рдПрдХ рд░реВрдмреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП ( рдпреВрдирд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдкрд░) рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдХреЛрд░ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдХрдореА рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдХрд╛рдВрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣:

 read, write = IO.pipe result = 5 pid = fork do result = result + 5 Marshal.dump(result, write) exit 0 end write.close result = read.read Process.wait(pid) puts Marshal.load(result) 


рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХрд╛рдВрдЯрд╛, рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп, рдкрд░рд┐рдгрд╛рдо рдЪрд░ рдХреЗ рдорд╛рди рдХреЛ 5 рдХреЗ рдмрд░рд╛рдмрд░ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд╛рдВрдЯрд╛ рдХреЗ рдЕрдВрджрд░ рдЪрд░ рдХреЗ рдЖрдЧреЗ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХрд╛рдВрдЯрд╛ рдФрд░ IO.pipe рдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрджреЗрд╢ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреБрд▓реНрдпрдХрд╛рд▓рди рдХреЗ рд▓рд┐рдП DRb рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ


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

рдореИрдВ Rinda :: TupleSpace tuples рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдЗрд╕ DRb рдлреАрдЪрд░ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрдВрдкреНрдпреВрдЯрд░ рдФрд░ рдЕрдиреНрдп рдХрдиреЗрдХреНрдЯреЗрдб рдорд╢реАрдиреЛрдВ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ Pthread рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред Rinda :: TupleSpace рдирд╛рдо рд╕реЗ tuples рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░, Queue рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рддрд░рд╣, рд╡реЗ рдЖрдкрдХреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдереНрд░реЗрдб рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП tuples рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдЬреЛ рд░реВрдмреА рдПрдордЖрд░рдЖрдИ рдХреЛ рдХрдИ рдХреЛрд░ рдкрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 Pthread::Pthread.new queue: 'fact', code: %{ 1.upto(n).inject(1) { |i, n| i * n } }, context: { n: 1000 } 


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

Preadread рдкреБрд╕реНрддрдХрд╛рд▓рдп MRI рд╕рдВрд╕реНрдХрд░рдгреЛрдВ 1.9.3 рдФрд░ 2.0 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рд░реВрдмреА рдСрди рд░реЗрд▓реНрд╕ рдореЗрдВ рдХрдВрд╕реАрдбрд░


рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд░реЗрд▓ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкрд░ рд░реВрдмреА рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреЛ рджреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдпрд╛ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдЙрдкрдпреЛрдЧ рдХрд╛рдВрдЯреЗ рдХрд░рддрд╛ рд╣реИ - рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдордЖрд░рдЖрдИ рдФрд░ рдЗрди рд╕рд░реНрд╡рд░реЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдПрдХ рд╕рд╛рде рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рд╕рд╛рде рдХрдИ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ рдПрдХ рдЦрд╛рдореА рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдХрд╛рдВрдЯреЗ рдЙрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдореЗрдореЛрд░реА рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдпрд╛ рдерд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рддреАрди "рд╢реНрд░рдорд┐рдХреЛрдВ" рдХреЗ рд╕рд╛рде рдПрдХ рдпреВрдирд┐рдХреЙрд░реНрди рд╕рд░реНрд╡рд░ 1GB рдореЗрдореЛрд░реА рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдмрдореБрд╢реНрдХрд┐рд▓ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рдоред рд╡рд╣реА рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд░реЗрд╕реНрдХ ред

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

рдирд┐рд╖реНрдХрд░реНрд╖



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

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рд░реВрдмреА , рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рднрд╡рд┐рд╖реНрдп рдХреА рд░реЗрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди - рд░реБрдмреА рдФрд░ рд░реВрдмрд┐рдирд┐рдпрд╕ рдХреА рдУрд░ рджреЗрдЦреЗрдВред

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


All Articles