Linux epoll рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рд╕рдЪреНрдЪрд╛рдИ

рдЦреИрд░, рдпрд╛ рд▓рдЧрднрдЧ рд╕рднреА ...



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


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


рдХреЛрдИ рднреА рдПрдХ рдХреБрд▓реНрд╣рд╛рдбрд╝реА рдорд╛рд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕рдЪреНрдЪрд╛ рдпреЛрджреНрдзрд╛ рд▓реЗрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдореЗрд▓реЗ рдХреА рдзреБрди рдЧрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдардХ рдПрдкреЛрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдореИрди рдкреЗрдЬ рдкрдврд╝реЗрдВред рдПрдкреЛрд▓ , рдкреЛрд▓ , рд╕реЗрд▓реЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдмрд╛рд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рд╣реЛред


рдмрд╣реБрдд рд╕реЗ рдПрдл.рдбреА.


рдЬрдм рд▓реЛрдЧ рдПрдкреЛрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рдд рдХреЛ рд╕реБрдирддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдм рдмрд╣реБрдд рд╕рд╛рд░реЗ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред


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


рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдПрдкреЛрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ (рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд▓реЗрдЦреЛрдВ рд╕рд╣рд┐рдд рдХрд╛рдлреА рд╕рд╛рдордЧреНрд░реА рд╣реИ), рдЙрддреНрддрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдЕрдЧрд░ рдФрд░ рдХреЗрд╡рд▓ "рдПрдХ рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛" рдпреМрдЧрд┐рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ "рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░" рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛред рдорд╛рддреНрд░рд╛ рдХрд╛ рдЪрд┐рд╣реНрди, рдЬрдм рд▓рд╛рдн рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрдереНрдп рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдХреЛрдИ рдореВрддреНрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, 10k рдпреМрдЧрд┐рдХреЛрдВ рдХреЛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ [4]ред


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


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


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдмрд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХрд░реНрдиреЗрд▓ рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рднреА рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ + рдУрд╡рд░рд╣реЗрдб рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рддреЗ рд╣реИрдВред


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдорд╛рдк рдореЗрдВ, рдЬреЛ рдкреИрдЪ [9] рд╕реЗ рдЬреБрдбрд╝рд╛ рдерд╛, рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдХреЗрд╡рд▓ рд▓реЗрдЦ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдбреАрдХреЙрди рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ (рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, pipetest.c рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛрдб рдЦреЛ рдЧрдпрд╛ рд╣реИ)ред рджреВрд╕рд░реА рдУрд░, рдЕрдиреНрдп рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ [рем, notice] рдпрд╣ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддрдереНрдп рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред


рд╕рд╡рд╛рд▓ рддреБрд░рдВрдд рдЙрдарддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдИ рдПрдкреЛрд▓ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рд╕реЗрд╡рд╛ рджреЗрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдерд╛, рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ?


рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдПрдкреЛрд▓ рдореВрд▓ рд░реВрдк рд╕реЗ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ [5, 8, 9], рдпрд╣ рдПрдкреЛрд▓ рдХреЗ рдмреАрдЪ рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред


EPOLLET


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


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

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

рдпрджрд┐ рд▓реЗрд╡рд▓-рдЯреНрд░рд┐рдЧрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдПрдкреЛрд▓ (рд╕рд╛рде рд╣реА рдкреЛрд▓ / рд╕реЗрд▓реЗрдХреНрдЯ ) рдХреЛ рдЕрдирд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ рдФрд░ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рдлрд╝ рд╣реЛрдиреЗ рддрдХ рд╕рдХреНрд░рд┐рдп рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдПрдЬ-рдЯреНрд░рд┐рдЧрд░ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рджрд┐рдП рдЧрдП рд░рд╛рдЬреНрдп рдХреЛ рдмрджрд▓рдХрд░ рдЕрдирд▓реЙрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдпрд╣ рдЖрдкрдХреЛ рдмрд╛рдж рдореЗрдВ рдШрдЯрдирд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд░рд╕реАрдж рдкрд░ рддреБрд░рдВрдд рдирд╣реАрдВ (рд▓рдЧрднрдЧ рдПрдХ рд╕реАрдзрд╛ рд╕рд╛рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдКрдкрд░реА рдЖрдзрд╛ рдФрд░ рдиреАрдЪреЗ рдХреЗ рдЖрдзреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдмрд╛рдзрд╛ рд╣реИрдВрдбрд▓рд░)ред


рдПрдкреЛрд▓ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг:


рд╕реНрддрд░ рдмрдврд╝ рдЧрдпрд╛


  • рдзреНрд╡рдЬ EPOLLIN рдХреЗ рд╕рд╛рде рдПрдкреЛрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛
  • рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордп epoll_wait () рдмреНрд▓реЙрдХ
  • 19 рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдмрд╛рдЗрдЯ рдХреЛ рд▓рд┐рдЦреЗрдВ
  • epoll_wait () EPOLLIN рдЗрд╡реЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЕрдирд▓реЙрдХ рд╣реЛрддрд╛ рд╣реИ
  • рд╣рдо рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдпрд╛ рдерд╛
  • epoll_wait () EPOLLIN рдЗрд╡реЗрдВрдЯ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдЕрдирд▓реЙрдХ рд╣реЛрддрд╛ рд╣реИ

рдФрд░ рдпрд╣ рддрдм рддрдХ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛ рдЬрдм рддрдХ рд╣рдо рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд┐рди рдпрд╛ рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред


рдмрдврд╝рдд рддреЗрдЬ рд╣реЛ рдЧрдИ


  • EPOLLIN рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИрдВрдбрд▓ | EPOLLET
  • рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордп epoll_wait () рдмреНрд▓реЙрдХ
  • 19 рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдмрд╛рдЗрдЯ рдХреЛ рд▓рд┐рдЦреЗрдВ
  • epoll_wait () EPOLLIN рдЗрд╡реЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЕрдирд▓реЙрдХ рд╣реЛрддрд╛ рд╣реИ
  • рд╣рдо рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдпрд╛ рдерд╛
  • epoll_wait () рдЕрд╡рд░реБрджреНрдз рд╣реИ рдПрдХ рдирдИ рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ
  • рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдкрд░ рдПрдХ рдФрд░ 19 рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦреЗрдВ
  • epoll_wait () рдирдП EPOLLIN рдЗрд╡реЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЕрдирд▓реЙрдХ рд╣реЛрддрд╛ рд╣реИ
  • epoll_wait () рдЕрд╡рд░реБрджреНрдз рд╣реИ рдПрдХ рдирдИ рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ

рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг: epollet_socket.c


рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдИрд╡реЗрдВрдЯ рдХреЗ рдХрд╛рд░рдг epoll_wait () рдХреА рд╡рд╛рдкрд╕реА рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдпрджрд┐, рд╕реНрддрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдкреЛрд▓_рд╡рд╛рдЗрдЯ () рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп , рдХрд░реНрдиреЗрд▓ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдПрдлрдбреА рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ, рддреЛ рдЗрд╕ рдЪреЗрдХ рдХреЛ рдХрд┐рдирд╛рд░реЗ рдХрд░реЗрдВ рдФрд░ рддреБрд░рдВрдд рдХреЙрд▓рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдиреАрдВрдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдбрд╛рд▓ рджреЗрддрд╛ рд╣реИред


EPOLLET рд╣реА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдкреЛрд▓ O (1) рдХреЛ рдмрд╣реБрд╕рдВрдХреЗрддрдХ рдмрдирд╛рддрд╛ рд╣реИред


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


// TCP socket (byte stream) //  fd    EPOLLIN      int len = read(fd, buffer, BUFFER_LEN); if(len < BUFFER_LEN) { //   } else { //         //  -       epoll_wait, //      } 

  // accept //  listenfd    EPOLLIN      event.events = EPOLLIN | EPOLLERR; epoll_ctl(epoll_fd, EPOLL_CTL_ADD, server_fd, &event); sleep(5); //       >1  //   while(epoll_wait()) { newfd = accept(listenfd, ...); //      //        //  epoll_wait    listenfd    } //   while(epoll_wait()) { while((newfd = accept(...)) > 0) { //  -  } if(newfd == -1 && errno = EAGAIN) { //       //       } } 

рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде, рдмрд╕ рднреБрдЦрдорд░реА рдХрд╛рдлреА рд╣реИ:


  • рдкреИрдХреЗрдЯ рд╡рд┐рд╡рд░рдгрдХ рдХреЗ рдкрд╛рд╕ рдЖрддреЗ рд╣реИрдВ
  • рдмрдлрд░ рдХреЛ рдкреИрдХреЗрдЯ рдкрдврд╝реЗрдВ
  • рдПрдХ рдФрд░ рдкреИрдХреЗрдЯ рдЖрддрд╛ рд╣реИ
  • рдмрдлрд░ рдХреЛ рдкреИрдХреЗрдЯ рдкрдврд╝реЗрдВ
  • рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЖрддрд╛ рд╣реИ
  • ...

рдЗрд╕ рдкреНрд░рдХрд╛рд░ , рд╣рдо рдЬрд▓реНрдж рд╣реА рдИрдПрдЬреАрдПрди рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рдкрдврд╝рдиреЗ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИрдВ, рдбреЗрдЯрд╛ рдХреЗ рдЫреЛрдЯреЗ рд╣рд┐рд╕реНрд╕реЗред


рдЧрд░рдЬрдирджрд╛рд░ рдмреЗрд╡рдХреВрдл рдЭреБрдВрдб


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


рдЭреБрдВрдб рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди


рдердВрдбрд░ рд╣рд░реНрдб рдХреА рд╕рдорд╕реНрдпрд╛

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

рдЖрдИрдЯреА рд╢рдмреНрджрд╛рд╡рд▓реА - рд╡рд╕реАрд▓реА рдЕрд▓реЗрдХреНрд╕реЗрдиреНрдХреЛ

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ () рдФрд░ рдкрдврд╝реЗрдВ () рдПрдкреЛрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдзрд╛рд░рд╛рдУрдВ рдкрд░ рд╡рд┐рддрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред


рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛


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


рд▓реЗрдХрд┐рди рдПрдкреЛрд▓ рдХреЗ рд╕рд╛рде , рдРрд╕реА рдЪрд╛рд▓ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреАред рдпрджрд┐ рд╣рдо рдЧреИрд░-рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╕реЙрдХреЗрдЯ рдкрд░ рдмрдирд╛рдП рдЧрдП рд╕реБрдиреЛ () рд╣реИрдВ , рддреЛ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдкрд░, рд╕рднреА epoll_wait () рдЗрд╕ рд╡рд┐рд╡рд░рдгрдХ рд╕реЗ рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗред


рдмреЗрд╢рдХ, рд╕реНрд╡реАрдХрд╛рд░ () рдХреЗрд╡рд▓ рдПрдХ рдзрд╛рдЧрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛, рдмрд╛рдХреА рдХреЛ рдИрдЧреИрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдмрд░реНрдмрд╛рджреА рд╣реИред


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


рдФрд░ рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╣рдореЗрдВ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкрдбрд╝реЛрд╕реА рдзрд╛рд░рд╛ рд╡реНрдпрд░реНрде рд╣реЛ рдЧрдИ рдереАред


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


EPOLLONESHOT


рд╕рдВрд╕реНрдХрд░рдг 4.5 рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рд╢реНрд░рд╡рдг () рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдореЗрдВ рдЕрдЧрд▓реЗ рд╕реНрд╡реАрдХрд╛рд░ () рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдПрдкреЛрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рд╣реА рддрд░реАрдХрд╛ EPOLLONESHOT рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рдирд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╣рдореЗрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдереНрд░реЗрдб рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛ ред


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рдЕрдЧрд░ EPOLLONESHOT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рддреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╡рд░рдгрдХ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реА рдШрдЯрдирд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╣реА рдЖрдЧ рд▓рдЧ рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж epoll_ctl () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЭрдВрдбреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдореБрд░реНрдЧрд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред


EPOLLEXCLUSIVE


рдпрд╣рд╛рдБ EPOLLEXCLUSIVE рдФрд░ рд╕реНрддрд░-рдЯреНрд░рд┐рдЧрд░ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред


EPOLLEXCLUSIVE рдПрдХ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рд▓рдВрдмрд┐рдд epoll_wait () рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░рддрд╛ рд╣реИред


рдпрд╣ рдпреЛрдЬрдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ):


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

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рднреА рд░рдЦрд░рдЦрд╛рд╡ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред


 $ ./epollexclusive --help -i, --ip=ADDR specify ip address -p, --port=PORT specify port -n, --threads=NUM specify number of threads to use #    -  n*8 -t, --thunder not adding EPOLLEXCLUSIVE #     thunder herd -h, --help prints this message $ sudo taskset -c 0-7 ./epollexclusive -i 10.56.75.201 -p 40000 -n 8 2>&1 

рдЙрджрд╛рд╣рд░рдг рдХреЛрдб: epollexclusive.c (рдХреЗрд╡рд▓ 4.5 рд╕реЗ рдХрд░реНрдиреЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛)


рд╣рдореЗрдВ рдПрдкреЛрд▓ рдкрд░ рдкреНрд░реА-рдлреЛрд░реНрдХ рдореЙрдбрд▓ рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рдпреЛрдЬрдирд╛ рдХрдо рд╕рдордп рдХреЗ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рд╣реИред


рдкрдврд╝рдирд╛


рд▓реЗрдХрд┐рди рдмрд╛рдЗрдЯ-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд░реАрдб () рдХреЗ рд╕рд╛рде, EPOLLCL рдХреА рддрд░рд╣ EPOLLEXCLUSIVE рд╣рдорд╛рд░реА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред


рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, EPOLLEXCLUSIVE рдХреЗ рдмрд┐рдирд╛ рд╣рдо рд╕рднреА рд╕реНрддрд░ рдкрд░ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред EPOLLEXCLUSIVE рдХреЗ рд╕рд╛рде , рд╕рдм рдХреБрдЫ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдКрдкрд░ рдПрдХ рдкреИрдХреЗрдЬ рдлреИрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдХреНрд░рдо рдЖ рдЧрдпрд╛ рд╣реИред


EPOLLET рдХреЗ рд╕рд╛рде , рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реИред


рдФрд░ рдпрд╣рд╛рдБ рдХрд╛рдо рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдкреБрдирд░реНрдирд┐рдорд╛рдг рдХреЗ рд╕рд╛рде EPOLLONESHOT рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЬреИрд╕реЗ рд╣реА рдПрдХ рдереНрд░реЗрдб рдЗрд╕ рдлрд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдФрд░ рдмрдлрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛:


  • EPOLLONESHOT рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓ | EPOLLET
  • epoll_wait рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ ()
  • рд╕реЙрдХреЗрдЯ рд╕реЗ рдмрдлрд░ рддрдХ рдкрдврд╝реЗрдВ () рд░рд┐рдЯрд░реНрди рдИрдПрдПрдирдЬреАрдПрди
  • EPOLLONESHOT рдЭрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдЗрдП | EPOLLET

рд╕рдВрд░рдЪрдирд╛ epoll_event


 typedef union epoll_data { void *ptr; int fd; uint32_t u32; uint64_t u64; } epoll_data_t; struct epoll_event { uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */ }; 

рдпрд╣ рдЖрдЗрдЯрдо рд╢рд╛рдпрдж рдореЗрд░реЗ рд▓реЗрдЦ рдореЗрд░реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд IMHO рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реИред рд╕реВрдЪрдХ рдпрд╛ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕рд╣рд╛рдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдкреЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдЯреНрд░рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) struct epoll_client { /** some usefull associated data...*/ struct epoll_event event; }; struct epoll_client* to_epoll_client(struct epoll_event* event) { return container_of(event, struct epoll_client, event); } struct epoll_client ec; ... epoll_ctl(efd, EPOLL_CTL_ADD, fd, &ec.e); ... epoll_wait (efd, events, 1, -1); struct epoll_client* ec_ = to_epoll_client(events[0].data.ptr); 

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддрдХрдиреАрдХ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдИ рд╣реИред


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


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рдПрдкреЛрд▓ рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдЦреЛрд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдЬреЛ рд▓реЛрдЧ рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рдирдмреВрдЭрдХрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рд╕рдВрджрд░реНрдн [1, 2, 3, 5] рдХреА рд╕реВрдЪреА рдореЗрдВ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


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


рдПрдкреЛрд▓ рдЕрджреНрд╡рд┐рддреАрдп рддрдВрддреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬрд┐рд╕реЗ рд▓реЛрдЧреЛрдВ рдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдирдХреНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрдереЛрдВ рдХреЛ рдЪреБрдирд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдПрдХ рдЧрдВрднреАрд░ рд▓рд╛рдн рджреЗрддреЗ рд╣реИрдВ), рдФрд░, рд╕рдВрднрд╡рддрдГ, рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдорд┐рдВрдЧ рдХреЛ рдордирд╛ рдХрд░ рджреЗрдВрдЧреЗ (рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВ) рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдкрд░ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛)ред


рд╕рдорд╕реНрдпрд╛ рдХреА "рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд░реНрдХ рджреЗрдирд╛


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


"рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдереА [9, 11]? рдпрд╛ рдХреНрдпрд╛ рд╣рдо 1k рдХрдиреЗрдХреНрд╢рди рднреА рд╕реЗрд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдПрдХ рджреИрдирд┐рдХ рдХрд╛рд░реНрдп рд╣реИ?"


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


рд╕рдВрджреЗрд╣ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рд▓рд┐рдВрдХ:


NGINX 1.9.1 - VBart рдореЗрдВ SO_REUSEPORT рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рдкреНрд░рджрд░реНрд╢рди
рдпреВрдирд┐рдХреЙрд░реНрди рд╕реЗ рд╕реАрдЦрдирд╛: рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ () рдЧрд░рдЬрдирд╛ рдЧреИрд░-рд╕рдорд╕реНрдпрд╛ - рдХреНрд░рд┐рд╕ рд╕рд┐рдПрдмреЗрдирдореИрди
рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд┐рдВрдЧ рд╕реНрд╡реАрдХрд╛рд░ (), AKA рдердВрдбрд░рд┐рдВрдЧ рд╣реЗрд░, AKA рдж рдЬрд╝реАрдЧ рдкреНрд░реЙрдмреНрд▓рдо - рд░реЙрдмрд░реНрдЯреЛ рдбреА рдЗрдУрд░рд┐рд╕
рдПрдкреЛрд▓ рдХреЗ EPOLLEXCLUSIVE рдореЛрдб рд╕реНрддрд░-рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИ?


рд╕рдВрджрд░реНрдн


  1. рдЪрдпрди рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ - рдорд╛рд░реЗрдХ
  2. рдПрдкреЛрд▓ рдореВрд▓ рд░реВрдк рд╕реЗ 1/2 рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ - рдорд╛рд░реЗрдХ
  3. рдПрдкреЛрд▓ рдореВрд▓ рд░реВрдк рд╕реЗ 2/2 рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ - рдорд╛рд░реЗрдХ
  4. C10K рд╕рдорд╕реНрдпрд╛ - рдбреИрди рдХреЗрдЧреЗрд▓
  5. рдкреЛрд▓ рдмрдирд╛рдо рдПрдкреЛрд▓, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ - рдЬреИрдХреНрд╕ рдореИрдерд┐рдЬ
  6. epoll - I / O рдШрдЯрдирд╛ рд╕реВрдЪрдирд╛ рд╕реБрд╡рд┐рдзрд╛ - рдорд╛рди
  7. рдкрд╛рдЧрд▓ рд╣реЛрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ - рд╕рд┐рдВрдбреА рд╢реНрд░реАрдзрд░рди

рдорд╛рдирдХ


  1. https://www.kernel.org/doc/ols/2004/ols2004v1-pages-215-226.pdf
  2. http://lse.sourceforge.net/epoll/index.html
  3. https://mvitolin.wordpress.com/2015/12/05/endurox-testing-epollexclusive-flag/

рдПрдкреЛрд▓ рдХрд╛ рд╡рд┐рдХрд╛рд╕


  1. https://lwn.net/Articles/13918/
  2. https://lwn.net/Articles/520012/
  3. https://lwn.net/Articles/520198/
  4. https://lwn.net/Articles/542629/
  5. https://lwn.net/Articles/633422/
  6. https://lwn.net/Articles/637435/

рдЙрдкрд╕рдВрд╣рд╛рд░


рдореВрд▓реНрдпрд╡рд╛рди рдЪрд░реНрдЪрд╛рдУрдВ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдорджрдж рдХреЗ рд▓рд┐рдП рд╕рд░реНрдЧреЗрдИ ( dlinyj ) рдФрд░ рдкреАрдЯрд░ рдУрд╡реЗрдЪрдирдХреЛрд╡ рдХреЛ рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

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


All Articles