Gorutins: рд╕рдм рдХреБрдЫ рдЖрдк рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдкреВрдЫрдиреЗ рд╕реЗ рдбрд░рддреЗ рдереЗ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЧреЛрд░реЛрдЗрдЯрд┐рди рдХреНрдпрд╛ рд╣реИрдВ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рд╣реИ, рд╡реЗ рд╕рд┐рд╕реНрдЯрдо рдереНрд░реЗрдбреНрд╕ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рдФрд░ рд╢реЗрдбреНрдпреВрд▓рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреЛрд░рдХреНрд╖рдХ?

Goroutine рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рд╕рдорд╛рди рдкрддреЗ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рди рдореЗрдВ рдЕрдиреНрдп рдЧреЛрд░реЛрдЗрдиреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реИред

рдЧреЛрд░реЛрдЗрди рдЪрд▓рд╛рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
go normalFunc(args...)

normalFunc(args...) рдлрд╝рдВрдХреНрд╢рди рдЙрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВред

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

рдЧреНрд░рд╛рдо рдореЗрдВ рдХрд┐рддрдирд╛ рд▓рдЯрдХрдирд╛ рд╣реИ?

рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдиреБрднрд╡ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдФрд╕рддрди, рдЖрдк рдкреНрд░рддрд┐ goroutine рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 4.5kb рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 4 рдЬреА рд░реИрдо рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЖрдк рд▓рдЧрднрдЧ 800 рд╣рдЬрд╝рд╛рд░ рд╡рд░реНрдХрд┐рдВрдЧ рдЧреЛрд░рдЖрдЙрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдпрд╣ Erlang рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдВрдХрдбрд╝рд╛ рдмрд╣реБрдд рд╕рднреНрдп рд╣реИ :)

рдФрд░ рдлрд┐рд░ рднреА, рдЖрдкрдХреЛ рдЬрд╣рд╛рдВ рднреА рд╕рдВрднрд╡ рд╣реЛ, рдмрд┐рдирд╛ рд╕реЛрдЪреЗ-рд╕рдордЭреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЧреЛрд░реЛрдЗрди рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓рд╛рдн рд▓рд╛рдПрдЧрд╛:


"рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛" - рдХрд┐рддрдирд╛? рдпрд╣ рдПрдХ рдХрдард┐рди рдкреНрд░рд╢реНрди рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ (рдкрд░рдорд╛рдгреБ d525 64 рдмрд┐рдЯ) рдкрд░ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ рдпрд╣ ~ 50 ╬╝s рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрд░реАрдХреНрд╖рдг рдФрд░ рдПрдХ рд╕реНрд╡рднрд╛рд╡ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛;)

рд╕рд┐рд╕реНрдЯрдо рдереНрд░реЗрдбреНрд╕

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рдмреНрдж рд╕реНрд░реЛрдд рдХреЛрдб ( src / pkg / runtime / proc.c ) рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
рдЬреА (рдЧреЛрд░реВрдЯрд╛рдЗрди) - рдЧреЛрд░реВрдЯрд┐рдирд╛
рдПрдо (рдорд╢реАрди) - рдорд╢реАрди

рдкреНрд░рддреНрдпреЗрдХ рдорд╢реАрди рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдФрд░ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЧреЛрд░реБрдЯрд┐рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╢реЗрдбреНрдпреВрд▓рд░ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрд╡рд┐рдЪ рдорд╢реАрдиреЛрдВ рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИред рдЪрд▓ рд░рд╣реА рдорд╢реАрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ GOMAXPROCS рдкрд░реНрдпрд╛рд╡рд░рдг GOMAXPROCS рдпрд╛ runtime.GOMAXPROCS(n int) рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ 1. рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реЗ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдЕрдиреБрд╕реВрдЪрдХ рдЬрд╛рдУ

рд╢реЗрдбреНрдпреВрд▓рд░ рдХрд╛ рд▓рдХреНрд╖реНрдп рд░реЗрдбреА-рдЯреВ-рд░рди рдЧреЛрд░реЛрдЗрдЯрд┐рди (рдЬреА) рдХреЛ рдореБрдлреНрдд рдорд╢реАрдиреЛрдВ (рдПрдо) рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред



рд╢реЗрдбреНрдпреВрд▓рд░ рдХрд╛ рдЧреНрд░рд╛рдлрд┐рдХ рдФрд░ рд╡рд┐рд╡рд░рдг Google Go рдХреЗ Sindre Myren RT Capabillites рдХреЗ рдХрд╛рдо рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рдХреНрд░рдо рдореЗрдВ рд░реЗрдбреА-рдЯреВ-рдкреНрд▓реЗ рдЧреЛрд░рдЖрдЙрдЯ рдХреЛ рдЕрдВрдЬрд╛рдо рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛рдиреА рдлреАрдлреЛ (рдлрд░реНрд╕реНрдЯ рдЗрди, рдлрд░реНрд╕реНрдЯ рдЖрдЙрдЯ)ред рдЧреЛрд░реЛрдЗрдирдЯрд╛рдЗрди рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗрд╡рд▓ рддрдм рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдЕрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдЕрд░реНрдерд╛рддреН, рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг (рдЪреИрдирд▓, рдореНрдпреВрдЯреЗрдХреНрд╕ рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди)ред рдЧреЛрд░реЛрдЗрди рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдордп рд╕реНрд▓рд╛рдЗрд╕ рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХрддрд╛рд░ рдореЗрдВ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ runtime. Gosched () рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ runtime. Gosched () runtime. Gosched () ред

рдЬреИрд╕реЗ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рд╡рд╣ рдлрд┐рд░ рд╕реЗ рдХрддрд╛рд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред

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

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

рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрднреА-рдХрднреА рдпрд╣ runtime. Gosched () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ runtime. Gosched () runtime. Gosched () , рддрд╛рдХрд┐ рдХрдИ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЬреАрд╡рд┐рдд рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рдЧреЛрд░реЛрдирд╛рдЗрдЯ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рднреА рдХреЗ рдХрд╛рдо рдХреЛ рд░реЛрдХ рди рджреЗрдВред рджреВрд╕рд░реА рдУрд░, рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХрд╛рдлреА рджреБрд░реНрд▓рдн рд╣реИрдВред

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

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


All Articles