рднрд╛рдЧ 1: рдкрд░рд┐рдЪрдпрднрд╛рдЧ 2: рдЧреБрдгрд╛ рдХрд░рдирд╛рднрд╛рдЧ 3: рдкреНрд░рддрд┐рдкрд╛рджрди (рдЕрдиреБрд╡рд╛рдж рдХреЗ рджреМрд░рд╛рди рдиреЛрдЯ - рдкреНрд░рддрд┐)
рднрд╛рдЧ 4: рдХрдпрд╛рдордд рдХреНрд▓рд╛рд╕рд┐рдХ - рдПрдХреАрдХрд░рдг (рдЕрдиреБрд╡рд╛рдж рдХреЗ рджреМрд░рд╛рди рдкреНрд░рддрд┐ - рдиреЛрдЯ)
Doom III рдХреЗ рд▓рд┐рдП рдЗрдВрдЬрди 2000 рдФрд░ 2004 рдХреЗ рдмреАрдЪ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЙрд╕ рд╕рдордп рдЬрдм рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреАрд╕реА рдПрдХрд▓-рдкреНрд░реЛрд╕реЗрд╕рд░ рдереЗред рд╣рд╛рд▓рд╛рдВрдХрд┐ idTech4 рдЗрдВрдЬрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ SMP рдХреЗ рд╕рдорд░реНрдерди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рд╕рдордп рдкрд░ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╕рдкреЛрд░реНрдЯ (
рдЬреЙрди рдХрд╛рд░реНрдореИрдХ рдХреЗ рд╕рд╛рде рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рджреЗрдЦреЗрдВ ) рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ред
рддрдм рд╕реЗ, рдмрд╣реБрдд рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИ "
рдорд▓реНрдЯреА-рдХреЛрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ ":
рд╡рд░реНрд╖реЛрдВ рд╕реЗ, рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд▓рдЧрд╛рддрд╛рд░ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЦреЗрд▓ рдФрд░ рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рддреНрддрд╛ рдореЗрдВ рдЗрд╕ рд╡реГрджреНрдзрд┐ рд╕реЗ рд▓рд╛рдн рд╣реБрдЖ рд╣реИред
рдирд┐рдпрдо рдмрджрд▓ рдЧрдП рд╣реИрдВред рд╕рд┐рдВрдЧрд▓-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмрд╣реБрдд рдзреАрд░реЗ-рдзреАрд░реЗ рдмрдврд╝ рд░рд╣рд╛ рд╣реИ, рдЕрдЧрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрдВрдкреНрдпреВрдЯрд░ рдФрд░ рдХрдВрд╕реЛрд▓ рдХреА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╢рдХреНрддрд┐ рдмрдврд╝рддреА рд░рд╣рддреА рд╣реИред рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреА рд╡реГрджреНрдзрд┐ рдЕрдм рдорд▓реНрдЯреА-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ рд╣реИред
рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд╛рд╡рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрд╕ рдкрд╛рд╡рд░ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рд▓рдХреНрд╖реНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдФрд░ рдбреВрдо III рдмреАрдПрдлрдЬреА рдорд▓реНрдЯреА-рдХреЛрд░ рд╣реИрдВ:
- Xbox 360 рдореЗрдВ рдПрдХ рдХреНрд╕реАрдирди рддреНрд░рд┐-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИред рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рдПрдХ рд╕рд╛рде рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ 6 рддрд╛рд░реНрдХрд┐рдХ рдХреЛрд░ рд╣реИред
- PS3 рдореЗрдВ рдПрдХ рдореБрдЦреНрдп рдЗрдХрд╛рдИ (PPE) рд╣реИ рдЬреЛ рдкрд╛рд╡рд░рдкреАрд╕реА рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рдЖрда рд╕рд╣рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдХреЛрд░ (SPEs) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
- рдПрдХ рдкреАрд╕реА рдореЗрдВ рдЕрдХреНрд╕рд░ рдПрдХ рдХреНрд╡рд╛рдб-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рдЗрдкрд░-рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдЗрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЛ 8 рд▓реЙрдЬрд┐рдХрд▓ рдХреЛрд░ рдорд┐рд▓рддреЗ рд╣реИрдВред
рдирддреАрдЬрддрди, idTech4 рдХреЛ рди рдХреЗрд╡рд▓ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде, рдмрд▓реНрдХрд┐ idTech5 рдХреЗ рдЬреЙрдм рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рднреА рдкреНрд░рдмрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬреЛ рдорд▓реНрдЯреА-рдХреЛрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдиреЛрдЯ: рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, Xbox One рдФрд░ PS4 рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдЧрдИ рдереА: рджреЛрдиреЛрдВ рдореЗрдВ рдЖрда рдХреЛрд░ рд╣реЛрдВрдЧреЗред рдХрд┐рд╕реА рднреА рдЧреЗрдо рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рд░рдг рд╣реИред
рдХрдпрд╛рдордд 3 BFG рдереНрд░реЗрдб рдореЙрдбрд▓

рдПрдХ рдкреАрд╕реА рдкрд░, рдЦреЗрд▓ рддреАрди рдзрд╛рдЧреЛрдВ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ:
- рдмреИрдХрдПрдВрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдо (GPU рдХрдорд╛рдВрдб рднреЗрдЬрдирд╛)
- рдЧреЗрдо рд▓реЙрдЬрд┐рдХ рдФрд░ рдлреНрд░рдВрдЯрдПрдВрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХрд╛ рдкреНрд░рд╡рд╛рд╣
- рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐ рдЬреЙрдпрд╕реНрдЯрд┐рдХ (250 рд╣рд░реНрдЯреНрдЬ) рд╕реЗ рдбреЗрдЯрд╛ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, idTech4 рджреЛ рдФрд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдмрдирд╛рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рддреАрди рдореБрдЦреНрдп рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрдм рднреА рд╕рдВрднрд╡ рд╣реЛ рд╡реЗ рдЕрдиреБрд╕реВрдЪрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░
Id Software рдиреЗ
Beyond Programming Shaders рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ 2009 рдХреЗ рдорд▓реНрдЯреА-рдХреЛрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЕрдирд╛рд╡рд░рдг рдХрд┐рдпрд╛ред рджреЛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣рд╛рдБ:
- рдЕрд▓рдЧ-рдЕрд▓рдЧ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг ("рд╢реНрд░рдорд┐рдХреЛрдВ" рджреНрд╡рд╛рд░рд╛ "рдиреМрдХрд░реА")
- рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдбреЗрд▓рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ: рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд╣реА рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ
рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдШрдЯрдХ
рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ 3 рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ:
- рдХрд╛рд░реНрдп (рдиреМрдХрд░рд┐рдпрд╛рдВ)
- рд╣реИрдВрдбрд▓рд░ (рд╢реНрд░рдорд┐рдХ)
- рд╕рд┐рдВрдХ (рддреБрд▓реНрдпрдХрд╛рд▓рди)
рдХрд╛рд░реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдк рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░реЗрдВрдЧреЗ:
struct job_t { void (* function )(void *);
рдиреЛрдЯ: рдХреЛрдб рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, "рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреЛ рдХрдо рд╕реЗ рдХрдо
1000 рдЪрдХреНрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рджреВрд╕рд░реА рдУрд░, рдХрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЛрдб рд╕рдВрддреБрд▓рди рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреЛ
рдХреБрдЫ 100,000 рдЪрдХреНрд░реЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рд╣реИрдВрдбрд▓рд░ рдПрдХ рдзрд╛рдЧрд╛ рд╣реИ рдЬреЛ рд╕рд┐рдЧреНрдирд▓ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╕рдордп рдирд┐рд╖реНрдХреНрд░рд┐рдп рд░рд╣реЗрдЧрд╛ред рдЬрдм рдпрд╣ рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдПрдХ рдХрд╛рд░реНрдп рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рд╣реИрдВрдбрд▓рд░ рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪреА рд╕реЗ рдиреМрдХрд░реА рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред
рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рддреАрди рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рд╕рд┐рдЧреНрдирд▓, рдореНрдпреВрдЯреЗрдХреНрд╕ рдФрд░ рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рдиред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрдВрдЬрди рдХреЛ рд╕реАрдкреАрдпреВ рдХрд╛ рдзреНрдпрд╛рди рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдХреЛ рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рдиреАрдЪреЗ рд╡рд┐рд╕реНрддрд╛рд░
рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░

рдЙрдкрддрдВрддреНрд░ рдХрд╛ рдорд╕реНрддрд┐рд╖реНрдХ ParalleleJobManager рд╣реИред рд╡рд╣ рдереНрд░реЗрдб рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЬрдЧрд╛рдиреЗ рдФрд░ рдЙрди рдХрддрд╛рд░реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдЬрд┐рдирдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░: рдиреМрдХрд░реА рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдХрдИ рдЦрдВрдбреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрдВрдЬрди рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдХрддрд╛рд░реЛрдВ рдХреЛ idParallelJobList рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
Doom III BFG рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди рдЦрдВрдб рд╣реИрдВ:
- рд░реЗрдВрдбрд░ рдлреНрд░рдВрдЯреЗрдВрдб-рдП
- рд░реЗрдВрдбрд░ рдмреИрдХрдПрдВрдб-рдП
- рдЙрдкрдпреЛрдЧрд┐рддрд╛рдПрдБ
рдПрдХ рдкреАрд╕реА рдкрд░, рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рджреЛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж XBox360 рдФрд░ PS3 рдкрд░ рдЕрдзрд┐рдХ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
2009 рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рдЕрдиреБрд╕рд╛рд░, idTech5 рдореЗрдВ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ:
- рджреЛрд╖ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛
- рдПрдиреАрдореЗрд╢рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
- рдмрд╛рдзрд╛ рд╕реЗ рдмрдЪрд╛рд╡
- рдмрдирд╛рд╡рдЯ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
- рдХрдг рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
- рдКрддрдХ рд╕рд┐рдореБрд▓реЗрд╢рди
- рдкрд╛рдиреА рдХреА рд╕рддрд╣ рд╕рд┐рдореБрд▓реЗрд╢рди
- рд╡рд┐рд╕реНрддреГрдд рдореЙрдбрд▓ рдкреАрдврд╝реА
рдиреЛрдЯ: рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рдПрдХ-рдлреНрд░реЗрдо рджреЗрд░реА рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХрд╛ рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдбреВрдо III рдмреАрдПрдлрдЬреА рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдХрд╛рд░реНрдп рдХрд╛ рд╡рд┐рддрд░рдг

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

- рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдЬреЛрдбрд╝рдирд╛ : рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ
- рдбрд┐рд╕реНрдкреИрдЪ : рдореНрдпреВрдЯреЗрдХреНрд╕ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди, рдкреНрд░рддреНрдпреЗрдХ рд╣реИрдВрдбрд▓рд░ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рдЬреЙрдмрд▓рд┐рд╕реНрдЯ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЬреЙрдмрд▓рд┐рд╕реНрдЯ рдХреА рднрд░рдкрд╛рдИ рдХрд░рддрд╛ рд╣реИред
- рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рдЧреНрдирд▓ (OS рдбреЗрд▓рд┐рдЧреЗрд╢рди) :
рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рд╣реИрдВрдбрд▓рд░ рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдореЗрдВ, рдПрдХ рд░рд┐рдВрдЧ рдмрдлрд░ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдХрд╛рд░реНрдп рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд╕реНрдЯреИрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрдерд╛рдиреАрдп рдвреЗрд░: рддрдВрддреНрд░ рдХреЛ рд░реЛрдХрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЙрдмрд▓рд┐рд╕реНрдЯ рдХреЗ рдкрддреЗ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдереНрд░реЗрдб рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдереНрд░реЗрдб рдЬреЙрдмрд▓рд┐рд╕реНрдЯ рдХреЛ "рдмреНрд▓реЙрдХ" рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ RUN_STALLED рдореЛрдб рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╕реНрдерд╛рдиреАрдп рдЬреЙрдмрд▓рд┐рд╕реНрдЯ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪреА рдореЗрдВ рд╕реНрдЯреИрдХ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдХреЗ рдЗрд╕ рд░реЛрдХ рдХреЛ рд░рджреНрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд┐рд╕реА рднреА рдЖрдкрд╕реА рддрдВрддреНрд░ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: рдХреЗрд╡рд▓ рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рдиред
рдЕрдВрддрд╣реАрди рдкрд╛рд╢ int idJobThread::Run() { threadJobListState_t threadJobListState[MAX_JOBLISTS]; while ( !IsTerminating() ) { int currentJobList = 0;
рдиреМрдХрд░реА рдХрд╛ рд╢реБрднрд╛рд░рдВрдн int idParallelJobList::RunJobs( unsigned int threadNum, threadJobListState_t & state, bool singleJob ) {
рдЖрдИрдбреА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕рд┐рдВрдХ рдЙрдкрдХрд░рдг
Id рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:1. рдореЙрдирд┐рдЯрд░реНрд╕ (idSysSignal):рдорддрд┐рд╣реАрдирддрд╛
| рдЖрдкрд░реЗрд╢рди
| рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
| рдЯрд┐рдкреНрдкрдгреА
|
idSysSignal
|
| рдЗрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ
|
|
| рдмрдврд╝рд╛рдПрдВ
| SetEvent
| рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдШрдЯрдирд╛ рдХреЛ рдПрдХ рд╕рдВрдХреЗрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
|
| рд╕реНрдкрд╖реНрдЯ
| ResetEvent
| рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдШрдЯрдирд╛ рдХреЛ рдПрдХ рдЧреИрд░-рд╕рд┐рдЧреНрдирд▓ рд╕реНрдерд┐рддрд┐ рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
|
| рдкреНрд░рддреАрдХреНрд╖рд╛
| WaitForSingleObject
| рдкреНрд░рддреАрдХреНрд╖рд╛ рддрдм рддрдХ рд╣реЛрддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рдЧреНрдирд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рди рд╣реЛ рдпрд╛ рдЬрдм рддрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рдорд╛рдкреНрдд рди рд╣реЛ рдЬрд╛рдПред
|
рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реИрдВрдбрд▓рд░ idSysSignal.Wait () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╢реЗрдбреНрдпреВрд▓рд░ рд╕реЗ рдЦреБрдж рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдиреМрдХрд░рд┐рдпрд╛рдВ рдЧрд╛рдпрдм рд╣реИрдВ
2. рдореНрдпреВрдЯреЗрдХреНрд╕ (idSysMutex):рдорддрд┐рд╣реАрдирддрд╛
| рдЖрдкрд░реЗрд╢рди
| рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
| рдЯрд┐рдкреНрдкрдгреА
|
idSysMutex
|
| рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб рд╡рд╕реНрддреБрдУрдВ
|
|
| рддрд╛рд▓рд╛
| EnterCriticalSection
| рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рддрдм рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ рдЬрдм рдХреЙрд▓рд┐рдВрдЧ рдереНрд░реЗрдб рдХреЛ рдЧреБрдг рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
|
| рдЕрдирд▓реЙрдХ
| LeaveCriticalSection
| рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
|
|
|
| |
3. рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди (idSysInterlockedInteger):рдорддрд┐рд╣реАрдирддрд╛
| рдЖрдкрд░реЗрд╢рди
| рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
| рдЯрд┐рдкреНрдкрдгреА
|
idSysInterlockedInteger
|
| рдЗрдВрдЯрд░рд▓реЙрдХ рдХрд┐рдП рдЧрдП рдЪрд░
|
|
| рд╡реЗрддрди рд╡реГрджреНрдзрд┐
| InterlockedIncrementAcquire
| рдкрд░рдорд╛рдгреБ рдСрдкрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдП рдЧрдП 32-рдмрд┐рдЯ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рд╡реГрджреНрдзрд┐ред рдСрдкрд░реЗрд╢рди рдореЗрдВ "рдЕрдзрд┐рдЧреНрд░рд╣рд┐рдд" рд╢рдмреНрджрд╛рд░реНрде рд╣реИред
|
| рдШрдЯрддреА
| InterlockedDecrementRelease
| рдкрд░рдорд╛рдгреБ рдСрдкрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдП рдЧрдП 32-рдмрд┐рдЯ рдЪрд░ рдХрд╛ рдорд╛рди рдШрдЯрд╛рдПрдБред рдСрдкрд░реЗрд╢рди рдореЗрдВ "рд░рд┐рд▓реАрдЬрд╝" рдХрд╛ рд╢рдмреНрджрд╛рд░реНрде рд╣реИред
|