рдкрд┐рдЫрд▓реА рдмрд╛рд░, рдореИрдВрдиреЗ рдЬреАрдЖрдИрдПрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рд╢реЗрд╖ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдордЖрд░рдЖрдИ рдХреЛрдб рджреЗрдЦрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛ред рдЖрдЬ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗред

рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдорд╕реМрджрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕реА рдХреЛрдб рдХреЗ рдмрд┐рдЯреНрд╕ рдХреЗ рд╕рд╛рде рднрд░рд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╕рд╛рд░ рдЦреЛ рдЧрдпрд╛ рдерд╛ред рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд▓рдЧрднрдЧ рдХреЛрдИ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реНрд░реЛрдд рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдЬрд┐рдирдХрд╛ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдерд╛ред
рдкрд┐рдЫрд▓реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ
рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рдмрд╛рдж, рджреЛ рдкреНрд░рд╢реНрди рдмрдиреЗ рд░рд╣реЗ:
- рдХреНрдпрд╛ рдПрдХ GIL
array << nil
рдкрд░рдорд╛рдгреБ рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ? - рдХреНрдпрд╛ GIL рд░реВрдмреА рдХреЛрдб рдереНрд░реЗрдб рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рддрд╛ рд╣реИ?
рдЖрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрдХрд░ рдкрд╣рд▓реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЪрд▓рд┐рдП рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдкрд┐рдЫрд▓реА рдмрд╛рд░, рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдерд╛:
array = [] 5.times.map do Thread.new do 1000.times do array << nil end end end.each(&:join) puts array.size
рд╕рд░рдгреА рдХреЛ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рдкрд╛рдВрдЪ рд╣рдЬрд╛рд░ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИред рдЪреВрдВрдХрд┐ рд╕рд░рдгреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЬрдм рдЖрдк JRuby рдпрд╛ Rubinius рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ (рдкрд╛рдВрдЪ рд╣рдЬрд╛рд░ рд╕реЗ рдХрдо рддрддреНрд╡реЛрдВ рд╡рд╛рд▓рд╛ рдПрдХ рд╕рд░рдгреА)ред
рдПрдордЖрд░рдЖрдИ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдПрдХ рджреБрд░реНрдШрдЯрдирд╛ рдпрд╛ рдПрдХ рдкреИрдЯрд░реНрди рд╣реИ? рдЖрдЗрдП рд░реВрдмреА рдХреЛрдб рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рд╢реЛрдз рд╢реБрд░реВ рдХрд░реЗрдВред
Thread.new do array << nil end
рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрдб рдХреЗ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдПрдордЖрд░рдЖрдИ рдПрдХ рдирдпрд╛ рдзрд╛рдЧрд╛ рдХреИрд╕реЗ рдмрдирд╛рддрд╛ рд╣реИ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХреЛрдб
thread*.c
рдлрд╛рдЗрд▓реЗрдВред
Thread.new
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЕрдВрджрд░ рдкрд╣рд▓реА рдЪреАрдЬ рдПрдХ рдирдпрд╛ рджреЗрд╢реА рдзрд╛рдЧрд╛ рдмрдирд╛ рд░рд╣реА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░реВрдмреА рдзрд╛рдЧреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж,
thread_start_func_2
рдлрд╝рдВрдХреНрд╢рди
thread_start_func_2
ред рдЖрдЗрдП рдмрд┐рдирд╛ рд╡рд┐рд╡рд░рдг рдХреЗ рдЗрд╕реЗ рджреЗрдЦреЗрдВред

рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдЕрднреА рд╕рднреА рдХреЛрдб рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рд╛, рдЬреЛ рд╣рдорд╛рд░реЗ рд╣рд┐рдд рдХреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдПрдХ рдирдпрд╛ рдзрд╛рдЧрд╛ рдЬреАрдЖрдИрдПрд▓ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмреАрдЪ рдореЗрдВ рдХрд╣реАрдВ, рдЬрд┐рд╕ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде
Thread.new
рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЙрд╕реЗ
Thread.new
рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд▓реЙрдХ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рджреЗрд╢реА рдзрд╛рдЧрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдореЗрдВ рдПрдХ рдирдпрд╛ рдзрд╛рдЧрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдпрд╣ рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлрд┐рд▓рд╣рд╛рд▓ рдЬреАрдЖрдИрдПрд▓ рдЗрд╕рдХреЗ рдкрд╛рд╕ рд╣реИред рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдирдП рдзрд╛рдЧреЗ рдХреЛ рддрд╛рд▓рд╛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдирдпрд╛ рдзрд╛рдЧрд╛ рдЬреАрдЖрдИрдПрд▓ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
static void gvl_acquire_common(rb_vm_t *vm) { if (vm->gvl.acquired) { vm->gvl.waiting++; if (vm->gvl.waiting == 1) { rb_thread_wakeup_timer_thread_low(); } while (vm->gvl.acquired) { native_cond_wait(&vm->gvl.cond, &vm->gvl.lock); }
рдпрд╣
gvl_acquire_common
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдирдпрд╛ рдзрд╛рдЧрд╛ GIL рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд╣ рджреЗрдЦрддреА рд╣реИ рдХрд┐ рддрд╛рд▓рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдпреЛрдЬрд┐рдд рд╣реИред рдпрджрд┐ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
waiting
рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣
1
рдмрд░рд╛рдмрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИ рдХрд┐
waiting
рд╡рд┐рд╢реЗрд╖рддрд╛
1
рдмрд░рд╛рдмрд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдмрд░рд╛рдмрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдЯрд╛рдЗрдорд░ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЬрдЧрд╛рддреА рд╣реИред
рдЯрд╛рдЗрдорд░ рдереНрд░реЗрдб рдПрдордЖрд░рдЖрдИ рдзрд╛рдЧреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рд▓рдЧрд╛рддрд╛рд░ рдЬреАрдЖрдИрдПрд▓ рд░рдЦрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдорд░ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо GIL рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред

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

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

рдпрд╣ рдЖрд░реЗрдЦ рдЖрдЧреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬреАрдЖрд░рдЖрдИ рдПрдордЖрд░рдЖрдИ рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд╛рдИрдВ рдУрд░ рдХрд╛ рдзрд╛рдЧрд╛ рдЕрднреА рд╢реБрд░реВ рд╣реБрдЖ рд╣реИ рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ GIL рдХреЗ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЯрд╛рдЗрдорд░ рдереНрд░реЗрдб рдЬрд╛рдЧрддрд╛ рд╣реИред
рд╣рд░ 100 рдПрдордПрд╕, рдЯрд╛рдЗрдорд░ рдереНрд░реЗрдб рдЙрд╕ рдереНрд░реЗрдб рдЗрдВрдЯрд░рдкреНрдЯ рдлреНрд▓реИрдЧ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЬреАрдЖрдИрдПрд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд░рдЦрддреА рд╣реИ,
RUBY_VM_SET_TIMER_INTERRUPT
рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдпреЗ рд╡рд┐рд╡рд░рдг рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
array << nil
рдкрд░рдорд╛рдгреБ рд╣реИред
рдпрд╣ рдУрдПрд╕ рдореЗрдВ рдЯрд╛рдЗрдо рд╕реНрд▓рд╛рдЗрд╕рд┐рдВрдЧ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред
рдзреНрд╡рдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рддреБрд░рдВрдд рд╕реНрдЯреНрд░реАрдо рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ (рдпрджрд┐ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рдпрд╣ рдХрд╣рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
array << nil
рдкрд░рдорд╛рдгреБ рдирд╣реАрдВ рд╣реИ)ред
рдмреАрдЪ рдореЗрдВ рдЭрдВрдбреЗ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛
vm_eval.c
рдлрд╝рд╛рдЗрд▓ рдХреЗ
vm_eval.c
рдореЗрдВ рд░реВрдмреА рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
vm_call0_body
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╡рд┐рдзрд┐ рд▓реМрдЯрдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ, рдЗрдВрдЯрд░рдкреНрдЯ рдлрд╝реНрд▓реИрдЧ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред
рдпрджрд┐ рдереНрд░реЗрдб рдЗрдВрдЯрд░рдкреНрдЯ рдлрд╝реНрд▓реИрдЧ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд░реВрдмреА рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдЬреАрдЖрдИрдПрд▓ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ рдФрд░
sched_yield
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
sched_yield
рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ OS рдЕрдиреБрд╕реВрдЪрдХ рдХреЛ рдХрддрд╛рд░ рдореЗрдВ рдЕрдЧрд▓реЗ рдзрд╛рдЧреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдмрд╛рдзрд┐рдд рдзрд╛рдЧрд╛ рдЬреАрдЖрдИрдПрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдПрдХ рдФрд░ рдзрд╛рдЧрд╛ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдкрд╣рд▓реЗ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рд╣реИ:
array << nil
рдПрдХ рдкрд░рдорд╛рдгреБ рдСрдкрд░реЗрд╢рди рд╣реИред рдЬреАрдЖрдИрдПрд▓ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕реА рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╕рднреА рд░реВрдмреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдкрд░рдорд╛рдгреБ рд╣реИрдВред
рдпрд╣ рдХреЛрдб рд╣реИ:
array = [] 5.times.map do Thread.new do 1000.times do array << nil end end end.each(&:join) puts array.size
рдПрдордЖрд░рдЖрдИ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА
(рд╣рдо рдХреЗрд╡рд▓ рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддрддреНрд╡реЛрдВ рдХреЗ рдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ - рд▓рдЧрднрдЧред)рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рд░реВрдмреА рдХреЛрдб рд╕реЗ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред рдпрджрд┐ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ GIL рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред рдпрд╣ рдЬрд╛рдирдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ GIL рдХреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди GIL рдкрд░ рдирд┐рд░реНрднрд░ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ, рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ
рд╡реЗрдВрдбрд░ рд▓реЙрдХ рдХреЗ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╛рддреЗ рд╣реИрдВред
GIL рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ API рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред GIL рдкрд░ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдпрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИред рдПрдХ рдмрд╛рд░ MRI рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдЯреАрдо GIL рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреА рд╣реИ рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреА рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдирд╛ рдЬреЛ рдЬреАрдЖрдИрдПрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЙрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред
рд░реВрдмреА рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рддреЛ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐
array << nil
рдПрдХ рдкрд░рдорд╛рдгреБ рдСрдкрд░реЗрд╢рди рд╣реИред рдЗрд╕ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ, рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ
Array#<<
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕реЗ C. рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрджрд░реНрдн рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛, рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдбреЗрдЯрд╛ рдЕрдЦрдВрдбрддрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдпрд╣ рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ GIL рдХреЛ рдХреЗрд╡рд▓ рдирд╛рдорд╛рдВрдХрди рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рд░реА рдХрд░реЗрдЧреАред
рдРрд╕рд╛ рдХреБрдЫ рдХреНрдпрд╛ рд╣реИ?
array << User.find(1)
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк
Array#<<
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд
User.find(1)
рдХреЙрд▓ рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐
User.find(1)
рдмрджрд▓реЗ рдореЗрдВ рд░реВрдмреА рдореЗрдВ рд▓рд┐рдЦреА рдХрдИ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд╣рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди GIL C. рдореЗрдВ рд▓рд╛рдЧреВ рдкрд░рдорд╛рдгреБ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реА рдмрдирд╛рддреА рд╣реИред рд░реВрдмреА рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред
рдХреНрдпрд╛
Array#<<
рдЕрднреА рднреА рдирдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд░рдорд╛рдгреБ рд╣реИ? рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЖрдкрдХреЛ рдЕрднреА рднреА рджрд╛рдПрдВ рд╣рд╛рде рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ
User.find(1)
рдкрджреНрдзрддрд┐ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдкрд░рдорд╛рдгреБ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди рдХреЛ
Array#<<
рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рд╕рдм рдореЗрд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ?
рд▓реЗрдЦ рдХреЗ
рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ , рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмреАрдЪ рдореЗрдВ рдХрд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЬреАрдЖрдИрдПрд▓ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ - рднрд▓реЗ рд╣реА рд╕рдВрджрд░реНрдн рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИ, рдЕрдиреНрдп рдереНрд░реЗрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЬреАрдЖрдИрдПрд▓ рдЬрд╛рд░реА рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рд╕рдм рдХреЗрд╡рд▓ рдЗрд╕ рд╢рд░реНрдд рдХреЗ рддрд╣рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ C рдореЗрдВ рд▓рд╛рдЧреВ рд╣реИ, рд░реВрдмреА рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ GIL рдХреЛ рд╕реНрд╡рдпрдВ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (
рдореВрд▓ рд▓реЗрдЦ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - C рдореЗрдВ рд▓рд╛рдЧреВ рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА (рд╣реИрд╢) рдореЗрдВ рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рдирд╛ рдкрд░рдорд╛рдгреБ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рд░реВрдмреА рдХреЛрдб рдХреЛ рдПрдХ рддрддреНрд╡ рдХрд╛ рд╣реИрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рд▓рдЧрднрдЧредрдЬреАрдЖрдИрдПрд▓ рдПрдордЖрд░рдЖрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЕрдВрджрд░ рджреМрдбрд╝ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░реВрдмреА рдХреЛрдб рдереНрд░реЗрдб рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬреАрдЖрдИрдПрд▓ рдХреЗрд╡рд▓ MRI рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЗрдВрдЯрд░рдкреНрд░реЗрдЯрд░ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрдиреБрд╡рд╛рджрдХ рдЯрд┐рдкреНрдкрдгреА рдФрд░ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рд╕реБрдирдХрд░ рдЦреБрд╢ рд╣реЛрдЧрд╛ред