C ++ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдЕрдХреНрд╕рд░ рдмрдирд╛рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛

рдЫрд╡рд┐

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

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

рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рдЙрд▓рдЯ рджреЗрдВ


рдЖрдЗрдП, рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕рд┐рдВрдЧ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рдЗрд╕реЗ C ++ рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреИрд╕реЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрд╢рди рдирд╛рдордХ рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЪрд╛рд╣рд┐рдПред рд╕рд░реНрд╡рд░ рд╕рддреНрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ; рдЧреНрд░рд╛рд╣рдХ рд╕рддреНрд░ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдз рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдлрд░ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдХрд╛рдо рдХреЛ рдЕрдВрджрд░ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕рддреНрд░ рд╕реЙрдХреЗрдЯ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рддреНрд░ рд╕реЙрдХреЗрдЯ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рддреНрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдмреВрд╕реНрдЯ.рдЖрд╕рд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдЯреНрд░реАрдо рдмрдлрд░ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП, рд╡рд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рд╣рдо рдХрд┐рд╕ рддрд░рд╣ рдХреА рдореЗрдореЛрд░реА рдХреЙрдкреА рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддреЗ рд╕рдордп, рдЯреНрд░реИрдлрд╝рд┐рдХ рд╣рдореЗрд╢рд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦреЗрдВ: рдЗрд╕рдореЗрдВ рд╣рдо рдПрдХ рд╣реЗрдбрд░ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рджреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд╡реЗрд░реА рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рд╕ рдкрд░ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╕реЗрд╡рд╛ рдХреЗ рдЕрдВрджрд░ рддрд░реНрдХ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдк рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдирдХрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ! рдпрджрд┐ рдХреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд╛ рдХреЗрд╡рд▓ 1% рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ 99% рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ 1% рдХреЗ рд▓рд┐рдП рдирдИ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЖрдкрдХреЛ рдЗрд╕ рдмрдврд╝рд╛рд╡рд╛ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░реЗрдЧрд╛ :: asio :: const_buffer рдФрд░ boost :: asio :: mutable_buffer, рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдЖрдк рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рдХреЗ рдХрдИ рдирд┐рд░рдВрддрд░ рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз:

Browser -> Proxy: > POST / HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 127.0.0.1:50080 > Accept: */* > Content-Length: 5888903 > Content-Type: application/x-www-form-urlencoded > ... Proxy -> Service: > POST / HTTP/1.1 > User-Agent: curl/7.29.0 > Host: 127.0.0.1:50080 > Accept: */* > Transfer-Encoding: chunked > Content-Type: application/x-www-form-urlencoded > Expect: 100-continue > ... Service -> Proxy: < HTTP/1.1 200 OK Proxy -> Browser < HTTP/1.1 200 OK 

рд╕рдорд╕реНрдпрд╛


рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рддреИрдпрд╛рд░-рддреИрдпрд╛рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдорд┐рд▓рд╛ рдЬреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рд╕рдВрдкрдиреНрди рд╣реИред рдЗрд╕реЗ рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ, рд╣рдо рдЗрд╕ рдмрд╛рдд рд╕реЗ рдХрд╛рдлреА рдЦреБрд╢ рдереЗ рдХрд┐ рдЗрд╕рдиреЗ рдХрд┐рддрдиреЗ рд╕рдордп рддрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред

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

рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ (рд╡реЛрд╕реНрд▓реИрдм):



рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ, рдСрдкрд░реЗрдЯрд░ рдирдП рдиреЗ 67 рд╕реЗрдХрдВрдб рдХрд╛рдо рдХрд┐рдпрд╛, рдФрд░ рдСрдкрд░реЗрдЯрд░ рдиреЗ рдФрд░ рднреА рдЕрдзрд┐рдХ - 97 рд╕реЗрдХрдВрдб рд╣рдЯрд╛ рджрд┐рдПред

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

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

рдЪрд╛рд░реНрдЯ (рд╕реНрд▓реИрдм рд╡рд┐рддрд░рдг):



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

  • рдЫреЛрдЯрд╛ :: рдЖрд╡рдВрдЯрдирдХрд░реНрддрд╛
  • рдЫреЛрдЯрд╛ :: slab_cache (рд╕реНрдерд╛рдиреАрдп рд╕реНрдерд╛рдиреАрдп)
  • рдЫреЛрдЯрд╛ :: рд╕реНрд▓реИрдм
  • рдЫреЛрдЯрд╛ :: рдЕрдЦрд╛рдбрд╝рд╛
  • рдЫреЛрдЯрд╛ :: рдХреЛрдЯрд╛

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

рд▓рдкреЗрдЯрдирд╛


рд▓рд┐рдмрд╕реНрдореЙрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА C рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИ, C ++ рдореЗрдВ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдорд╛рдирдХ C ++ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкрд╛рд░рджрд░реНрд╢реА рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрдИ рдЖрд╡рд░рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдкрдбрд╝реЗред

  • variti :: slab_allocator
  • variti :: рд╕реНрд▓реИрдм
  • variti :: thread_local_slab
  • variti :: slab_allocate_sared

Variti :: slab_allocator рд╡рд░реНрдЧ рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рд╡рд╣ рд╕реНрд╡рдпрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдВрджрд░ рд╡рд╛рд░рд┐рдЯреА :: рд╕реНрд▓реИрдм рдХреНрд▓рд╛рд╕реЗрд╕, рд▓рд┐рдмрд╛рд╕рд╛рдорд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рдо рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗрд░рд╛рдЗрдЯреА :: рдереНрд░реЗрдб_рд▓реЛрдХрд▓_рд╕реНрд▓реИрдм рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рддрд░рдг рд╕реНрд▓реИрдм рдХреИрд╢ рдереНрд░реЗрдб рд╕реНрдерд╛рдиреАрдп рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдХреИрд╢ рдХрд╛ рдЕрдкрдирд╛ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп рдЕрд╡рд░реБрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреА рд╕реНрдореГрддрд┐ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ variti :: рд╕реНрд▓реИрдм рдХреНрд▓рд╛рд╕ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕ рддрдХ рдкрд╣реБрдБрдЪ рдХреЛ variti :: thread_local_slab рдЖрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдирд┐рдпрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдлрдВрдХреНрд╢рди variti :: slab_allocate_sared рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред

рд╡реЗрд░рд╛рдЗрдЯреА рдХреЗ рдЕрдВрджрд░ :: slab_allocator рд╡рд░реНрдЧ, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рддрдХ рд╡рд┐рджреНрд░реЛрд╣ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реВрдиреНрдп рд╕реЗ рдЪрд╛рд░ рддрдХред рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЖрдк nullptr рдХреА рд╡реНрдпрд╛рдкрдХрддрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЕрдкрд╡рд╛рдж std :: bad_alloc рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрдм рдореЗрдореЛрд░реА рд╡рд┐рддрд░рдг рд╕реНрд▓реИрдм рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреА рд╣реИред рдмрд╛рдХреА рд╡реИрд░рд╛рдЗрдЯреА :: рдереНрд░реЗрдб_рд▓реЛрдХрд▓_рд╕реНрд▓реИрдм рд░реИрдкрд░ рдХреЗ рдЕрдВрджрд░ рдХреЙрд▓ рдлреЙрд░рд╡рд░реНрдб рдХрд░ рд░рд╣рд╛ рд╣реИред

рд╕реНрдирд┐рдкреЗрдЯ (slab_allocator.hpp):

 template <typename T> class slab_allocator { public: using value_type = T; using pointer = value_type*; using const_pointer = const value_type*; using reference = value_type&; using const_reference = const value_type&; template <typename U> struct rebind { using other = slab_allocator<U>; }; slab_allocator() {} template <typename U> slab_allocator(const slab_allocator<U>& other) {} T* allocate(size_t n, const void* = nullptr) { auto p = static_cast<T*>(thread_local_slab::allocate(sizeof(T) * n)); if (!p && n) throw std::bad_alloc(); return p; } void deallocate(T* p, size_t n) { thread_local_slab::deallocate(p, sizeof(T) * n); } }; template <> class slab_allocator<void> { public: using value_type = void; using pointer = void*; using const_pointer = const void*; template <typename U> struct rebind { typedef slab_allocator<U> other; }; }; 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡реЗрд░рд┐рдЯреА :: рд╕реНрд▓реИрдм рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ, рд╣рдо рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдореЗрдореЛрд░реА рдХреЗ 1 GiB рд╕реЗ рдЕрдзрд┐рдХ рдХреБрд▓ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреВрд▓ рдХрд╛ рдЖрдХрд╛рд░ 1 MiB рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред рдиреНрдпреВрдирддрдо рд╡рд╕реНрддреБ рдЬрд┐рд╕реЗ рд╣рдо рд╡рд┐рддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рдЖрдХрд╛рд░ рдореЗрдВ 2 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓реАрдмрд╕реНрдореЙрд▓ рдЗрд╕реЗ рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ - 8 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рдмрдврд╝рд╛ рджреЗрдЧрд╛)ред рд╣рдорд╛рд░реЗ рд╕реНрд▓реИрдм рд╡рд┐рддрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╢реЗрд╖ рд╡рд╕реНрддреБрдПрдВ рджреЛ рдореЗрдВ рд╕реЗ рдХрдИ (рд╕реНрдерд┐рд░ 2.f рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд) рд╣реЛрдВрдЧреАред рдХреБрд▓, рдЖрдк рдЖрдХрд╛рд░ 8, 16, 32, рдЖрджрд┐ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЕрдиреБрд░реЛрдзрд┐рдд рд╡рд╕реНрддреБ 24 рдмрд╛рдЗрдЯ рдЖрдХрд╛рд░ рдореЗрдВ рд╣реИ, рддреЛ рд╕реНрдореГрддрд┐ рд╕реЗ рдПрдХ рдУрд╡рд░рд╣реЗрдб рд╣реЛрдЧрд╛ред рд╡рд┐рддрд░рдг рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓реМрдЯрд╛ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдПрдХ рдкреВрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдЖрдХрд╛рд░ рдореЗрдВ 32 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рд╢реЗрд╖ 8 рдмрд╛рдЗрдЯреНрд╕ рдмреЗрдХрд╛рд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рд╕реНрдирд┐рдкреЗрдЯ (slab.hpp):

 inline void* phys_to_virt_p(void* p) { return reinterpret_cast<char*>(p) + sizeof(std::thread::id); } inline size_t phys_to_virt_n(size_t n) { return n - sizeof(std::thread::id); } inline void* virt_to_phys_p(void* p) { return reinterpret_cast<char*>(p) - sizeof(std::thread::id); } inline size_t virt_to_phys_n(size_t n) { return n + sizeof(std::thread::id); } inline std::thread::id& phys_thread_id(void* p) { return *reinterpret_cast<std::thread::id*>(p); } class slab : public noncopyable { public: slab() { small::quota_init(& quota_, 1024 * 1024 * 1024); small::slab_arena_create(&arena_, & quota_, 0, 1024 * 1024, MAP_PRIVATE); small::slab_cache_create(&cache_, &arena_); small::allocator_create(&allocator_, &cache_, 2, 2.f); } ~slab() { small::allocator_destroy(&allocator_); small::slab_cache_destroy(&cache_); small::slab_arena_destroy(&arena_); } void* allocate(size_t n) { auto phys_n = virt_to_phys_n(n); auto phys_p = small::malloc(&allocator_, phys_n); if (!phys_p) return nullptr; phys_thread_id(phys_p) = std::this_thread::get_id(); return phys_to_virt_p(phys_p); } void deallocate(const void* p, size_t n) { auto phys_p = virt_to_phys_p(const_cast<void*>(p)); auto phys_n = virt_to_phys_n(n); assert(phys_thread_id(phys_p) == std::this_thread::get_id()); small::free(&allocator_, phys_p, phys_n); } private: small::quota quota_; small::slab_arena arena_; small::slab_cache cache_; small::allocator allocator_; }; 

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

рдЪрд╛рд░реНрдЯ (std :: рдереНрд░реЗрдб :: id):



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

рд╕реНрдирд┐рдкреЗрдЯ (рдереНрд░реЗрдб_рд▓реЛрдХрд▓_рд╕реНрд▓реИрдм.рд╣рдк):

 class thread_local_slab : public noncopyable { public: static void initialize(); static void finalize(); static void* allocate(size_t n); static void deallocate(const void* p, size_t n); }; 

рд╕реНрдирд┐рдкреЗрдЯ (рдереНрд░реЗрдб_рд▓реЛрдХрд▓_рд╕реНрд▓реИрдм.рдХреИрдк):

 static thread_local slab* slab_; void thread_local_slab::initialize() { slab_ = new slab(slab_cfg_); } void thread_local_slab::finalize() { delete slab_; } void* thread_local_slab::malloc(size_t n) { return slab_->malloc(n); } void thread_local_slab::free(const void* p, size_t n) { slab_->free(p, n); } 

рдЬрдм рд╕реНрдЯреНрд░реАрдо рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдм рд╡рд┐рднрд┐рдиреНрди рдЖрдИрдУрдИ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдмреАрдЪ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛), рддреЛ рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╣реА рд░рд┐рд▓реАрдЬ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд╣ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рд╡рд╕реНрддреБ рдХреЛ рдЙрд╕рдХреЗ io рд╕рдВрджрд░реНрдн рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реБрдП рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ std рдореЗрдВ рд▓рдкреЗрдЯрддрд╛ рд╣реИ :: рдПрдХ рдХрд╕реНрдЯрдо рд╡рд┐рднрдХреНрдд рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ рд╡рд┐рддрд░рдг рдХреЛ рд╡рд╕реНрддреБ рдХреЛ рддреБрд░рдВрдд рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП io рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдкреНрд░рддреНрдпреЗрдХ io рд╕рдВрджрд░реНрдн рдПрдХ рд╣реА рдзрд╛рдЧреЗ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИред

рд╕реНрдирд┐рдкреЗрдЯ (slab_helper.hpp):

 template <typename T, typename Allocator, typename... Args> std::shared_ptr<T> slab_allocate_shared(Allocator allocator, Args... args) { T* p = allocator.allocate(1); new ((void*)p) T(std::forward<Args>(args)...); std::shared_ptr<T> ptr(p, [allocator](T* p) { p->~T(); allocator.deallocate(p); }); return ptr; }; template <typename T, typename Allocator, typename... Args> std::shared_ptr<T> slab_allocate_shared(Allocator allocator, boost::asio::io_service* io, Args... args) { T* p = allocator.allocate(1); new ((void*)p) T(std::forward<Args>(args)...); std::shared_ptr<T> ptr(p, [allocator, io](T* p) { io->post([allocator, p]() { p->~T(); allocator.deallocate(p); }); }); return ptr; }; 

рдирд┐рд░реНрдгрдп


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

  • variti :: рдЪрдВрдХ
  • variti :: streambuf
  • variti :: server_session
  • variti :: client_session

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

  • рдПрд╕рдЯреАрдбреА :: рд╕реВрдЪреА
  • std :: deque
  • рдПрд╕рдЯреАрдбреА :: рд╡реЗрдХреНрдЯрд░
  • рдПрд╕рдЯреАрдбреА :: рд╕реНрдЯреНрд░рд┐рдВрдЧ
  • рдПрд╕рдЯреАрдбреА :: рдирдХреНрд╢рд╛
  • std :: unordered_map

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

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

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

рдЕрдЧрд░ рд╣рдо std :: рд╡реЗрдХреНрдЯрд░ рдФрд░ std :: string рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЕрднреА рднреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИрдВред рдЗрди рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреБрдЫ рд╣рдж рддрдХ std :: deque рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЙрдирдХрд╛ рдирд┐рд░рдВрддрд░ рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ рдХрд╛рдлреА рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИред рд╣рдордиреЗ std :: рд╡реЗрдХреНрдЯрд░ рдФрд░ std :: std рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧ :: deque, рдФрд░ std :: рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рд╣рд╛рдВ, рд╣рдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдЦреЛ рдЧрдП рдФрд░ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рднреА, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдЕрдВрддрд┐рдо рддрд╕реНрд╡реАрд░ рдХреЛ рдЙрди рдЕрдиреБрдХреВрд▓рди рд╕реЗ рдмрд╣реБрдд рдХрдо рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд▓реНрдкрдирд╛ рдХреА рдЧрдИ рдереАред

рд╣рдордиреЗ std :: unordered_map рдХреЗ рд╕рд╛рде рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рдХрд┐рдпрд╛, рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рд╡реИрд░рд╛рдЗрдЯреА рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЗрд╕реЗ рдЫреЛрдбрд╝рддреЗ рд╣реБрдП :: flat_map рдХреЛ std :: deque рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЙрд╕реА рд╕рдордп, рд╣рдордиреЗ рдмрд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪрд░ рдореЗрдВ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдХреИрд╢ рдХрд┐рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ nginx рдореЗрдВ http рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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


рд╕реНрд▓реИрдм рдЖрд╡рдВрдЯрди рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рддреНрд░реЛрдВ рдХрд╛ рдкреВрд░рд╛ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЛ рдбреЗрдврд╝ рдЧреБрдирд╛ рд╕реЗ рдХрдо рдХрд░ рджрд┐рдпрд╛ред

рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ (рдХреЛрд▓рдбрд╕реНрд▓реИрдм) рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ:



рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ, рдСрдкрд░реЗрдЯрд░ рдирдП рдиреЗ 32 рд╕реЗрдХрдВрдб рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдСрдкрд░реЗрдЯрд░ рдиреЗ 24 рд╕реЗрдХрдВрдб рд╣рдЯрд╛ рджрд┐рдПред рдЗрд╕ рд╕рдордп рддрдХ, рдвреЗрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ: рд╕реНрдореЙрд▓реЛрдХ - 21 рд╕реЗрдХрдВрдб, mslab_alloc - 37 рд╕реЗрдХрдВрдб, smfree - 8 рд╕реЗрдХрдВрдб, mslab_free - 21 рд╕реЗрдХрдВрдбред рдХреБрд▓, 143 рд╕реЗрдХрдВрдб рдмрдирд╛рдо 161 рд╕реЗрдХрдВрдбред

рд▓реЗрдХрд┐рди рд╕реНрд▓реИрдм рд╡рд┐рддрд░рдг рдореЗрдВ рдХреИрд╢ рдХреЛ рд╢реБрд░реВ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдпреЗ рдорд╛рдк рдХрд┐рдП рдЧрдП рдереЗред рдПрдХ рдпреИрдВрдбреЗрдХреНрд╕-рдЯреИрдВрдХ рд╕реЗ рдмрд╛рд░-рдмрд╛рд░ рдЧреЛрд▓реАрдмрд╛рд░реА рдХреЗ рдмрд╛рдж, рд╕рдордЧреНрд░ рддрд╕реНрд╡реАрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реБрдЖред

рдПрдореНрдкрд▓реАрдлрд╛рдпрд░ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ (hotslab):



рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ, рдСрдкрд░реЗрдЯрд░ рдирдП рдиреЗ 20 рд╕реЗрдХрдВрдб, рд╕реНрдореЙрд▓реЛрдХ - 16 рд╕реЗрдХрдВрдб, mslab_alloc - 27 рд╕реЗрдХрдВрдб, рдСрдкрд░реЗрдЯрд░ рдбрд┐рд▓реАрдЯ - 16 рд╕реЗрдХрдВрдб, smfree - 7 рд╕реЗрдХрдВрдб, mslab_free - 17 рд╕реЗрдХрдВрдб рдХрд╛рдо рдХрд┐рдпрд╛ред 161 рд╕реЗрдХрдВрдб рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рдХреБрд▓ 103 рд╕реЗрдХрдВрдбред

рдорд╛рдк рддрд╛рд▓рд┐рдХрд╛:

  woslab coldslab hotslab operator new 67s 32s 20s smalloc - 21s 16s mslab_alloc - 37s 27s operator delete 94s 24s 16s smfree - 8s 7s mslab_free - 21s 17s summary 161s 143s 103s 

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

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

рдЖрд╡реЗрджрди


рдпрд╣рд╛рдБ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ !

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


All Articles