рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ C ++ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрднрд┐рдиреЗрддрд╛ рдпрд╛ CSP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ SObjectizer рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ


SObjectizer рдФрд░ рдЗрд╕рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж


рд╕реЛрдмрд┐рдЬрд╛рдЗрдЬрд╝рд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕реА C ++ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ рдЬреЛ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред SObjectizer рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдПрдХреНрдЯрд░, рдкрдмреНрд▓рд┐рд╢-рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдФрд░ рдХрдореНрдпреБрдирд┐рдХреЗрдЯрд┐рдВрдЧ рд╕реЗрдХреНрд╢рдирд▓ рдкреНрд░реЙрд╕реЗрд╕ (CSP) рдореЙрдбрд▓ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ OpenSource рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ BSD-3-CLAUSE рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


SObjectizer рдХрд╛ рдПрдХ рд▓рдВрдмрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд░рд╣рд╛ рд╣реИред SObjectizer рд╕реНрд╡рдпрдВ 2002 рдореЗрдВ SObjectizer-4 рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрджрд╛ рд╣реБрдЖ рдерд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдкрд┐рдЫрд▓реЗ SCADA рдСрдмреНрдЬреЗрдХреНрдЯрд┐рдЬрд╝рд░ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛ рдЬреЛ 1995 рдФрд░ 2000 рдХреЗ рдмреАрдЪ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред SObjectizer-4 2006 рдореЗрдВ рдЦреБрд▓рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЗрд╕рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд░реЛрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред SObjectizer-5 рдирд╛рдо рдХреЗ рд╕рд╛рде SObjectizer рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг 2010 рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ 2013 рдореЗрдВ рдЗрд╕реЗ рдУрдкрди-рд╕реЛрд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред SObjectizer-5 рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдЕрднреА рднреА рдЬрд╛рд░реА рд╣реИ рдФрд░ SObjectizer-5 рдиреЗ 2013 рдХреЗ рдмрд╛рдж рдХрдИ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИред


SObjectizer рдХрдореЛрдмреЗрд╢ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рд░реВрд╕реА рдЦрдВрдб рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХреНрд╕рдпреВрдПрд╕рдЖрд░ рдХреЗ рдмрд╛рд╣рд░ рд▓рдЧрднрдЧ рдЕрдЬреНрдЮрд╛рдд рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ SObjectizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ exUSSR- рджреЗрд╢реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдХрдИ рд▓реЗрдЦ, рдкреНрд░рд╕реНрддреБрддрд┐рдпрд╛рдБ, рдФрд░ SObjectizer рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░реВрд╕реА рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред


SObjectizer рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд▓рд╛


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


рдореЛрдЯреЗ рддреМрд░ рдкрд░, рдЧрдгрдирд╛ рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрдИ рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдПрдХ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рджреВрд╕рд░реЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд░рдирд╛ рдПрдХ рд╕реАрдкреАрдпреВ рдХреЛрд░ рдкрд░ рдПрдХ рдШрдВрдЯреЗ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд╛рд░ рд╕реАрдкреАрдпреВ рдХреЛрд░ рдкрд░ рд╕рд┐рд░реНрдл 15 рдорд┐рдирдЯред OpenMP, Intel TBB, HPX рдпрд╛ cpp-taskflow рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред рдФрд░ рд╡реЗ рдЙрдкрдХрд░рдг рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд╛рд░реНрдп-рдЖрдзрд╛рд░рд┐рдд рдпрд╛ рдбреЗрдЯрд╛-рдкреНрд░рд╡рд╛рд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧред


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


рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рдпрд╛ рд╕реАрдПрд╕рдкреА рдЬреИрд╕реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдорд╡рд░реНрддреА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИрдВред рд╕рдорд╡рд░реНрддреА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ InfineSQL рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдпреИрдВрдбреЗрдХреНрд╕ рд╕рдВрджреЗрд╢-рдХрддрд╛рд░ ред рдЙрди рджреЛрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЕрдВрджрд░ рдХреЗ рдХрд▓рд╛рдХрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред


рдЗрд╕рд▓рд┐рдП SObjectizer, QP / C ++ рдпрд╛ CAF рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг, рдЬреЛ рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рд╕рдорд╡рд░реНрддреА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИрдВред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ SObjectizer рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрднрд╡рддрдГ рдЖрдкрдХреЛ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЖрдк SOBjectizer рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рджрд▓рд╛рд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рддреНрдпрд╛рдЧ


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


SObjectizer рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреНрдпрд╛ рджреЗ рд╕рдХрддрд╛ рд╣реИ?


рд╕рд╛рдЭрд╛-рдХреБрдЫ рднреА рдирд╣реАрдВ рдФрд░ рдЖрдЧ-рд╡рд┐рд╕реНрдореГрдд рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рд┐рд░реНрдл рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░


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


SObjectizer рдореЗрдВ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ (рдПрдЬреЗрдВрдЯреЛрдВ) рдХреЗ рдмреАрдЪ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреЗрд╡рд▓ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рдПрдЬреЗрдВрдЯ рджреВрд╕рд░реЗ рдПрдЬреЗрдВрдЯ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдСрдкрд░реЗрд╢рди рдкреНрд░реЗрд╖рдХ (рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ) рдХреЛ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


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


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдПрдЬреЗрдВрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реНрд╡реАрдХреГрдд рдХрдиреЗрдХреНрд╢рди рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдкреВрд░реЗ рдкреАрдбреАрдпреВ рдХреЛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдЬреЗрдВрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдкреАрдбреАрдпреВ рджреВрд╕рд░реЗ рдПрдЬреЗрдВрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдирдП рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ / рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рд▓реМрдЯрддрд╛ рд╣реИред


рдкреНрд░реЗрд╖рдХ


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


SObjectizer рдореЗрдВ рдбрд┐рд╕реНрдкреИрдЪрд░ рдФрд░ рдПрдЬреЗрдВрдЯреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдкреГрдердХреНрдХрд░рдг: рдбрд┐рд╕реНрдкреИрдЪрд░ рдХрд╛рдо рдХреЗ рд╕рдВрджрд░реНрдн рдФрд░ рд╕реНрд╡рдпрдВ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░реЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ, рдПрдЬреЗрдВрдЯ рдЖрд╡реЗрджрди рддрд░реНрдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдПрдЬреЗрдВрдЯ рдХреЛ рдПрдХ рдбрд┐рд╕реНрдкреИрдЪрд░ рд╕реЗ рджреВрд╕рд░реЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрд▓ рдПрдХ рдПрдЬреЗрдВрдЯ рдиреЗ one_thread рдбрд┐рд╕реНрдкреИрдЪрд░ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛, рдЖрдЬ рд╣рдо рдЗрд╕реЗ active_obj рдбрд┐рд╕реНрдкреИрдЪрд░ рдореЗрдВ рд░рд┐рдмрдВрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрд▓ рд╣рдо рдЗрд╕реЗ рдереНрд░реЗрдб_рдкреВрд▓ рдбрд┐рд╕реНрдкреИрдЪрд░ рдореЗрдВ рд░рд┐рдмрдВрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдЬреЗрдВрдЯ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ред


SObjectizer-5.6.0 рдореЗрдВ рдЖрда рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд┐рд╕реНрдкреИрдЪрд░ рд╣реИрдВ (рдФрд░ рдПрдХ рдЕрдиреНрдп рдХреЛ so5extra рд╕рд╛рдереА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ): рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ (one_thread рдпрд╛ рдереНрд░реЗрдб_рдкреВрд▓) рд╕реЗ рдкрд░рд┐рд╖реНрдХреГрдд рд▓реЛрдЧреЛрдВ (рдЬреИрд╕реЗ adv_thol_pool рдпрд╛ prio_dedicated_threads :: one_per_prio) рддрдХ рд╢реБрд░реВ рдХрд░рдирд╛ред рдФрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдбрд┐рд╕реНрдкреИрдЪрд░ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред


рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИ


SObjectizer рдореЗрдВ рдПрдЬреЗрдВрдЯ (рдЕрднрд┐рдиреЗрддрд╛) рд░рд╛рдЬреНрдп рдорд╢реАрди рд╣реИрдВ: рдПрдХ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдЬреЗрдВрдЯ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред SObjectizer рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ (HSM) рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: рдиреЗрд╕реНрдЯреЗрдб рдЕрд╡рд╕реНрдерд╛рдПрдБ, рдПрдХ рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдЧрд╣рд░реА, рдФрд░ рдЙрдерд▓реЗ рдЗрддрд┐рд╣рд╛рд╕, on_enter / on_exit рд╣реИрдВрдбрд▓рд░, рдПрдХ рд░рд╛рдЬреНрдп рдореЗрдВ рд░рд╣рдиреЗ рдХреА рд╕рдордп рд╕реАрдорд╛ред SObjectizer рдореЗрдВ рдЕрдм рдХреЗрд╡рд▓ рдСрд░реНрдереЛрдЧреЛрдирд▓ рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╣рдордиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рджреЗрдЦреА, рдФрд░ рдХрд┐рд╕реА рдиреЗ рд╣рдореЗрдВ рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣рд╛)ред


рд╕реАрдПрд╕рдкреА рдЬреИрд╕реЗ рдЪреИрдирд▓ рд╕рд┐рд░реНрдл рдЖрдЙрдЯ рдСрдл рдмреЙрдХреНрд╕ рд╣реИрдВ


SObjectizer рдХреЗ рдПрдЬреЗрдВрдЯреЛрдВ (рдЙрд░реНрдл рдЕрднрд┐рдиреЗрддрд╛рдУрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЗрд╡рд▓ std::thread рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдФрд░ SObjectizer рдХреЗ рдорд╛рдЪрд┐рди (рдЙрд░реНрдл CSP- рдЪреИрдирд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ SObjectizer рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреБрдЫ рд╣рдж рддрдХ Go рд▓реИрдВрдЧреНрд╡реЗрдЬ рдореЗрдВ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ (рдЗрд╕рдореЗрдВ Go рдХреЗ select рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХрд╛ рдПрдирд╛рд▓реЙрдЧ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдХрдИ рдЪреИрдирд▓реЛрдВ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ)ред


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


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


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреЗрд╡рд▓ рдХреБрдЫ рднрд╛рдЧ рд╣реА рдПрд╕рдУрдмреАрдЬреЗрдирд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ


рдПрдХ рдЖрд╡реЗрджрди рдкрд░ рд╣рд░ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ SObjectizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред SObjectizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рднрд╛рдЧ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Qt рдпрд╛ wxWidgets, рдпрд╛ Boost.Asio рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдореБрдЦреНрдп рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреЗ рдРрдк рдХреЗ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдмрдореЙрдбреНрдпреВрд▓ рдореЗрдВ SObjectize рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред


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


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


рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ SObjectizer рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ


SObjectizer рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ SObjectizer (рдЬрд┐рд╕реЗ SObjectizer рдкрд░реНрдпрд╛рд╡рд░рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рд░ SObjectizer рдкрд░реНрдпрд╛рд╡рд░рдг рдРрд╕реЗ рдЕрдиреНрдп рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрдЧрд╛ред


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


рдЯрд╛рдЗрдорд░ SObjectizer рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ


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


SObjectizer рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдХреВрд▓рди рдмрд┐рдВрджреБ рдФрд░ рдЯреНрдпреВрдирд┐рдВрдЧ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ


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


рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрджреЗрд╢ рд▓рд┐рдлрд╛рдлреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ event_queue_hook рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕реА рддрд░рд╣ред


рдЬрд╣рд╛рдБ SObjectizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?


рдпрд╣ рдХрд╣рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╡рд╕реНрддреБ рдХреЗ рдХрд╛рд░рдгреЛрдВ рд╕реЗ SObjectizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рдРрд╕реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдХреЗ рдЪрд░реНрдЪрд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╣рдо рдЕрддреАрдд рдореЗрдВ (рдФрд░ рди рдХреЗрд╡рд▓ рдЕрддреАрдд рдореЗрдВ) SObjectizer рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдВрдЧреЗред


рдЬрд╣рд╛рдБ SObjectizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?



рдЬреИрд╕рд╛ рдХрд┐ рдЕрднрд┐рдиреЗрддрд╛ рдХреЗ рдКрдкрд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ- рдФрд░ рд╕реАрдПрд╕рдкреА-рдореЙрдбрд▓ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рдЕрдиреНрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдЖрдкрдХреЛ рдХрдИ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдпрд╛ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рдиреЗ рд╣реИрдВ рддреЛ OpenMP, Intel TBB, cpp-taskflow, HPX рдпрд╛ MPI рдЬреИрд╕реЗ рдЯреВрд▓ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдВрдЧреЗред


рдХрдард┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рдгрд╛рд▓реА


рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ SObjectizer рдХреА рдЬрдбрд╝реЗрдВ SCADA- рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╣реИрдВ, SObjectizer (aka SObjectizer-5) рдХрд╛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрдард┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ SObjectizer рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реИ: рд╕рдВрджреЗрд╢ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐, SObjectizer рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдЪрд╛рд░рд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ), рдбрд┐рд╕реНрдкреИрдЪрд░ рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдЬреЗрдВрдЯ рдХреЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреА рд╕рдордп-рд╕реАрдорд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╕рдордп-рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред


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


рд╡рд┐рд╡рд╢ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо


SObjectizer C ++ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ: std::thread рдХрд╛ рдЙрдкрдпреЛрдЧ рдереНрд░реЗрдб рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, std::atomic , std::mutex , std::condition_variable рдбреЗрдЯрд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, RTTI рдФрд░ рдбрд╛рдпрдиреЗрдорд┐рдХ_рдХрд╛рд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ SObjectizer рдХреЛ рдЗрдиреНрд╕реБрд▓реЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) , std::type_index рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), C ++ рдЕрдкрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ SObjectizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдБ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╡рд╢ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЬрд╣рд╛рдВ C ++ рдФрд░ C ++ stdlib рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЕрддреАрдд рдореЗрдВ SObjectizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?


рдЕрдм рд╣рдо SObjectizer рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ (рдЕрддреАрдд рдореЗрдВ рд╣реА рдирд╣реАрдВ)ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред


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


рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ SObjectizer рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рд╣рдореЗрдВ рд╡рд╣ рдЕрдиреБрдорддрд┐ рдмрд╣реБрдд рдХрдо рд╣реА рдорд┐рд▓реА рд╣реИ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ SObjectizer рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдХрднреА-рдХрднреА рд╣рдо рдХрд╛рд░рдгреЛрдВ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ, рдХрднреА-рдХрднреА рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ)ред


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


  • рдПрд╕рдПрдордПрд╕ / рдпреВрдПрд╕рдПрд╕рдбреА рдПрдЧреНрд░реАрдЧреЗрд╢рди рдЧреЗрдЯрд╡реЗ рдЬреЛ рдкреНрд░рддрд┐ рдорд╛рд╣ 500M рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ;
  • рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рд░реВрд╕реА рдмреИрдВрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдПрдЯреАрдПрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдирд▓рд╛рдЗрди рднреБрдЧрддрд╛рди рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛;
  • рдЖрд░реНрдерд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд┐рдореБрд▓реЗрд╢рди рдореЙрдбрд▓рд┐рдВрдЧ (рдкреАрдПрдЪрдбреА рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ);
  • рд╡рд┐рддрд░рд┐рдд рдбрд╛рдЯрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдкреНрд░рдгрд╛рд▓реАред рдХреЗрдВрджреНрд░реАрдп рдиреЛрдб рд╕реЗ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдПрдХрддреНрд░рд┐рдд рдбреЗрдЯрд╛ред MQTT рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рд╡рд╣рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдбреЗрдЯрд╛ рд╡рд┐рддрд░рдг рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛ рдЧрдпрд╛;
  • рд░реЗрд▓рд╡реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд░реАрдХреНрд╖рдг;
  • рдерд┐рдПрдЯрд░ рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реАред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ;
  • рдПрдХ рдСрдирд▓рд╛рдЗрди рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдмрдВрдзрди рдордВрдЪ рдХреЗ рдШрдЯрдХред

SObjectizer рдХрд╛ рд╕реНрд╡рд╛рдж


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


рдЕрднрд┐рдиреЗрддрд╛ рдореЙрдбрд▓ рдХреА рд╢реИрд▓реА рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ "рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб" рдЙрджрд╛рд╣рд░рдг


рдХреЗрд╡рд▓ рдПрдХ рдПрдЬреЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдЬреЛ hello рд╕рдВрджреЗрд╢ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ:


 #include <so_5/all.hpp> // Message to be sent to an agent. struct hello { std::string greeting_; }; // Demo agent. class demo final : public so_5::agent_t { void on_hello(mhood_t<hello> cmd) { std::cout << "Greeting received: " << cmd->greeting_ << std::endl; // Now agent can finish its work. so_deregister_agent_coop_normally(); } public: // There is no need is a separate constructor. using so_5::agent_t::agent_t; // Preparation of agent to work inside SObjectizer. void so_define_agent() override { // Subscription to 'hello' message. so_subscribe_self().event(&demo::on_hello); } }; int main() { // Run SObjectizer instance. so_5::launch([](so_5::environment_t & env) { // Make and register an instance of demo agent. auto mbox = env.introduce_coop([](so_5::coop_t & coop) { auto * a = coop.make_agent<demo>(); return a->so_direct_mbox(); }); // Send hello message to registered agent. so_5::send<hello>(mbox, "Hello, World!"); }); } 

рдПрдЬреЗрдВрдЯреЛрдВ рдФрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд / рд╕рджрд╕реНрдпрддрд╛ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде "рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб" рдХрд╛ рдПрдХ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг


рдХрдИ рдПрдЬреЗрдВрдЯреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг, рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА hello рд╕рдВрджреЗрд╢ рдХреЗ рдПрдХ рд╣реА рдЙрджрд╛рд╣рд░рдг рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВ:


 #include <so_5/all.hpp> using namespace std::string_literals; // Message to be sent to an agent. struct hello { std::string greeting_; }; // Demo agent. class demo final : public so_5::agent_t { const std::string name_; void on_hello(mhood_t<hello> cmd) { std::cout << name_ << ": greeting received: " << cmd->greeting_ << std::endl; // Now agent can finish its work. so_deregister_agent_coop_normally(); } public: demo(context_t ctx, std::string name, so_5::mbox_t board) : agent_t{std::move(ctx)} , name_{std::move(name)} { // Create a subscription for hello message from board. so_subscribe(board).event(&demo::on_hello); } }; int main() { // Run SObjectizer instance. so_5::launch([](so_5::environment_t & env) { // Mbox to be used for speading hello message. auto board = env.create_mbox(); // Create several agents in separate coops. for(const auto & n : {"Alice"s, "Bob"s, "Mike"s}) env.register_agent_as_coop(env.make_agent<demo>(n, board)); // Spread hello message to all subscribers. so_5::send<hello>(board, "Hello, World!"); }); } 

рдпрджрд┐ рд╣рдо рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:


 Alice: greeting received: Hello, World! Bob: greeting received: Hello, World! Mike: greeting received: Hello, World! 

рд╕реАрдПрд╕рдкреА-рд╢реИрд▓реА рдореЗрдВ "рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб" рдЙрджрд╛рд╣рд░рдг


рдЖрдЗрдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рдПрдХреНрдЯрд░реНрд╕ рдХреЗ SObjectizer рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ, рдмрд╕ std::thread рдФрд░ CSP-like рдЪреИрдирд▓ред


рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг


рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ рдЬреЛ рдЕрдкрд╡рд╛рдж рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ:


 #include <so_5/all.hpp> // Message to be sent to a channel. struct hello { std::string greeting_; }; void demo_thread_func(so_5::mchain_t ch) { // Wait while hello received. so_5::receive(so_5::from(ch).handle_n(1), [](so_5::mhood_t<hello> cmd) { std::cout << "Greeting received: " << cmd->greeting_ << std::endl; }); } int main() { // Run SObjectizer in a separate thread. so_5::wrapped_env_t sobj; // Channel to be used. auto ch = so_5::create_mchain(sobj); std::thread demo_thread{demo_thread_func, ch}; // Send a greeting. so_5::send<hello>(ch, "Hello, World!"); // Wait for demo thread. demo_thread.join(); } 

рдЕрдзрд┐рдХ рдордЬрдмреВрдд, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг


рдпрд╣ рдЕрдкрд╡рд╛рдж рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдКрдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:


 #include <so_5/all.hpp> // Message to be sent to a channel. struct hello { std::string greeting_; }; void demo_thread_func(so_5::mchain_t ch) { // Wait while hello received. so_5::receive(so_5::from(ch).handle_n(1), [](so_5::mhood_t<hello> cmd) { std::cout << "Greeting received: " << cmd->greeting_ << std::endl; }); } int main() { // Run SObjectizer in a separate thread. so_5::wrapped_env_t sobj; // Demo thread. We need object now, but thread will be started later. std::thread demo_thread; // Auto-joiner for the demo thread. auto demo_joiner = so_5::auto_join(demo_thread); // Channel to be used. This channel will be automatically closed // in the case of an exception. so_5::mchain_master_handle_t ch_handle{ so_5::create_mchain(sobj), so_5::mchain_props::close_mode_t::retain_content }; // Now we can run demo thread. demo_thread = std::thread{demo_thread_func, *ch_handle}; // Send a greeting. so_5::send<hello>(*ch_handle, "Hello, World!"); // There is no need to wait for something explicitly. } 

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдПрдЪрдПрд╕рдПрдо рдЙрджрд╛рд╣рд░рдг: рдмреНрд▓рд┐рдВрдХрд┐рдВрдЧ_рд▓реНрдб


рдпрд╣ SObjectizer рдХреЗ рд╡рд┐рддрд░рдг рд╕реЗ рдПрдХ рдорд╛рдирдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдореБрдЦреНрдп рдПрдЬреЗрдВрдЯ рдПрдХ рдПрдЪрдПрд╕рдПрдо рд╣реИ рдЬрд┐рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд╛рдЬреНрдпрдЪрд░реНрдЪрд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рдкрд▓рдХ рдЭрдкрдХрдирд╛


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб:


 #include <iostream> #include <so_5/all.hpp> class blinking_led final : public so_5::agent_t { state_t off{ this }, blinking{ this }, blink_on{ initial_substate_of{ blinking } }, blink_off{ substate_of{ blinking } }; public : struct turn_on_off final : public so_5::signal_t {}; blinking_led( context_t ctx ) : so_5::agent_t{ ctx } { this >>= off; off.just_switch_to< turn_on_off >( blinking ); blinking.just_switch_to< turn_on_off >( off ); blink_on .on_enter( []{ std::cout << "ON" << std::endl; } ) .on_exit( []{ std::cout << "off" << std::endl; } ) .time_limit( std::chrono::milliseconds{1500}, blink_off ); blink_off .time_limit( std::chrono::milliseconds{750}, blink_on ); } }; int main() { try { so_5::launch( []( so_5::environment_t & env ) { auto m = env.introduce_coop( []( so_5::coop_t & coop ) { auto led = coop.make_agent< blinking_led >(); return led->so_direct_mbox(); } ); auto pause = []( unsigned int v ) { std::this_thread::sleep_for( std::chrono::seconds{v} ); }; std::cout << "Turn blinking on for 10s" << std::endl; so_5::send< blinking_led::turn_on_off >( m ); pause( 10 ); std::cout << "Turn blinking off for 5s" << std::endl; so_5::send< blinking_led::turn_on_off >( m ); pause( 5 ); std::cout << "Turn blinking on for 5s" << std::endl; so_5::send< blinking_led::turn_on_off >( m ); pause( 5 ); std::cout << "Stopping..." << std::endl; env.stop(); } ); } catch( const std::exception & ex ) { std::cerr << "Error: " << ex.what() << std::endl; } return 0; } 

рдЯрд╛рдЗрдорд░, рдПрдХ рдПрдЬреЗрдВрдЯ рдФрд░ active_obj рдбрд┐рд╕реНрдкреИрдЪрд░ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рднрд╛рд░ рдирд┐рдпрдВрддреНрд░рдг


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


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


 #include <so_5/all.hpp> using namespace std::chrono_literals; // Message to be sent to the consumer. struct task { int task_id_; }; // An agent for utilization of unhandled tasks. class trash_can final : public so_5::agent_t { public: // There is no need is a separate constructor. using so_5::agent_t::agent_t; // Preparation of agent to work inside SObjectizer. void so_define_agent() override { // Subscription to 'task' message. // Event-handler is specified in the form of a lambda-function. so_subscribe_self().event([](mhood_t<task> cmd) { std::cout << "unhandled task: " << cmd->task_id_ << std::endl; }); } }; // The consumer of 'task' messages. class consumer final : public so_5::agent_t { public: // We need the constructor. consumer(context_t ctx, so_5::mbox_t trash_mbox) : so_5::agent_t{ctx + // Only three 'task' messages can wait in the queue. limit_then_redirect<task>(3, // All other messages will go to that mbox. [trash_mbox]{ return trash_mbox; })} { // Define a reaction to incoming 'task' message. so_subscribe_self().event([](mhood_t<task> cmd) { std::cout << "handling task: " << cmd->task_id_ << std::endl; std::this_thread::sleep_for(75ms); }); } }; // The producer of 'test' messages. class producer final : public so_5::agent_t { const so_5::mbox_t dest_; so_5::timer_id_t task_timer_; int id_counter_{}; // Type of periodic signal to produce new 'test' message. struct generate_next final : public so_5::signal_t {}; void on_next(mhood_t<generate_next>) { // Produce a new 'task' message. so_5::send<task>(dest_, id_counter_); ++id_counter_; // Should the work be stopped? if(id_counter_ >= 10) so_deregister_agent_coop_normally(); } public: producer(context_t ctx, so_5::mbox_t dest) : so_5::agent_t{std::move(ctx)} , dest_{std::move(dest)} {} void so_define_agent() override { so_subscribe_self().event(&producer::on_next); } // This method will be automatically called by SObjectizer // when agent starts its work inside SObjectizer Environment. void so_evt_start() override { // Initiate a periodic message with no initial delay // and repetition every 25ms. task_timer_ = so_5::send_periodic<generate_next>(*this, 0ms, 25ms); } }; int main() { // Run SObjectizer instance. so_5::launch([](so_5::environment_t & env) { // Make and register coop with agents. // All agents will be bound to active_obj dispatcher and will // work on separate threads. env.introduce_coop( so_5::disp::active_obj::make_dispatcher(env).binder(), [](so_5::coop_t & coop) { auto * trash = coop.make_agent<trash_can>(); auto * handler = coop.make_agent<consumer>(trash->so_direct_mbox()); coop.make_agent<producer>(handler->so_direct_mbox()); }); }); } 

рдпрджрд┐ рд╣рдо рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:


 handling task: 0 handling task: 1 unhandled task: 5 unhandled task: 6 handling task: 2 unhandled task: 8 unhandled task: 9 handling task: 3 handling task: 4 handling task: 7 

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


рдФрд░ рдЙрджрд╛рд╣рд░рдг


рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдХреЛрдб рд╕реЗ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╕рдорд╛рди рд╣реИ, рд╡рд╣ рд╣рдорд╛рд░реА рдЭреАрдВрдЧрд╛ рдбреЗрдореЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд┐рдиреА-рд╕реАрд░реА рдореЗрдВ рд╢рд╛рд╕реНрддреНрд░реАрдп "рдбрд╛рдЗрдирд┐рдВрдЧ рджрд╛рд░реНрд╢рдирд┐рдХреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛": рднрд╛рдЧ 1 рдФрд░ рднрд╛рдЧ 2 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдПрдХ рдФрд░ рд╕реЗрдЯ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, SObjectizer рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ ред


рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?


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


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


рдпрджрд┐ рдЖрдк рдХреБрдЫ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╕реЗ рдирдВрдмрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ SOBjectizer рд╡рд┐рддрд░рдг рдХреЗ рдкрд░реАрдХреНрд╖рдг / so_5 / рдмреЗрдВрдЪ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВред


рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдиреЛрдЯ


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


рддреЛ рд╣рдо рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдЦреЗрд▓ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╣реИред


SObjectizer рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдХреНрдпреЛрдВ рджрд┐рдЦрддрд╛ рд╣реИ?


C ++ рдХреЗ рд▓рд┐рдП рдХрдИ "рдЕрднрд┐рдиреЗрддрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ" рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдЕрд▓рдЧ рджрд┐рдЦрддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдХреБрдЫ рд╡рд╕реНрддреБрдирд┐рд╖реНрда рдХрд╛рд░рдг рд╣реИрдВ: рдкреНрд░рддреНрдпреЗрдХ рд░реВрдкрд░реЗрдЦрд╛ рдХреА рдЕрдкрдиреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, C ++ рдореЗрдВ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЛ рдмрд╣реБрдд рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдореБрдЦреНрдп рд╕рд╡рд╛рд▓ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдХреНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд╛рдИ рдХреА рддрд░рд╣ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджрд┐рдЦрддрд╛?", рд▓реЗрдХрд┐рди "рдлреНрд░реЗрдо рдПрдХреНрд╕ рдРрд╕рд╛ рдХреНрдпреЛрдВ рджрд┐рдЦрддрд╛ рд╣реИ?"


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


рдПрдЬреЗрдВрдЯ Agent_t рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╡рд░реНрдЧреЛрдВ рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ


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


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


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


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд░рдЪрдирд╛ / рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджреЗрд╢


SObjectizer рдореЗрдВ рд╕рдВрджреЗрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдпрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдПрдБ рд╣реИрдВред рдЙрд╕рдХреЗ рдХрдо рд╕реЗ рдХрдо рджреЛ рдХрд╛рд░рдг рд╣реИрдВ:


  • SObjectizer-5 рдХрд╛ рд╡рд┐рдХрд╛рд╕ 2010 рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ рдЬрдм C ++ 11 рдХреЛ рдЕрднреА рддрдХ рдорд╛рдирдХреАрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдо рд╕реА ++ 11 рдХреА рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдереЗ рдЬреИрд╕реЗ рдХрд┐ рд╡реИрд░рд┐рдПрдбрд┐рдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдФрд░ рдПрд╕рдбреА std::tuple рдХреНрд▓рд╛рд╕ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдерд╛ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХреЗ message_t рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдерд╛ред рдЕрдм message_t рд╕реЗ рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди SObjectizer рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ message_t -derived рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡реИрд╕реЗ рднреА рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рд╣реИ;
  • рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░реНрд╕ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рдВрд╢реЛрдзрди рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджреЗрд╢ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдПрдХ рд╕рдВрдХрд▓рдХ рд╕реЗ рдПрдХ рдирд┐рдпрдВрддреНрд░рдг рд╣реЛрддрд╛ рд╣реИ: рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдВрджреЗрд╢ рд╕реЗ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдЙрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рд╕рдВрдХрд▓рдХ рдЖрдкрдХреЛ рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЧрд▓рдд рдкрд╣реБрдВрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдЧрд╛ред

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


рдПрдЬреЗрдВрдЯреЛрдВ рдХреЗ рдХреЛрдЯ


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


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


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


рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕


рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕ рдПрдХ рдФрд░ рдЕрджреНрд╡рд┐рддреАрдп SObjectizer рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред SObjectizer рдореЗрдВ рд╕рдВрджреЗрд╢ рдПрдХ рдПрдЬреЗрдВрдЯ рдХреЛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╕рдВрджреЗрд╢ рдмреЙрдХреНрд╕ (mbox) рдХреЛ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдПрдордмреЙрдХреНрд╕ рдХреЗ рдкреАрдЫреЗ рдПрдХ рд░рд┐рд╕реАрд╡рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдПрдХ рд▓рд╛рдЦ рдЧреНрд░рд╛рд╣рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


Mboxes рд╣рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд-рд╕рджрд╕реНрдпрддрд╛ рдореЙрдбрд▓ рдХреА рдореВрд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдХ рдПрдордмреЙрдХреНрд╕ рдХреЛ рдПрдордХреНрдпреВ-рдмреНрд░реЛрдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ рдХреЛ рдПрдХ рд╡рд┐рд╖рдп рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


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


рдПрдЬреЗрдВрдЯ рдПрдЪрдПрд╕рдПрдо рдХреЗ рд░реВрдк рдореЗрдВ


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


рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди (рдЬреИрд╕реЗ on_enter / on_exit рд╣реИрдВрдбрд▓рд░, рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдЯреЗрдЯреНрд╕, рд╕рдордп рд╕реАрдорд╛ рдФрд░ рдЗрддрдиреЗ рдкрд░) рдЙрддреНрдкрд╛рджрди рдореЗрдВ SObjectizer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдиреЗ SObjectizer рдХреЛ рдЕрднреА рддрдХ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдпрд╛ред


рд╕реА ++ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ


C ++ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ SObjectizer рдореЗрдВ рдореБрдЦреНрдп рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ C ++ рдЕрдкрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрднреА-рдХрднреА рдорд╣рдВрдЧрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдордиреЗ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдЕрдкрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред


рд╣рдореЗрдВ SObjectizer-4 рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдЕрдиреБрднрд╡ рдерд╛, рдЬрд╣рд╛рдВ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЕрдЬреНрдЮрд╛рдирддрд╛ рд╣реЛ рдЧрдИ рдФрд░ рдХрднреА-рдХрднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпрд╛рдВ рдирд╣реАрдВ рдХреА рдЧрдИрдВ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдирдпрд╛ рдХреЙрдк рдмрдирд╛рдиреЗ рдпрд╛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рдереАред рд▓реЗрдХрд┐рди рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рдмрд╣реБрдд рдмрд╛рдж рдореЗрдВ рдЦреЛрдЬрд╛ рдЧрдпрд╛ рдерд╛ред


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


рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ "рдЖрдЙрдЯ рдСрдл рдмреЙрдХреНрд╕"


SObjectzer-5 рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ SObjectizer рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЕрдВрджрд░ рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдВрддрд░-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╛ рдЕрдВрддрд░-рдиреЛрдЯ рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рдг рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдИрдкреАрд╕реА рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо SObjectizer рдореЗрдВ IPC рдХреЗ рдХреБрдЫ рд░реВрдк рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА SObjectizer-4 рдореЗрдВ рдерд╛ред рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдЕрдиреБрднрд╡ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ SObjectizer-5 рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдЖрдИрдкреАрд╕реА рдХрд╛ рдХреЛрдИ рдПрдХ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред


рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдЕрдВрддрд░-рдиреЛрдб рд╕рдВрдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдкрдпреБрдХреНрдд рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдХреБрдЫ рдЫреЛрдЯреЗ-рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ (рд╡рд░реНрддрдорд╛рди рдореМрд╕рдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдорд╛рдк рдХреЗ рд╡рд┐рддрд░рдг рдЬреИрд╕реЗ) рдХреЗ рд╕рд╛рде рд▓рд╛рдЦреЛрдВ рдЫреЛрдЯреЗ рдкреИрдХреЗрдЯ рдлреИрд▓рд╛рдиреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЖрдИрдкреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рднрд╛рд░реА BLOBs (рдЬреИрд╕реЗ 4K / 8K рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдпрд╛ рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХреЗ рдЕрдВрджрд░ рд╡рд┐рддреНрддреАрдп рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рджреВрд╕рд░реЗ IPC рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рдФрд░ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдЕрдВрддрд░реНрдореБрдЦрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдмреЛрд▓рддреЗ рд╣реИрдВ ...


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


SObjectizer рдХрд╕реНрдЯрдо mboxes рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ IPC рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ SObjectizer рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рдг рдХреЗ рддрдереНрдп рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп


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


SObjectizer рдЦреБрдж GitHub рдкрд░ рд░рд╣рддрд╛ рд╣реИ ред GitHub рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рдХреА рд╣реИ рдФрд░ рд╣рдо SObjectizer 5.6 рдмреЗрд╕рд┐рдХреНрд╕ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЗрди- рдбреАрдк рд╕реАрд░реАрдЬ рдХреЗ рд▓реЗрдЦреЛрдВ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдЬреЛ рд▓реЛрдЧ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо SObjectizer рдХреЗ рд╣реВрдб рдЕрдиреБрднрд╛рдЧ рдХреЗ рддрд╣рдд рджреЗрдЦреЗрдВ ред


рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдЖрдк рд╣рдореЗрдВ Google рдХреЗ рд╕рдореВрд╣реЛрдВ рдкрд░ SObjectizer рдХреЗ рд╕рдореВрд╣ рдореЗрдВ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles