рдЪрд╛рд░ рдореЗрдВ рд╕реЗ рдкрд╛рдВрдЪ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред
рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдореИрдВрдиреЗ рд░реВрдмреА рд╕рдореБрджрд╛рдп рдореЗрдВ рдмрд┐рддрд╛рдпрд╛, рдХреБрдЦреНрдпрд╛рдд GIL рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд▓рд╛ рдШреЛрдбрд╝рд╛ рдмрдирд╛ рд░рд╣рд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЬреАрдЖрдИрдПрд▓ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред
рдЬреАрдЖрдИрдПрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдЬреЛ рдкрд╣рд▓реА рдмрд╛рдд рд╕реБрдиреА рд╡рд╣ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рдереА рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд╣реИред рдореИрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ рдЬреАрдЖрдИрдПрд▓ рдЦрд░рд╛рдм рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЛрдб рдереНрд░реЗрдб рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рддрд╛ рд╣реИред рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ, рдореБрдЭреЗ рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдЖрджрдд рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред
рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЬреАрдЖрдИрдПрд▓ рддрдХрдиреАрдХреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред GIL рдкрд░ рдХреЛрдИ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдордЖрд░рдЖрдИ (рдореИрдЯреНрд╕ рд░реВрдмреА рдЗрдВрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди) рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред MRI рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯреАрдо рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рддреА рд╣реИ рдХрд┐ GIL рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЦреБрдж рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рд░рд╣рд╛ рд╣реВрдВред
рдпрджрд┐ рдЖрдкрдХреЛ GIL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
MRI рдореЗрдВ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕реЗ GIL (рдЧреНрд▓реЛрдмрд▓ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рд▓реЙрдХ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдПрдХ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдХрд┐рд╕реА рд╕рдордп рдореЗрдВ, рд░реВрдмреА-рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧреЗ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрда-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЖрда рдзрд╛рдЧреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧрд╛ рд╣реА рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред рдЬреАрдЖрдИрдПрд▓ рдХреЛ рд╢рд░реНрддреЛрдВ рдХреА рдПрдХ рджреМрдбрд╝ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рд╕реЗ рд╕рдордЭреМрддрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред
2008 рд╕реЗ
рд╕рдорд╛рдирд╛рдВрддрд░рд╡рд╛рдж Ilya рдЧреНрд░рд┐рдЧреЛрд░рд┐рдХ рджреНрд╡рд╛рд░рд╛
рд░реВрдмреА рд▓реЗрдЦ
рдореЗрдВ рдПрдХ рдорд┐рдердХ рд╣реИ , рдореБрдЭреЗ рдЬреАрдЖрдИрдПрд▓ рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдордЭ рдорд┐рд▓реАред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдордЭ рддрдХрдиреАрдХреА рдореБрджреНрджреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧреАред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдЬреАрдЖрдИрдПрд▓ рд░реВрдмреА рдореЗрдВ рдХреБрдЫ рд╕рдВрдЪрд╛рд▓рди рдХреА рдзрд╛рдЧрд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред
рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ
рд░реВрдмреА рдореЗрдВ, рдереЛрдбрд╝рд╛ рдзрд╛рдЧрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рддрддреНрд╡ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
array = [] 5.times.map do Thread.new do 1000.times do array << nil end end end.each(&:join) puts array.size
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдВрдЪ рд╕реВрддреНрд░
nil
рд╣реА рд╕рд░рдгреА рдореЗрдВ
nil
рд╣рдЬрд╛рд░ рдЧреБрдирд╛
nil
рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рд╕рд░рдгреА рдореЗрдВ рдкрд╛рдВрдЪ рд╣рдЬрд╛рд░ рддрддреНрд╡ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рд╣реИ рдирд╛?
$ ruby pushing_nil.rb 5000 $ jruby pushing_nil.rb 4446 $ rbx pushing_nil.rb 3088
= (
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдЧреИрд░-рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рд╣рдо рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдЖрдЗрдП рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдордЖрд░рдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рд╕реЗ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ (
рд╢рд╛рдпрдж рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЖрдк рд╢рдмреНрдж "рдЕрдкреЗрдХреНрд╖рд┐рдд" - рд▓рдЧрднрдЧред рдкреНрд░рддрд┐ )
рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ , рдЬрдмрдХрд┐ рдкрд░рд┐рдгрд╛рдо, рдЬрдмрдХрд┐ рд░реВрдмреА рдФрд░ рд░реБрдмрд┐рдирд┐рдпрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдлрд┐рд░ рд╕реЗ рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ JRuby рдФрд░ Rubinius рдЕрдиреНрдп (рдЕрднреА рднреА рдЧрд▓рдд) рдкрд░рд┐рдгрд╛рдо рджреЗ рд░рд╣реЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рдЕрдВрддрд░ GIL рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдХрд╛рд░рдг рд╣реИред рдЪреВрдВрдХрд┐ рдПрдордЖрд░рдЖрдИ рдореЗрдВ рдПрдХ рдЬреАрдЖрдИрдПрд▓ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдкрд╛рдВрдЪ рдзрд╛рдЧреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдХрд┐рд╕реА рднреА рд╕рдордп рд╕рдХреНрд░рд┐рдп рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣рд╛рдБ рд╕рд╣реА рд╕рдорд╛рдирддрд╛ рдирд╣реАрдВ рджреЗрдЦреА рдЬрд╛рддреА рд╣реИред JRuby рдФрд░ Rubinius рдХреЗ рдкрд╛рд╕ GIL рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдкрд╛рдВрдЪ рдзрд╛рдЧреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдЧреБрдард▓реА рдХреЗ рдмреАрдЪ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рд╡реЗ рдЧреИрд░-рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдорд╡рд░реНрддреА рдзрд╛рдЧреЗ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рд╕реЗ рд╕рдордЭреМрддрд╛ рдХреНрдпреЛрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдпрд╣ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рд╕реЛрдЪрд╛ рдХрд┐ рд░реВрдмреА рдпрд╣ рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧреА? рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╡ рд╣реИред
рдЪрд╛рд╣реЗ MRI, JRuby рдпрд╛ Rubinius, Ruby рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ: MRI рдХреЛ C, JRuby рдХреЛ Java рдореЗрдВ рдФрд░ Rubinius рдХреЛ Ruby рдФрд░ C ++ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм рд░реВрдмреА рдореЗрдВ рдПрдХ рднреА рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
array << nil
, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рджрд╕рд┐рдпреЛрдВ рдпрд╛ рдХреЛрдб рдХреА рд╕реИрдХрдбрд╝реЛрдВ рд▓рд╛рдЗрдиреЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣рд╛рдБ MRI рдореЗрдВ
Array#<<
рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:
VALUE rb_ary_push(VALUE ary, VALUE item) { long idx = RARRAY_LEN(ary); ary_ensure_room_for_push(ary, 1); RARRAY_ASET(ary, idx, item); ARY_SET_LEN(ary, idx + 1); return ary; }
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдЪрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдкрд░реЗрд╢рди рд╣реИрдВ:
- рд╡рд░реНрддрдорд╛рди рд╕рд░рдгреА рд▓рдВрдмрд╛рдИ рд╣реЛ рд░рд╣реА рд╣реИ
- рдХрд┐рд╕реА рдЕрдиреНрдп рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд╕реНрдореГрддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
- рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдирд╛
- рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдкреБрд░рд╛рдиреЗ рдорд╛рди + 1 рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛
рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрди рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдпрд╣ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░ рдзрд╛рд░рд╛рдПрдВ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдХреЛ рдХреИрд╕реЗ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИрдВред рд╣рдореЗрдВ рд░реИрдЦрд┐рдХ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдЖрдк C рдореЗрдВ рдПрдХ рдЫреЛрдЯреЗ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдЖрджреЗрд╢ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдХрдИ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдзрд╛рдЧреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдХреЗ рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреА рджреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рдереНрд░реЗрдбреНрд╕ рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдПрдХ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рджреВрд╕рд░рд╛ рдзрд╛рдЧрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛, рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рднреА рдирд╣реАрдВ рдХрд┐ рдбреЗрдЯрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХреБрдЫ рд░реВрдмреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ рд╕рд░рдгреА рдореЗрдВ
nil
рдЬреЛрдбрд╝рдХрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдерд┐рддрд┐ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдХреЗ рд╕рдорд╛рди рд╣реИред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдирд┐рдореНрди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ:

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдзрд╛рдЧреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдЪрд░рдг 1-4 рдКрдкрд░ рджрд┐рдП рдЧрдП MRI рдореЗрдВ
Array#<<
рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЫрджреНрдо рдХреЛрдб рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд╛рд╕ рд╣реИ (рд╕рдордп рдХреЗ рд╢реБрд░реБрдЖрддреА рд╕рдордп рдореЗрдВ, рдкреНрд░рд╡рд╛рд╣ рдП рд╕рдХреНрд░рд┐рдп рд╣реИ):

рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдмрд╕ рддреАрд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рд░рд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реБрдП рд╢рд┐рд▓рд╛рд▓реЗрдЦ рдЬреЛрдбрд╝реЗред
рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ:
рдереНрд░реЗрдб рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдХрддрд╛рд░ рдЪрд░рдг 3 рдкрд░ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдереНрд░реЗрдб рдП рдкреЙрдЬрд╝ рдФрд░ рдпрд╣ рдереНрд░реЗрдб рдмреА рдХреА рдмрд╛рд░реА рд╣реИ, рдЬреЛ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рдХрд░ рдФрд░ рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдмрдврд╝рд╛рддрд╛ рд╣реИред
рдЙрд╕рдХреЗ рдмрд╛рдж, рдереНрд░реЗрдб рдП рдЙрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЗрд╕реЗ рд░реЛрдХрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдмрдврд╝рд╛рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ рд╣реБрдЖ рдерд╛ред рдереНрд░реЗрдб A рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ
1
рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдзрд╛рд░рд╛ рдмреА рдкрд╣рд▓реЗ рд╣реА рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реА рд╣реИред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░: рдереНрд░реЗрдб рдмреА рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ
1
рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдереНрд░реЗрдб рдП рдЗрд╕реЗ
1
рднреА рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рджреЛрдиреЛрдВ рдереНрд░реЗрдбреНрд╕ рдиреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ред рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдЯреВрдЯ рдЧрдИ рд╣реИред
рдФрд░ рдореИрдВ рд░реВрдмреА рдкрд░ рдирд┐рд░реНрднрд░ рдерд╛
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ JRuby рдФрд░ Rubinius рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рджреЗрдЦрд╛ рдерд╛, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рджреЗ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди JRuby рдФрд░ Rubinius рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрднреА рднреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдореЗрдВ рдзрд╛рдЧреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдХреГрддрд┐ рдореЗрдВ, рдПрдХ рдереНрд░реЗрдб рддрдм рдЪрд▓рддрд╛ рд╣реИ рдЬрдм рджреВрд╕рд░рд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд╕рд╣реА рдХрдВрд╕рд┐рд╕реНрдЯреЗрдВрд╕реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреЛрдиреЛрдВ рдереНрд░реЗрдб рдПрдХ рд╕рд╛рде рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк JRuby рдпрд╛ Rubinius рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдмрд╛рд░ рдКрдкрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рд╕рдВрдЧ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИред рдпрд╣ рдЬрд▓реНрдж рдпрд╛ рдмрд╛рдж рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВред рдореИрдВ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред
рд░реВрдмреА рдЗрд╕ рдкрд╛рдЧрд▓рдкрди рд╕реЗ рд╣рдорд╛рд░реА рд░рдХреНрд╖рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреА? рдЗрд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдБ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВ: рдпрд╣ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИред рд░реВрдмреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдереНрд░реЗрдб-рд╕реБрд░рдХреНрд╖рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдУрд╡рд░рд╣реЗрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдХреЛрдб рдХреЛ
рднреА рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдмреЛрдЭ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЬреАрдЖрдИрдПрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреБрдЖ рд╣реИ, рдФрд░ рдореБрдЦреНрдп рдкреНрд░рд╢реНрди рдЕрднреА рднреА рдЕрдиреБрддреНрддрд░рд┐рдд рд╣реИ:
рдПрдордЖрд░рдЖрдИ рдкрд░ рдХреЛрдб рдЪрд▓рд╛рдирд╛ рдЕрднреА рднреА рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рдХреНрдпреЛрдВ рджреЗрддрд╛ рд╣реИ?рдпрд╣ рдкреНрд░рд╢реНрди рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдерд╛ред рдЬреАрдЖрдИрдПрд▓ рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдордЭ рдПрдХ рдЙрддреНрддрд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ: рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧрд╛ рдХрд┐рд╕реА рднреА рд╕рдордп рд░реВрдмреА рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдЕрднреА рднреА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?
рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ ...
рдпреЛрдЬрдирд╛рдХрд╛рд░ рдХреЛ рджреЛрд╖ рджреЗрдВ
рдкреНрд░рд╕рдВрдЧ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ OS рдЕрдиреБрд╕реВрдЪрдХ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред рд╕рднреА рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдПрдХ рджреЗрд╢реА рдзрд╛рдЧрд╛ рдПрдХ рд░реВрдмреА рдзрд╛рдЧреЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдУрдПрд╕ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреЛрдИ рднреА рдзрд╛рдЧрд╛ рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕рд╛рдзрдиреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реАрдкреАрдпреВ рд╕рдордп) рдкрд░ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдиреБрд╕реВрдЪреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧреЗ рдХреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдорд┐рд▓ рд╕рдХреЗред
рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рд░реБрдХ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд▓рд╛ рдереНрд░реЗрдб рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╕рдордп рдЖрддрд╛ рд╣реИ, рдкреНрд░рд╡рд╛рд╣ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рдпрд╣ рдУрдПрд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╢реБрджреНрдзрддрд╛ рдкрд░ рджреГрд╢реНрдп рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
Array#<<
рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдПрдХ рдереНрд░реЗрдб рдХреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдиреНрдп рдереНрд░реЗрдб рд╕рдорд╛рди рдХреЛрдб рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рддреЗ рд╣реБрдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕рдорд╛рдзрд╛рди? рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдпрджрд┐ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдзрд╛рдЧрд╛ рдЧрд▓рдд рдЬрдЧрд╣ рдкрд░ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рддреЛ рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░реБрдХрд╛рд╡рдЯ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЪрд░рдг 3 рдореЗрдВ рдзрд╛рд░рд╛ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧреА рдФрд░ рдЕрдВрддрддрдГ рдЪрд░рдг 4 рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдЕрдЦрдВрдбрддрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рдорд╛рдгреБ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб mutex рдХреЗ рд▓рд┐рдП MRI, JRuby рдФрд░ Rubinius рдзрдиреНрдпрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рдЕрдиреБрдорд╛рдирд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред
array = [] mutex = Mutex.new 5.times.map do Thread.new do mutex.synchronize do 1000.times do array << nil end end end end.each(&:join) puts array.size
рдпрджрд┐ рдХреЛрдИ рдереНрд░реЗрдб
mutex.synchronize
рдмреНрд▓реЙрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░
mutex.synchronize
рд╣реИ, рддреЛ рдЕрдиреНрдп рдереНрд░реЗрдбреНрд╕ рдХреЛ рдЙрд╕реА рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рдПрдХ рдЧрд╛рд░рдВрдЯреА рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рдпрджрд┐ рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЕрдиреНрдп рдереНрд░реЗрдб рдЕрднреА рднреА рдЗрд╕реЗ рджрд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЕрдиреБрд╕реВрдЪрдХ рдЗрд╕реЗ рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдЧрд╛ред рдЕрдм рдХреЛрдб рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред
рдЬреАрдЖрдИрдПрд▓ рднреА рдПрдХ рддрд╛рд▓рд╛ рд╣реИ
рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЖрдк рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рдмрдирд╛рдиреЗ рдФрд░ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреАрдЖрдИрдПрд▓ рднреА рдПрдХ рддрд╛рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдХреЛрдб рдереНрд░реЗрдб рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рддрд╛ рд╣реИ? рдХреНрдпрд╛ GIL рдПрдХ
array << nil
рдмрджрд▓ рджреЗрддрд╛ рд╣реИ
array << nil
рдПрдХ рдкрд░рдорд╛рдгреБ рдСрдкрд░реЗрд╢рди рдореЗрдВ?
рдЬрд▓реНрдж рд╣реА рдкрд░реА рдХрдерд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд▓реНрдж рд╣реА рдмрд╛рдд рдирд╣реАрдВ рдмрдирддреА рд╣реИ рдПрдХ рд╕рдордп рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд▓реЗрдЦ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ред
рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЙрди рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП MRI рдореЗрдВ GIL рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред
рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА рдФрд░ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рд╕реБрдирдХрд░ рдЦреБрд╢ рд╣реЛрдЧрд╛ред