Php рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рдЬреНрдпрд╛рджрд╛рддрд░ рд╡реЗ рдХрд╛рдВрдЯреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд░реНрд▓, рдкреНрд░реЛрдХ_рдкреЗрди рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡рд┐рд╖рдп рдкрд░ рднрд┐рдиреНрдирддрд╛рдПрдВ рднреА рд╣реЛрддреА рд╣реИрдВред
рдПрдХ рдХрд╛рд░рдг рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдорд┐рд▓реЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдореБрдЭреЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ рдФрд░ рдореБрдЭреЗ рдЕрдкрдирд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдЦрдирд╛ рдерд╛ред
рдореЗрд░реЗ рдкрд╛рд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реЗрдЯ рдерд╛:
- рдХрд╛рдВрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ;
- рдЖрд╡рд╢реНрдпрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдореЛрдб;
- рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ;
- рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХрд╛ рдкреВрд░реНрдг рдЖрджрд╛рди-рдкреНрд░рджрд╛рдиред рдпрд╛рдиреА рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ;
- рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмреАрдЪ рдХреА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ - "рдзрд╛рдЧрд╛" рдФрд░ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛;
- рдкреБрди: рдЙрдкрдпреЛрдЧ, рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдереНрд░реЗрдбреНрд╕ рдХреЗ рдкреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ;
- рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛;
- рдХрд╛рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЖрдЙрдЯ, рдПрдХ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛, рдЖрд░рдВрднреАрдХрд░рдг;
- рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди;
рдкрд░рд┐рдгрд╛рдо
AzaThread рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдкреБрд░рд╛рдирд╛ рдирд╛рдо CThread) рд╣реИред
рдЕрдзреАрд░ рдХреЗ рд▓рд┐рдП, рддреБрд░рдВрдд рд╕реНрд░реЛрдд рд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ:
github.com/Anizoptera/AzaThreadрд╡рд┐рд╡рд░рдг
AzaThread рдереНрд░реЗрдб рдХреНрд▓рд╛рд╕реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЖрдк рдПрдХ рдереНрд░реЗрдб рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдереНрд░реЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдмрд╛рд░ рдкрд╛рд╕ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ 16 рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдПрдХ рдкреВрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЛ рдЧрд░реНрдо рдХреЗрдХ рдХреА рддрд░рд╣ рд░реЗрдХрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЛрдб рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдереНрд░реЗрдбреНрд╕ рдХреА рдЗрд╖реНрдЯрддрдо рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрди рд╕рдХреЗрдВред
рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:
libevent ,
posix рдФрд░
pcntl ред
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдмрд╡реЗрдВрдЯ рдФрд░ рдпреБрдЧреНрдорд┐рдд рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред 5 рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╡рд┐рдХрд▓реНрдк (рддрд░реНрдХ, рдкрд░рд┐рдгрд╛рдо рдФрд░ рдИрд╡реЗрдВрдЯ рдбреЗрдЯрд╛) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ!
рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд▓реНрдк рддреБрд░рдВрдд рд▓рд╛рддрд╛ рд╣реВрдВред рдпрд╣ рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i7 2600K 3.40 Ghz (VMware рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ Ubuntu 11.04) рдкрд░ рдЖрда рдзрд╛рдЧреЗ рдХреЗ рдПрдХ рдкреВрд▓ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬреЗрдкреАрдПрд╕ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ 10 рджреЛрд╣рд░рд╛рд╡ рдХреЗ рд▓рд┐рдП рдФрд╕рдд рдкрд░рд┐рдгрд╛рдо рджрд┐рдП рдЧрдП рд╣реИрдВ (рдиреМрдХрд░рд┐рдпреЛрдВ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб - рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╕ рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддреА рд╣реИ)ред
рд╕рдВрдЦреНрдпрд╛ | JPS | рд╡рд┐рд╡рд░рдг |
---|
1 | 6501 | рд╕рдорд╛рди рд╕реЙрдХреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрд░рд┐рдпрд▓ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рдХрд▓реНрдкред |
2 | 6625 | рдПрдХ рд╣реА рдмрд╛рдд рд╣реИ, рд▓реЗрдХрд┐рди igbinary рдХреНрд░рдорд╛рдВрдХрди (рд╕рдмрд╕реЗ рдЙрддреНрдкрд╛рджрдХ рд╡рд┐рдХрд▓реНрдк) рдХреЗ рд╕рд╛рдеред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ igbinary рд╕реНрдерд╛рдкрд┐рдд рд╣реИред |
3 | 6194 | рд╕рд┐рд╕реНрдЯрдо рд╡реА рдореЗрдореЛрд░реА рдХрддрд╛рд░ (sysvmsg) |
4 | 6008 | рд╕рд┐рд╕реНрдЯрдо V рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА (sysvshm) |
5 | 6052 | рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдореЗрдореЛрд░реА (shmop) |
рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ
рд╕реЙрдХреЗрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛,
рдзрд╛рд░рд╛ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред
рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрдирддреА рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЙрдирдореЗрдВ рд╕реЗ (рд╕рд┐рдЧрд┐рдиреНрдЪ рдФрд░ рд╕рд┐рдЧрд┐рдирдлреЛ рдХреЛ рдЫреЛрдбрд╝рдХрд░) рд╕рднреА рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрдХреЗрдд рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╛рд╕ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рдХрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
sigWinch ред
рдореВрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рднреА рд╕рд┐рдЧреНрдирд▓ рднреА рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЭреВрдареА рдХреЗ рд▓рд┐рдП
ListenMasterSignals рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдХреЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ SIGCHLD рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЬрд╛рдПрдЧреАред рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ
m <рд╕рд┐рдЧреНрдирд▓ рдирд╛рдо> рдирд╛рдордХ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдмрдирд╛рдХрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
mSigTerm ред
рдпрджрд┐ рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рдорд░ рдЬрд╛рддреА рд╣реИ, рддреЛ рдирдпрд╛ рдХрд╛рд░реНрдп рд╢реБрд░реВ рдХрд░рдиреЗ рдкрд░ рдХрдХреНрд╖рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдВрдЯрд╛ рдЬрд╛рдПрдЧреАред рдпрд╣ рдХрд┐рд╕реА рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рд╣реИред рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдордп-рд╕рдордп рдкрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИред рдпрджрд┐ рд╡рд╣ рдЕрдЪрд╛рдирдХ рдорд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрдЪреНрдЪрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдПрдХ рдереНрд░реЗрдб рдпрд╛ рдереНрд░реЗрдб рдкреВрд▓ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд╕рдВрд╕рд╛рдзрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╛рдл рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрдм рд╡рд┐рдзреНрд╡рдВрд╕рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдЙрдиреНрд╣реЗрдВ
рд╕рдлрд╛рдИ рдкрджреНрдзрддрд┐ рдХреЛ рдмреБрд▓рд╛рдХрд░ рдЬрдмрд░рджрд╕реНрддреА рд╕рд╛рдл рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдереНрд░реЗрдб / рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдорд╛рдирдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде, рд╕реНрдЯреНрд░реАрдо рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреБрд░рдВрдд рдЬрдм рдХреНрд▓рд╛рд╕ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЖрдк
рдкреНрд░реАрдлрд╝реЙрд░реНрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрд╛рдВрдЯрд╛ рддрдм рд╣реЛрдЧрд╛ рдЬрдм рдХрд╛рд░реНрдп рд╢реБрд░реВ рд╣реЛрдЧрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрд╛рдлреА рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВред рдХрд╛рдВрдЯрд╛ (рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░
pName рдкреИрд░рд╛рдореАрдЯрд░) рдХреЗ рдмрд╛рдж рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛, рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп (
рдЯрд╛рдЗрдордЖрдЙрдЯрд╡рд░реНрдХ ) рдХреЗ рд▓рд┐рдП рд╕рдордп-рд╕реАрдорд╛, рдЕрдзрд┐рдХрддрдо рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рдордп-рд╕рдордп рдкрд░ рдХрд╛рд░реНрдп рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (
timeoutMaxWait ), рдкреНрд░реА-рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЯрд╛рдЗрдо (
рдЯрд╛рдЗрдордЖрдЙрдЯрдЗрдирд┐рдЯ ) рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЖрдЙрдЯ, рд░реАрдбрд┐рдВрдЧ рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмрдлрд░ рдЖрдХрд╛рд░ (
рдкрд╛рдЗрдк рд░реАрдбреНрд╕ )ред ,
рдкрд╛рдЗрдкрдорд╛рд╕реНрдЯрд░рд░рд╛рдЗрдб рдХрд░реЗрдВ )ред
рдЖрдк рдереНрд░реЗрдбреНрд╕ (
рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХ ) рдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреАрдЯрд╛рд╕реНрдХрд┐рдВрдЧ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рдмрдЪреНрдЪреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд░ рдЬрд╛рдПрдЧреА рдФрд░ рдЕрдЧрд▓реА рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдХрд╛рдВрдЯрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ред
рдХреЛрдб рдХреЛ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг
example.php рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦреЗ рдФрд░ рдЪрд▓рд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдбреАрдмрдЧрд┐рдВрдЧ рдореЛрдб рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХрд╣рд╛рдВ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг
рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдЕрдзрд┐рдХрддрдо рд╕рд╛рджрдЧреА рд╣реИред рдпрджрд┐ рдЖрдк рдХреБрдЫ рдЕрд▓рдЧ "рдереНрд░реЗрдб" рдореЗрдВ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрди рдХреЛрдб рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
class ExampleThread extends Thread { protected function process() {
рдпрджрд┐ рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╣реИ, рддреЛ рдХрд╛рд░реНрдп рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдЕрднреА рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдореЛрдб рдореЗрдВред
рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде, рдХреЛрдб рдмрд╕ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рджрд┐рдЦреЗрдЧрд╛:
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); } } }
рдФрд░ рдЕрдВрдд рдореЗрдВ, рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд╕рд╛рде рдЖрда рдзрд╛рдЧреЗ рдХрд╛ рдПрдХ рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░:
$threads = 8
рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо
рдореИрдВрдиреЗ 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 рдкреНрд░рджрд░реНрд╢рди рдбреНрд░реЙрдк рд╢реБрд░реВ рд╣реЛ рдЧрдП рдереЗред
рдзрд╛рдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ | рдкрд╣рд▓рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ | рджреВрд╕рд░рд╛ |
---|
0 | 553 | 763 |
1 | 330 | 669 |
2 | 580 | 1254 |
4 | 1015 | 2188 |
8 | 1040 | 2618 |
10 | 1027 | 2719 |
12 | 970 | 2739 |
16 | 958 | 2904 |
18 | - | 2830 |
20 | - | 2730 |

рдпрд╣реА рд╣реИ, рдкреНрд░рджрд░реНрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ 2-4 рдпрд╛ рдЕрдзрд┐рдХ рдмрд╛рд░ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ!
рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рдлрд╝рд╛рдЗрд▓
рдЙрджрд╛рд╣рд░рдгреЛрдВ / speed_test.php рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдзрд╛рдЧреЗ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред
рдЦреИрд░, рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ, рд╢рд╛рдпрдж рдХрд┐рд╕реА рдиреЗ рдКрдкрд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛:
github.com/Anizoptera/AzaThreadрдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреА рдЕрдЧрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛред рдХрд┐рд╕реА рднреА рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдпрд╛ рдкрддрд╛ рдХрд┐рдП рдЧрдП рдмрдЧ рдХреЛ рдЧреАрдердм рдкрд░ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореИрдВ рдЬрд▓реНрджреА рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдареАрдХ рдХрд░реВрдВрдЧрд╛ рдФрд░ рд╕реБрдзрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рдпреБрдкреАрдбреА:рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЕрдкрдбреЗрдЯ рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ CThread рд╕реЗ AzaThread рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рд╡реЗ "рд╕реА" рдХреЗ рд╕рд╛рде рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╛рд░рд╛рдЬ рдереЗред рдЗрд╕рд▓рд┐рдП рдЕрдм рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ AzaThread рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдирд╛рдорд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ PSR-0 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ :)
рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореИрдВрдиреЗ рд▓реЗрдЦ рдХреЛ рдереЛрдбрд╝рд╛ рдареАрдХ рдХрд┐рдпрд╛ - рдХреЛрдб, рдирд╛рдо рдФрд░ рдЬреАрдердм рдХреЗ рд▓рд┐рдВрдХред
UPD2:AzaThread рдореЗрдВ рдЕрдм
рдПрдХ рд╕рдВрдЧреАрддрдХрд╛рд░ рдкреИрдХреЗрдЬ рд╣реИ ред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдиреАрдЬреЛрдкреНрдЯреЗрд░рд╛ рд╕реАрдПрдордПрдл рд╕реЗ
рдЕрдиреНрдп рдЦреБрд▓реЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рдЪрд▓реА рдЧрдИ рд╣реИред рдФрд░ рд╣рдо
рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ AzaGroup.ru рдкрд░ рдирдП рдШрдЯрдХреЛрдВ рдФрд░ рдЦреБрд▓реЗ рдШрдЯрдХреЛрдВ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рд▓рд┐рдЦрддреЗ рд╣реИрдВ ред