"рд▓реЙрдХ-рдлрд╝реНрд░реА, рдпрд╛ рд▓реЙрдХ-рдлрд╝реНрд░реА рдирд╣реАрдВ, рдпрд╣ рд╕рд╡рд╛рд▓ рд╣реИ" рдпрд╛ "рд╕реНрд╡рд╕реНрде рдиреАрдВрдж рдХрдбрд╝рд╡реА рдореВрд▓реА рд╕реЗ рднреА рдмрджрддрд░ рд╣реИ"

" рдХреИрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдФрд░ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╕реЛрдирд╛ рд╣реИ " рд▓реЗрдЦ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдиреЗ рдореБрдЭреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред


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


NB:      C++  Linux,       POSIX.1-2008  a (    ). 

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


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


LAppS рдореНрдпреВрдЯреЗрдХреНрд╕ рдФрд░ рд╕реЗрдорд╛рдлреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рд╕реА ++ рдорд╛рдирдХ рдореЗрдВ рдХреЛрдИ рд╕реАрдореИрдлрд╝реЛрд░реНрд╕ рдирд╣реАрдВ рд╣реИрдВред рддрдВрддреНрд░ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реА ++ рдХреЛ рдЙрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕реЗрдореАрдлрд╝реЛрд░реНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕реЗрдореАрдлрд╝реЛрд░реНрд╕ рдорд╛рдирдХ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдореИрдВ рд╕реЗрдорд╛рдлреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ, рддреЛ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдХрд░рдирд╛ рд╣реИред


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


рдФрд░ рдореИрдВрдиреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ std :: mutex рдФрд░ POSIX рд╕реЗрдорд╛рдлреЛрд░реЗрд╕ рдХреЛ рдордирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЙрдиреНрд╣реЗрдВ std :: atomic рдХреЗ рд╕рд╛рде рдЕрдиреБрдХрд░рдг рдХрд░рддреЗ рд╣реБрдП, рд▓реЛрдб рдХреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рднреВрдорд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрд╕рдлрд▓ рд░рд╣рд╛, рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдХрдИ рдЦрдВрдб рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдпреЗ рдкреНрд░рдпреЛрдЧ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:


  • рд▓рд┐рдмреНрд░реЗрдПрд╕рдПрд╕рдПрд▓ (рдХреЗрд╕ 1) рдореЗрдВ рддрд╛рд▓реЗ;
  • рдЕрд╡рд░реБрджреНрдз рдЬрдм рдкреЗрд▓реЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Lua рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ (рдорд╛рдорд▓рд╛ 2) рдХреЗ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд;
  • рд▓реВрдЖ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ (рдХреЗрд╕ 3) рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдкреЗрд▓реЛрдб рдШрдЯрдирд╛рдУрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред

рдЪрд▓реЛ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз-рддрд╛рд▓реЗ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рдПрдЯрдорд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдорд╛рд░реЗ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЛ рд▓рд┐рдЦреЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдЪред рд╕рдЯрд░ рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рднрд╛рд╖рдгреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдореВрд▓ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╕реНрдореГрддрд┐ рд╕реЗ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдореВрд▓ 100% рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ Satter рдореЗрдВ рдпрд╣ рдХреЛрдб C ++ 20 рдкреНрд░рдЧрддрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдерд╛, рдЗрд╕рд▓рд┐рдП рдорддрднреЗрдж рд╣реИрдВ)ред рдФрд░ рдЗрд╕ рдХреЛрдб рдХреА рд╕рд╛рджрдЧреА рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЗрд╕рдореЗрдВ рдиреБрдХрд╕рд╛рди рд╣реИрдВред


 #include <atomic> #include <pthread.h> namespace test { class mutex { private: std::atomic<pthread_t> mLock; public: explicit mutex():mLock{0} { } mutex(const mutex&)=delete; mutex(mutex&)=delete; void lock() { pthread_t locked_by=0; //  C++20     , .. compare_exchange_strong          while(!mLock.compare_exchange_strong(locked_by,pthread_self())) { locked_by=0; //      } } void unlock() { pthread_t current=pthread_self(); if(!mLock.compare_exchange_strong(current,0)) { throw std::system_error(EACCES, std::system_category(), "An attempt to unlock the mutex owned by other thread"); } } const bool try_lock() { pthread_t unused=0; return mLock.compare_exchange_strong(unused,pthread_self()); } }; } 

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


рд╣рдо рд╢реЗрдбреНрдпреВрд▓_рдпрд┐рд▓реНрдб () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдХреНрдпрд╛ рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдордп-рд╕рд╛рд░рдгреА () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕реВрддреНрд░ рдХрд╛рд░реНрдп рдЕрдиреБрд╕реВрдЪреА рдореЗрдВ рдЙрдирдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗ рд▓рд┐рдП SCHED_RR, SCHED_FIFO рдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЕрдиреНрдпрдерд╛, рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓_рдбрд┐рд▓реНрдб () рд╕реАрдкреАрдпреВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдмрд░реНрдмрд╛рджреА рд╣реЛрдЧреАред рджреВрд╕рд░реЗ, рд╢реЗрдбреНрдпреВрд▓_рдЗрд▓реНрдб () рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд▓рдЧрд╛рддрд╛рд░ рдХреЙрд▓ рдЕрднреА рднреА рд╕реАрдкреАрдпреВ рдХреА рдЦрдкрдд рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреА рдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ, рдФрд░ рдмрд╢рд░реНрддреЗ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдЪрдпрдирд┐рдд рдиреАрддрд┐ рдХреЗ рд╕рд╛рде рдЕрдиреБрд╕реВрдЪрдХ рдХрддрд╛рд░ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рд▓рдЧреЗрдЧрд╛ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ! рдирд╣реАрдВ, рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВред рдкреВрд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдХрдо рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╡реНрдпрд╕реНрддред рдкреЗрди рдореЗрдВ рд╕реАрдПрдлрдХреНрдпреВ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЖрд╡реЗрджрди рдореЗрдВ рдЕрдиреНрдп рдзрд╛рдЧреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рдмрд╛рд░ рдПрдХ рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм рдореНрдпреВрдЯреЗрдХреНрд╕ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдзрд╛рдЧреЗ рдХреЛ рдХрддрд╛рд░ рдХреЗ рдЕрдВрдд рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреЛрдЯрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ), рдФрд░ рдЬреЛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЗ рдЗрдВрддрдЬрд╛рд░ рдореЗрдВ рд╣реИ рдЙрд╕рдХреЗ рдареАрдХ рд╕рд╛рдордиреЗ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЗрд░реЗ рдкреНрд░рдпреЛрдЧреЛрдВ (рдХреЗрд╕ 2) рдореЗрдВ, рдЗрд╕ рдкрджреНрдзрддрд┐ рдиреЗ std :: mutex рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдореЛрдВ (3.8% рдЦрд░рд╛рдм) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреА, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдХрдо рдЙрддреНрддрд░рджрд╛рдпреА рд╣реИ рдФрд░ CPU рдЦрдкрдд рдореЗрдВ 5% -7% рдХреА рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИред


рдЖрдк рдкрд░реАрдХреНрд╖рдг рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :: рдореНрдпреВрдЯреЗрдХреНрд╕ :: рд▓реЙрдХ () рдЗрд╕ рддрд░рд╣ (рднреА рдЦрд░рд╛рдм):


 void lock() { pthread_t locked_by=0; while(!mLock.compare_exchange_strong(locked_by,pthread_self())) { static thread_local const struct timespec pause{0,4}; // -      nanosleep(&pause,nullptr); locked_by=0; } } 

рдпрд╣рд╛рдВ рдЖрдк рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рдиреАрдВрдж рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, 4ns рджреЗрд░реА рдореЗрд░реЗ рд╕реАрдкреАрдпреВ рдХреЗ рд▓рд┐рдП рдЗрд╖реНрдЯрддрдо рдереЗ рдФрд░ рдПрд╕рдЯреА рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдбреНрд░реЙрдк рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкреНрд░рджрд░реНрд╢рди :: mutex рдПрдХ рд╣реА рдорд╛рдорд▓реЗ рдореЗрдВ 2 1.2% рдерд╛ред рддрдереНрдп рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдиреИрдиреЛрд╕реЗрд▓реЗрдк 4ns рд╕реЛрдП рдереЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╛ рдЕрдзрд┐рдХ (рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ) рдпрд╛ рдЙрд╕рд╕реЗ рдХрдо (рдпрджрд┐ рдмрд╛рдзрд┐рдд рд╣реЛ)ред рд╕реАрдкреАрдпреВ рдХреА рдЦрдкрдд рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ (!) 12% -20% рдереАред рдпрд╛рдиреА рдпрд╣ рдПрдХ рд╕реНрд╡рд╕реНрде рд╕рдкрдирд╛ рдерд╛ред


рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдФрд░ рд▓рд┐рдмреНрд░реЗрдПрд╕рдПрд╕рдПрд▓ рдХреЗ рджреЛ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрд░рддреЗ рд╕рдордп рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


 //  callback void openssl_crypt_locking_function_callback(int mode, int n, const char* file, const int line) { static std::vector<std::mutex> locks(CRYPTO_num_locks()); if(n>=static_cast<int>(locks.size())) { abort(); } if(mode & CRYPTO_LOCK) locks[n].lock(); else locks[n].unlock(); } //  callback-a CRYPTO_set_locking_callback(openssl_crypt_locking_function_callback); //  id CRYPTO_set_id_callback(pthread_self); 

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


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдХреЗрд╕ 2 рдФрд░ рдХреЗрд╕ 1 рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдФрд░ std :: mutex рдХреЗ рд╕рд╛рде рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВред


рдЖрдЗрдП рдЕрд░реНрдзрд╡реГрддреНрдд рдкрд░ рдЬрд╛рдПрдВред Std :: condition_variable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдорд╛рдлреЛрд░ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рд╡реЗ рд╕рднреА std :: mutex рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реЗрдорд╛рдлреЛрд░ рд╕рд┐рдореБрд▓реЗрдЯрд░ рдкреЙрд╕рд┐рдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдорд╛рдлреЛрд░реНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореЗ (рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рд╣реИрдВред


рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкрд░рдорд╛рдгреБрдУрдВ рдкрд░ рдПрдХ рдЕрд░реНрдзрд╡реГрддреНрдд рдмрдирд╛рдПрдВрдЧреЗ:


  class semaphore { private: std::atomic<bool> mayRun; mutable std::atomic<int64_t> counter; public: explicit semaphore() : mayRun{true},counter{0} { } semaphore(const semaphore&)=delete; semaphore(semaphore&)=delete; const bool post() const { ++counter; return mayRun.load(); } const bool try_wait() { if(mayRun.load()) { if(counter.fetch_sub(1)>0) return true; else { ++counter; return false; } }else{ throw std::system_error(ENOENT,std::system_category(),"Semaphore is destroyed"); } } void wait() { while(!try_wait()) { static thread_local const struct timespec pause{0,4}; nanosleep(&pause,nullptr); } } void destroy() { mayRun.store(false); } const int64_t decrimentOn(const size_t value) { if(mayRun.load()) { return counter.fetch_sub(value); }else{ throw std::system_error(ENOENT,std::system_category(),"Semaphore is destroyed"); } } ~semaphore() { destroy(); } }; 

рдУрд╣, рдпрд╣ рд╕реЗрдорд╛рдлреЛрд░ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдорд╛рдлреЛрд░ рд╕реЗ рдХрдИ рдЧреБрдирд╛ рддреЗрдЬ рд╣реИред рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдФрд░ 20 рдХрдВрд╕реНрдпреВрдорд░реНрд╕ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕реЗрдорд╛рдлреЛрд░ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо:


 OS semaphores test. Started 20 threads waiting on a semaphore Thread(OS): wakes: 500321 Thread(OS): wakes: 500473 Thread(OS): wakes: 501504 Thread(OS): wakes: 502337 Thread(OS): wakes: 498324 Thread(OS): wakes: 502755 Thread(OS): wakes: 500212 Thread(OS): wakes: 498579 Thread(OS): wakes: 499504 Thread(OS): wakes: 500228 Thread(OS): wakes: 499696 Thread(OS): wakes: 501978 Thread(OS): wakes: 498617 Thread(OS): wakes: 502238 Thread(OS): wakes: 497797 Thread(OS): wakes: 498089 Thread(OS): wakes: 499292 Thread(OS): wakes: 498011 Thread(OS): wakes: 498749 Thread(OS): wakes: 501296 OS semaphores test. 10000000 of posts for 20 waiting threads have taken 9924 milliseconds OS semaphores test. Post latency: 0.9924ns ======================================= AtomicEmu semaphores test. Started 20 threads waiting on a semaphore Thread(EmuAtomic) wakes: 492748 Thread(EmuAtomic) wakes: 546860 Thread(EmuAtomic) wakes: 479375 Thread(EmuAtomic) wakes: 534676 Thread(EmuAtomic) wakes: 501014 Thread(EmuAtomic) wakes: 528220 Thread(EmuAtomic) wakes: 496783 Thread(EmuAtomic) wakes: 467563 Thread(EmuAtomic) wakes: 608086 Thread(EmuAtomic) wakes: 489825 Thread(EmuAtomic) wakes: 479799 Thread(EmuAtomic) wakes: 539634 Thread(EmuAtomic) wakes: 479559 Thread(EmuAtomic) wakes: 495377 Thread(EmuAtomic) wakes: 454759 Thread(EmuAtomic) wakes: 482375 Thread(EmuAtomic) wakes: 512442 Thread(EmuAtomic) wakes: 453303 Thread(EmuAtomic) wakes: 480227 Thread(EmuAtomic) wakes: 477375 AtomicEmu semaphores test. 10000000 of posts for 20 waiting threads have taken 341 milliseconds AtomicEmu semaphores test. Post latency: 0.0341ns 

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


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


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


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


рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдореНрдпреВрдЯреЗрдХреНрд╕ рдФрд░ рд╕реЗрдорд╛рдлреЛрд░ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдереНрд░реЗрдб рддрдм рддрдХ рдирд╣реАрдВ рдЙрдарддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдШрдЯрдирд╛ (рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░рдиреЗ рдпрд╛ рд╕реЗрдорд╛рдлреЛрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ) рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реАрдкреАрдпреВ рдЪрдХреНрд░ рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ - рд▓рд╛рднред


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЗрд╕ рдмреБрд░рд╛рдИ рд╕реЗ рд╕рдм рдХреБрдЫ, рдореЗрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ iptables рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рд╕реЗ 12% (TLS рдХреЗ рд╕рд╛рде) рд╕реЗ 30% (TLS рдХреЗ рдмрд┐рдирд╛) рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рд╣реЛрддрд╛ рд╣реИ ...

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


All Articles