рдореБрдЭреЗ рдЧреЛ рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд╡рд┐рд╖рдп рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА:
habrahabr.ru/post/195574 ред
рдореИрдВрдиреЗ рд▓реЗрдЦрдХ рдФрд░ рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝рд╛ рдФрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рд╡рд┐рд╖рдп рдХрд╛ рдЕрднреА рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЧрд▓рдд рди рд╕рдордЭрд╛ рдЬрд╛рдП, рдореИрдВ рдЖрдкрд╕реЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж "рдзрд╛рдЧрд╛" рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ "рдзрд╛рдЧрд╛" рдХреЗ рдЕрд░реНрде рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ "рдзрд╛рд░рд╛" рдХреЗ рдЕрд░реНрде рдореЗрдВред рдЖрдкрдХрд╛ рдзрдиреНрдпрд╡рд╛рдж
рдкрд╣рд▓реЗ рд╡рд┐рд╖рдп рдХреЗ рд▓реЗрдЦрдХ рдХреА рддрд░рд╣, рдореИрдВ рднреА рдЧреЛ рднрд╛рд╖рд╛ рд╕реЗ рдмрд╣реБрдд рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдБ рдФрд░ рдкрд╣рд▓реЗ рдЕрд╡рд╕рд░ рдкрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдБред
рдореИрдВ рдЗрд╕рдХреЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреА рд╢реИрд▓реА рд╕реЗ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реВрдВ, рдФрд░ рдХрд┐рд╕реА рднреА рдЕрд╡рд╕рд░ рдкрд░ рдореИрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЧрдарди рдиреЗ рдЕрдм рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЧрддрд┐ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдФрд░ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рднреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЪреИрдирд▓реЛрдВ рдиреЗ рдореБрдЭреЗ рд╕реЛрдЪрдиреЗ рдкрд░ рдордЬрдмреВрд░ рдХрд░ рджрд┐рдпрд╛ рд╣реИред
рдореЗрд░реА рдХрд╛рд░ рдкрд░, рдЕрдВрддрд░ 10-20 рдмрд╛рд░ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдерд╛ред рдФрд░ рдЕрдВрддрд░ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - 2 рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рдХрд╛рд░реНрдп рдХреЛ рд▓рдЧрднрдЧ 2 рдмрд╛рд░ рдЕрдзрд┐рдХ рдзреАрд░реЗ-рдзреАрд░реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдореИрдВрдиреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛, рднрд╛рд░ рдЪрдХреНрд░ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЬреЛрдбрд╝реЗ рдЬреЛрдбрд╝реЗред рдФрд░ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдпрд╣ рдЖрдпрд╛ рдерд╛ред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд╛рда package main import ( "fmt" "time" "flag" "os" "runtime" )
рдкрд░рд┐рдгрд╛рдо
рдорд╢реАрди: рдЗрдВрдЯреЗрд▓, 3 рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдкрд░ 4 рдХреЛрд░, 4 рдЬреАрдмреА рд░реИрдо, рд▓рд┐рдирдХреНрд╕-x86-64, рдХрд░реНрдиреЗрд▓-3.11, рдЧреЛрд▓рдВрдЧ-1.1.2
рдореЗрд░реА рдорд╢реАрди рдкрд░ рдЕрдзрд┐рдХрддрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд░рдирдЯрд╛рдЗрдоред MAXPROCS рдорд╛рди 256 рд╣реИред рдЖрдк рдЕрдзрд┐рдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА 256 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 1 рд╣реИред
рдХрд╛рд░реНрдпрдХреНрд░рдо рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ (ps -C channel_test01 -L)
рдПрдЯрдореИрдХреНрд╕рдкреНрд░реЛрдХреНрд╕ = 1: 3 рдзрд╛рдЧреЗред
-рдореИрдХреНрд╕рдкреНрд░реЛрдХреНрд╕ рдХреЗ рд╕рд╛рде = 2 рдпрд╛ рдЕрдзрд┐рдХ: рд╣рдореЗрд╢рд╛ 4 рдзрд╛рдЧреЗред
рдХрднреА-рдХрднреА, рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди, 2 рдФрд░ рдкреНрд░рд╡рд╛рд╣ рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрдд рддрдХ рдмрдиреЗ рд░рд╣реЗред рдпрд╣ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред
(рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдЬрд╝рдорд╛рдпрд╛, рдЬрд┐рд╕рдореЗрдВ 24 рдХреЛрд░ / proc / cpuinfo рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдЗрд╕ рдкрд░ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА 4 рдереАред рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдПрдХ рдкрд╛рдБрдЪрд╡рд╛рдБ рдзрд╛рдЧрд╛ рд╣реЛрддрд╛ рдерд╛ - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рд╛рд▓рдЪреА vds рдХреЛ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЬрд▓реНрджреА рдирд╣реАрдВ рдереАред , рдФрд░ рдХреВрдбрд╝рд╛ рдЙрдард╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗ)ред
рдЪрдХреНрд░ = 1000 рдкрд░ рдкреНрд░рд╡рд╛рд╣ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдЪреИрдирд▓ рдХреА рднрд░рдиреЗ рдХреА рджрд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛

рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди MAXPROCS = 1 рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИ
рдЧрд┐рдЯреНрдЯреА рд▓реЛрдб рдореЗрдВ рд╡реГрджреНрдзрд┐ рдкрд░ рдЪреИрдирд▓ рднрд░рдиреЗ рдХреА рджрд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛

рд▓реЛрдб рдХреЗ рддрд╣рдд, рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдЕрднреА рднреА рдЕрдкрдирд╛ рдЯреЛрд▓ рд▓реЗрддрд╛ рд╣реИред
рдЪрд╛рд░реНрдЯ рд╕реЗ рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдХреНрд╕рдкреНрд░реЛрдХреНрд╕ = 1 рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ 1 рдереНрд░реЗрдб рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЫрджреНрдо-рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдЖрдВрддрд░рд┐рдХ рдЧреЛрд▓рдВрдЧ рдЕрдиреБрд╕реВрдЪрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдХреБрд╢рд▓ рд╣реИред
рдореИрдХреНрд╕рдкреНрд░реЛрдХреНрд╕ = 2 рдпрд╛ рдЕрдзрд┐рдХ рдХреЗ рд╕рд╛рде, рдЕрдзрд┐рдХ рдкреНрд░рд╡рд╛рд╣ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХрд╛ рддрдВрддреНрд░ рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИред рд░реБрдХрд╛рд╡рдЯреЗрдВ рдЖрддреА рд╣реИрдВ, рдФрд░ рд╕рдм рдХреБрдЫ рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реЛрдиреЗ рдХреЗ рдзрд╛рдЧреЗ рдкрд░ - рд▓рдЧрднрдЧ 2 рдмрд╛рд░ред
рдореИрдХреНрд╕рдкреНрд░реЛрдХреНрд╕ = 3..256 рдХреЗ рд╕рд╛рде, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдереНрд░реЗрдбреНрд╕ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рдмрдврд╝рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдереНрд░реЗрдбреНрд╕ "рдЫрджреНрдо-рдзрд╛рдЧреЗ" рдмрди рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдЖрдВрддрд░рд┐рдХ рдЧреЛрд▓рдВрдЧ рдЕрдиреБрд╕реВрдЪрдХ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдЖрдиреЗ рд▓рдЧрддрд╛ рд╣реИред рдпрд╣ "рдЫрджреНрдо-рд╕реВрддреНрд░" рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рдЧрддрд┐ рдореЗрдВ рдПрдХ рдЫреЛрдЯреА рд╡реГрджреНрдзрд┐ рджреЗрддрд╛ рд╣реИред
рдореИрдХреНрд╕рдкреНрд░реЛрдХреНрд╕ (256 рдХреЗ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рддрдХ) рдореЗрдВ рдФрд░ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдзрд╛рдЧреЗ рдЫрджреНрдо рдзрд╛рдЧреЗ рдмрди рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдЕрдиреБрд╕реВрдЪрдХ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреБрдЫ рдзрд╛рдЧреЗ рдЕрднреА рднреА рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдзрд╛рдЧреЗ рд╣реИрдВред рд╕реНрд▓реАрдкрд┐рдВрдЧ рдереНрд░реЗрдбреНрд╕ рдФрд░ рдлрд╛рд╕реНрдЯ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкрд░, рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рд▓рдЧрднрдЧ 10% рдЦрд░реНрдЪ рд╣реЛрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖ред
рд░рдирдЯрд╛рдЗрдо рдмрджрд▓рдирд╛ред MAXPROCS рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд▓рд╛рдн рдФрд░ рд╣рд╛рдирд┐ рджреЛрдиреЛрдВ рд▓рд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдХрд╛ рдкреНрд░рднрд╛рд╡ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред