AzaThread - рдбрд╛рдВрдбрд╛ рдХреЗ рд╕рд╛рде PHP рдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ

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

рдПрдХ рдХрд╛рд░рдг рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдорд┐рд▓реЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдореБрдЭреЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ рдФрд░ рдореБрдЭреЗ рдЕрдкрдирд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдЦрдирд╛ рдерд╛ред
рдореЗрд░реЗ рдкрд╛рд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯ рдерд╛:

рдкрд░рд┐рдгрд╛рдо AzaThread рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдкреБрд░рд╛рдирд╛ рдирд╛рдо CThread) рд╣реИред

рдЕрдзреАрд░ рдХреЗ рд▓рд┐рдП, рддреБрд░рдВрдд рд╕реНрд░реЛрдд рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ:
github.com/Anizoptera/AzaThread

рд╡рд┐рд╡рд░рдг


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

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

рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: libevent , posix рдФрд░ pcntl ред

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

рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рддреБрд░рдВрдд рд▓рд╛рддрд╛ рд╣реВрдВред рдпрд╣ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i7 2600K 3.40 Ghz (VMware рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ Ubuntu 11.04) рдкрд░ рдЖрда рдзрд╛рдЧреЗ рдХреЗ рдПрдХ рдкреВрд▓ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬреЗрдкреАрдПрд╕ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ 10 рджреЛрд╣рд░рд╛рд╡ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдкрд░рд┐рдгрд╛рдо рджрд┐рдП рдЧрдП рд╣реИрдВ (рдиреМрдХрд░рд┐рдпреЛрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб - рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╕ рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддреА рд╣реИ)ред
рд╕рдВрдЦреНрдпрд╛JPSрд╡рд┐рд╡рд░рдг
16501рд╕рдорд╛рди рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрд░рд┐рдпрд▓ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдкред
26625рдПрдХ рд╣реА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди igbinary рдХреНрд░рдорд╛рдВрдХрди (рд╕рдмрд╕реЗ рдЙрддреНрдкрд╛рджрдХ рд╡рд┐рдХрд▓реНрдк) рдХреЗ рд╕рд╛рдеред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ igbinary рд╕реНрдерд╛рдкрд┐рдд рд╣реИред
36194рд╕рд┐рд╕реНрдЯрдо рд╡реА рдореЗрдореЛрд░реА рдХрддрд╛рд░ (sysvmsg)
46008рд╕рд┐рд╕реНрдЯрдо V рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА (sysvshm)
56052рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдореЗрдореЛрд░реА (shmop)

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

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

рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рднреА рд╕рд┐рдЧреНрдирд▓ рднреА рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЭреВрдареА рдХреЗ рд▓рд┐рдП ListenMasterSignals рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдХреЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ SIGCHLD рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рдПрдЧреАред рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ m <рд╕рд┐рдЧреНрдирд▓ рдирд╛рдо> рдирд╛рдордХ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдмрдирд╛рдХрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП mSigTerm ред

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

рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдордп-рд╕рдордп рдкрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИред рдпрджрд┐ рд╡рд╣ рдЕрдЪрд╛рдирдХ рдорд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрдЪреНрдЪрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

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

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

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

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

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

рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг


рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрдзрд┐рдХрддрдо рд╕рд╛рджрдЧреА рд╣реИред рдпрджрд┐ рдЖрдк рдХреБрдЫ рдЕрд▓рдЧ "рдереНрд░реЗрдб" рдореЗрдВ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рдХреЛрдб рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
class ExampleThread extends Thread { protected function process() { // Some work here } } $thread = new ExampleThread(); $thread->wait()->run(); 

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

рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде, рдХреЛрдб рдмрд╕ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рджрд┐рдЦреЗрдЧрд╛:
 class ExampleThread extends Thread { protected function process() { return $this->getParam(0); } } $thread = new ExampleThread(); $thread->wait()->run(123); $result = $thread->wait()->getResult(); 


рдЗрд╕реА рддрд░рд╣, рд╣рдорд╛рд░реЗ рд╣рд╛рде рдХреА рдереЛрдбрд╝реА рд╕реА рд▓рд╣рд░ рдХреЗ рд╕рд╛рде, рдзрд╛рд░рд╛ рд╕реЗ рдШрдЯрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝реЗрдВ:
 class ExampleThread extends Thread { const EV_PROCESS = 'process'; protected function process() { $events = $this->getParam(0); for ($i = 0; $i < $events; $i++) { $event_data = $i; $this->trigger(self::EV_PROCESS, $event_data); } } } //  . $additionalArgument = 123; $thread->bind(ExampleThread::EV_PROCESS, function($event_name, $event_data, $additional_arg) { //   }, $additionalArgument); $events = 10; //  ,    //         , //    preforkWait  TRUE  - $thread->wait(); $thread = new ExampleThread(); $thread->run($events)->wait(); 


рдФрд░ рдЕрдВрдд рдореЗрдВ, рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд╕рд╛рде рдЖрда рдзрд╛рдЧреЗ рдХрд╛ рдПрдХ рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░:
 $threads = 8 //   $pool = new ThreadPool('ExampleThread', $threads); $num = 25; //   $left = $num; //    do { //       //        while ($pool->hasWaiting() && $left > 0) { //    id  $threadId = $pool->run(); $left--; } if ($results = $pool->wait($failed)) { foreach ($results as $threadId => $result) { //    //    //  id  ($threadId) $num--; } } if ($failed) { //   . //     //         //      foreach ($failed as $threadId) { $left++; } } } while ($num > 0); //    .    . $pool->cleanup(); 


рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо



рдореИрдВрдиреЗ Ubuntu 11.04 рдХреЗ рд╕рд╛рде рджреЛ рдорд╢реАрдиреЛрдВ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПред
рдкрд╣рд▓рд╛ - рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i3 540 3.07 Ghz
рджреВрд╕рд░рд╛ рд╣реИ Intel Core i7 2600K 3.40 Ghz (ubuntu VMware рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ)

рдореИрдВ рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рджреЗрддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЖрдк рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд╕рдХреЗрдВред
рдлрд┐рд░, рдпреЗ jps рдореЗрдВ 10 рдкрд░реАрдХреНрд╖рдг repetitions (рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХрд╛рдо - рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛) рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред

рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдереНрд░реЗрдбреНрд╕ рдирд┐рдореНрди рдХрдЪрд░рд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реИрдВ:
 for ($i = 0; $i < 1000; $i++) { $r = mt_rand(0, PHP_INT_MAX) * mt_rand(0, PHP_INT_MAX); } 

рдкрд╣рд▓рд╛ рдкрд░рд┐рдгрд╛рдо рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди (рдХрд╛рдВрдЯреЗ рдХреЗ рдмрд┐рдирд╛) рдХреЗ рд▓рд┐рдП рд╣реИред
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ 18 рдФрд░ 20 рдереНрд░реЗрдбреНрд╕ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 12 рдкреНрд░рджрд░реНрд╢рди рдбреНрд░реЙрдк рд╢реБрд░реВ рд╣реЛ рдЧрдП рдереЗред
рдзрд╛рдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛рдкрд╣рд▓рд╛ рд╡рд┐рдиреНрдпрд╛рд╕рджреВрд╕рд░рд╛
0553763
1330669
25801254
410152188
810402618
1010272719
129702739
169582904
18-2830
20-2730


рдпрд╣реА рд╣реИ, рдкреНрд░рджрд░реНрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ 2-4 рдпрд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ!

рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ / speed_test.php рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдзрд╛рдЧреЗ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред



рдЦреИрд░, рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ, рд╢рд╛рдпрдж рдХрд┐рд╕реА рдиреЗ рдКрдкрд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛:
github.com/Anizoptera/AzaThread

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

рдпреБрдкреАрдбреА:
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЕрдкрдбреЗрдЯ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ CThread рд╕реЗ AzaThread рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рд╡реЗ "рд╕реА" рдХреЗ рд╕рд╛рде рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╛рд░рд╛рдЬ рдереЗред рдЗрд╕рд▓рд┐рдП рдЕрдм рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ AzaThread рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ PSR-0 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ :)
рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреЛ рдереЛрдбрд╝рд╛ рдареАрдХ рдХрд┐рдпрд╛ - рдХреЛрдб, рдирд╛рдо рдФрд░ рдЬреАрдердм рдХреЗ рд▓рд┐рдВрдХред

UPD2:
AzaThread рдореЗрдВ рдЕрдм рдПрдХ рд╕рдВрдЧреАрддрдХрд╛рд░ рдкреИрдХреЗрдЬ рд╣реИ ред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдиреАрдЬреЛрдкреНрдЯреЗрд░рд╛ рд╕реАрдПрдордПрдл рд╕реЗ рдЕрдиреНрдп рдЦреБрд▓реЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рдЪрд▓реА рдЧрдИ рд╣реИред рдФрд░ рд╣рдо рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ AzaGroup.ru рдкрд░ рдирдП рдШрдЯрдХреЛрдВ рдФрд░ рдЦреБрд▓реЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ ред

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


All Articles