{"id":443078,"date":"2024-12-26T04:51:03","date_gmt":"2024-12-26T04:51:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=443078"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=443078","title":{"rendered":"<span>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f: \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u0438 \u043a\u0430\u043a \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/02a\/73a\/7cf\/02a73a7cfc2429f0e81e4dab943bc1ee.png\" width=\"780\" height=\"439\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/02a\/73a\/7cf\/02a73a7cfc2429f0e81e4dab943bc1ee.png\"\/><\/figure>\n<p><em>                                                                                     \u2014 Are there a lot of these kinds of accidents? <\/em><br \/>                                                                                                                       <em>\u2014 You wouldn&#8217;t believe. <\/em><br \/>                                                                                              <em>\u2014 Which car company do you work for? <\/em><br \/>                                                                                                                                     <em>\u2014 A major one.<\/em><\/p>\n<p>                                                                                                                                           (Fight Club)<\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0432\u0435\u043b \u041f\u0440\u0435\u0431\u043b\u0430\u0433\u0438\u043d, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 Positive Technologies. \u041c\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438 \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0438\u0437\u043d\u0443\u0442\u0440\u0438. \u041a\u0430\u043a \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430\u0448\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u0440\u043e\u0435\u043a\u0442\u043d\u0430\u044f: \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b, \u043a\u0440\u043e\u043c\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041e\u0431\u044b\u0447\u043d\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0442\u0434\u0435\u043b\u043e\u0432 \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u043d\u0430\u043c \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u044e \u0431\u0430\u0437\u0443, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 C++, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u043e. \u041c\u044b \u0432 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u043c \u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430\u043c\u0435\u0440\u043e\u0432, \u043f\u0430\u0442\u0447\u0438 \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0425\u043e\u0442\u044f \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u043b\u043e\u0434\u0430\u044f, \u043c\u044b \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0442\u0430\u043a\u0438\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c \u0438 \u043d\u0430\u043d\u0435\u0441\u0442\u0438 \u043d\u0435\u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043c\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u0443. \u0412\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c, \u043d\u043e \u043c\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438\u0441\u044c \u0432 \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0432\u0435\u0437\u0434\u0435, \u043d\u043e\u0441\u0438\u043b\u0438 \u043e\u0431\u0449\u0438\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440, \u0430 \u0440\u0435\u0448\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0438 \u043f\u043e\u0440\u043e\u0439 \u0431\u0435\u0437 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u0443\u0441\u0438\u043b\u0438\u0439. \u0426\u0435\u043b\u044c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0443 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u043c\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041a\u0435\u0439\u0441\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0433\u043b\u0443\u043f\u044b\u043c\u0438, \u043d\u043e \u0444\u0430\u043a\u0442 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u043a\u0442\u043e\u043c: \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043c\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u0441\u0442\u0432\u043e\u043c \u0438 \u0432\u0438\u0434\u0435\u043b\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u0445, \u0435\u0449\u0435 \u0434\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u0432 \u041f\u043e\u0437\u0438\u0442\u0438\u0432.<\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438, \u2014 \u044d\u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0431\u0443\u0434\u044c \u0442\u043e \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0438\u043b\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0434\u043b\u044f \u043d\u0430\u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432 EPS, \u043e\u043d\u0438 \u0436\u0435 events per second, \u043e\u043d\u0438 \u0436\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0415\u0441\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u043f\u043e \u0445\u043e\u0434\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0440\u043e\u0441\u043b\u0430 \u043d\u0430 10%, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 10% \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043a\u0435\u0439\u0441\u043e\u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u044b \u0434\u043e \u043d\u0430\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044e \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0443-\u0442\u043e \u0432\u0441\u0435 \u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u044b\u0440\u043d\u0443\u0442\u044c \u0432 \u043d\u0438\u0445 \u0441 \u0433\u043e\u043b\u043e\u0432\u043e\u0439, \u043d\u0430\u0448\u0438 \u0434\u043e\u0431\u0440\u044b\u0435 \u0438 \u043f\u0440\u0438\u0432\u0435\u0442\u043b\u0438\u0432\u044b\u0435 HR \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0434\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0430\u0448\u0435 \u0440\u0435\u0437\u044e\u043c\u0435.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c-\u0441.<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u0441\u0442\u0430\u0442\u044c\u0435<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><a href=\"#%D0%9B%D0%BE%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%98%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B5\">\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0435 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%9B%D0%BE%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B2\">\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u044f\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a \u0432\u044b\u0432\u043e\u0434\u0443 \u0432 \u043b\u043e\u0433 \u0431\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e <\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%92%D1%8B%D0%B1%D0%BE%D1%80\">\u0412\u044b\u0431\u043e\u0440 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%98%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5\">\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5\">\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%A1%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B5\">\u0421\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b <\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%92%D1%8B%D0%B1%D0%BE%D1%802\">\u0412\u044b\u0431\u043e\u0440<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5\">\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 <\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%92%D1%8B%D0%B1%D0%BE%D1%803\">\u0412\u044b\u0431\u043e\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%A1%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\">\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 std::pair \u0438 std::tuple<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5\">\u041c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%97%D0%B0%D0%B1%D1%8B%D1%82%D1%8B%D0%B5\">\u0417\u0430\u0431\u044b\u0442\u044b\u0435 \u0438 \u043b\u0438\u0448\u043d\u0438\u0435 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%A0%D0%B0%D0%B7%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0\">\u0420\u0430\u0437\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%9D%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D1%8B%D0%B5\">\u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043a\u043e\u043f\u0438\u0438, \u0448\u0430\u0440\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 shared mutex<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%97%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"%D0%9B%D0%BE%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\" id=\"\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\"><\/a><\/p>\n<h2>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p><a class=\"anchor\" name=\"%D0%98%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B5\" id=\"\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0435\"><\/a><\/p>\n<h3>\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0435 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u043c, \u0442\u0435\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c.<\/p>\n<p><strong>\u041f\u043b\u043e\u0445\u043e<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">int upper_level(char *data, size_t sz) {     \/\/ \u0447\u0442\u043e-\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430     LOG_INFO(\"Going to do lower_level() with data {}\", data);     LOG_INFO(\"Size {}\", sz);      status = lower_level(data, sz);     LOG_INFO(\"Status {}\", status); \u00a0   \/\/ \u0438 \u0447\u0442\u043e-\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 }  int lower_level(void *data, size_t sz) { \u00a0\u00a0\u00a0 LOG_INFO(\"Data pointer is {}\", data);     \/\/ \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u0447\u0442\u043e \u0432\u0435\u043b\u0438\u043a\u043e\u0435     LOG_INFO(\"Data size {}\", sz } <\/code><\/pre>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0430\u0443\u0434\u0438\u0442\u0443, \u0438\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u044c \u2014 \u0441\u0435\u0441\u0442\u0440\u0430 \u0442\u0430\u043b\u0430\u043d\u0442\u0430.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e\/\u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u044b\u0432\u043e\u0434 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435, \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u044f\u0432\u043d\u043e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0434\u0432\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432 \u043e\u0434\u043d\u043e. \u041e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445, \u0438 \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043b\u043e\u0433.<\/p>\n<p>\u0412-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c severity \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435, \u043d\u043e \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043f\u043e \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0441\u0442\u0438 \u2014 \u0440\u0435\u0448\u0438\u0442\u044c, \u043d\u0443\u0436\u043d\u044b \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u043e\u0433\u0438 \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0430\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0435\u0433\u043e \u0436\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0438 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u043e\u043d\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c, \u043a\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0433\u043e\u0442\u043e\u0432. \u041f\u043e\u0440\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 <code>assert()<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u0447\u0435\u0437\u0430\u0442\u044c \u0432 \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043a\u0430\u0445.<\/p>\n<p><strong>\u041b\u0443\u0447\u0448\u0435<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">int upper_level(char *data, size_t sz) {      \/\/ \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u044d\u0442\u043e\u0442 \u043b\u043e\u0433, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0443\u0436\u043d\u043e     LOG_DEBUG(\"Doing lower_level(), size {}, data {}\", data_size, data);      status = lower_level(data, data_size);     \/\/ \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e, \u0430 \u0435\u0441\u043b\u0438 \u0441\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c,     \/\/ \u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0443\u0436\u0435 \u043d\u0435 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u043b\u0430\u043d\u0435     if(status != SUCCESS) {         LOG_ERROR(\"lower_level() failed with status {} for {}\", status, data);     }  }  int lower_level(void *data, size_t sz) {  \/\/ \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u043c \u0442\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \/\/ \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c assert(data != nullptr);     \/\/ \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0422\u041e\u041b\u042c\u041a\u041e \u043d\u0435\u0447\u0442\u043e \u0432\u0435\u043b\u0438\u043a\u043e\u0435  } <\/code><\/pre>\n<p><a class=\"anchor\" name=\"%D0%9B%D0%BE%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B2\" id=\"\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\"><\/a><\/p>\n<h3>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u044f\u0445<\/h3>\n<p>\u0422\u043e, \u0447\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u044f\u043c\u043e \u0437\u0434\u0435\u0441\u044c \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0438\u0441\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u044b \u0432 \u0444\u0430\u0439\u043b, \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u042d\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u00ab\u043c\u044c\u044e\u0442\u0435\u043a\u0441 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c \u043f\u043e\u0433\u043e\u043d\u044f\u0435\u0442\u00bb, \u0438 \u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u0436\u0435 \u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u0434 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p><strong>\u041f\u043b\u043e\u0445\u043e<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">void some_sync_function() {     std::unique_lock&lt;std::mutex&gt; lock{ some_mutex };     \/\/ \u0447\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u0449\u0438\u0442\u044b \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438     LOG_TRACE(\"Critical section done!\") } <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0432\u044b\u0439\u0434\u044f \u0438\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438.<\/p>\n<p><strong>\u041b\u0443\u0447\u0448\u0435<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">void some_sync_function() {     {     std::unique_lock&lt;std::mutex&gt; lock{ some_mutex }; \/\/ \u0447\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u0449\u0438\u0442\u044b \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \/\/ \u0438 \u0432\u044b\u0434\u043e\u0445\u043d\u0443\u043b\u0438, \u043e\u0442\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043c\u044c\u044e\u0442\u0435\u043a\u0441 } \/\/ \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u0430 \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0435 \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0433\u043e LOG_TRACE(\"Critical section done!\"); } <\/code><\/pre>\n<p>\u0412\u044b\u043d\u043e\u0441 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437-\u043f\u043e\u0434 \u043c\u044e\u0442\u0435\u043a\u0441\u0430 \u0434\u0430\u043b +10% \u043a \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441\u0443 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p><a class=\"anchor\" name=\"%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0\" id=\"\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430\"><\/a><\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a \u0432\u044b\u0432\u043e\u0434\u0443 \u0432 \u043b\u043e\u0433 \u0431\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0430\u0439\u0434\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u043b\u0433\u0438\u0445 \u0440\u0430\u0437\u0434\u0443\u043c\u0438\u0439 \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043d\u0430\u0431\u0440\u0430\u043b\u0441\u044f \u0441\u043c\u0435\u043b\u043e\u0441\u0442\u0438, \u0438 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u041f\u043e\u0445\u043e\u0436\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432 \u043a\u043e\u0434\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a \u0432\u044b\u0432\u043e\u0434\u0443 \u0432 \u043b\u043e\u0433: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 JSON \u0432 \u0441\u0442\u0440\u043e\u043a\u0443, \u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c.<\/p>\n<p><strong>\u041f\u043b\u043e\u0445\u043e<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">void debug(std::string_view s) {     \/\/ \u043c\u043e\u0436\u0435\u0442, \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c; \u043c\u043e\u0436\u0435\u0442, \u043d\u0435 \u0431\u0443\u0434\u0435\u043c     if(debug_log_level &gt;= current_log_level) {         \/\/ \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0443\u0434\u0430-\u0442\u043e \u043f\u0438\u0448\u0435\u043c     } }  void do_something_with_json() {     \/\/ \u0437\u0434\u0435\u0441\u044c \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f JSON     \/\/ \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0443     auto s = json.to_string(); \/\/ \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 debug(\"JSON is \" + s);     \/\/ \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u044c\u0448\u0435  } <\/code><\/pre>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u043c\u0435\u0442\u043e\u0434 <code>json.to_string()<\/code>, \u043a\u0430\u043a \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0431\u0443\u0434\u0435\u043c \u043b\u0438 \u043c\u044b \u0447\u0442\u043e-\u0442\u043e \u043a\u0443\u0434\u0430-\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043b\u0438 \u043d\u0435\u0442. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u043e\u043d\u0438, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0432\u043f\u0443\u0441\u0442\u0443\u044e.<\/p>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u043a\u0440\u043e\u0441\u044b (\u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0434\u0443\u0442 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439) \u0438 \u0438\u0437\u0431\u0430\u0432\u0438\u0432\u0448\u0438\u0441\u044c \u043e\u0442 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.<\/p>\n<p><strong>\u041b\u0443\u0447\u0448\u0435<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">#define LOG_DEBUG if(debug_log_level &gt;= current_log_level) { \/\/ \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0443\u0434\u0430-\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0438\u0448\u0435\u043c \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b }  void do_something_with_json() {     \/\/ \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 \u0432\u044b\u0448\u0435, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043d\u043e\u0432\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u043a\u0430 \u0435\u0449\u0435 \u043d\u0435\u0442      LOG_DEBUG(\"JSON is \" + json.to_string());     \/\/ \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u044c\u0448\u0435, \u043d\u043e \u0443\u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 } <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0432\u0435\u0434\u0435\u0442\u0441\u044f, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0432 \u0441 \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 +5% \u043a \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u043c\u0443 EPS.<\/p>\n<p><a class=\"anchor\" name=\"%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0\" id=\"\u0420\u0430\u0431\u043e\u0442\u0430\"><\/a><\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/h2>\n<p><a class=\"anchor\" name=\"%D0%92%D1%8B%D0%B1%D0%BE%D1%80\" id=\"\u0412\u044b\u0431\u043e\u0440\"><\/a><\/p>\n<h3>\u0412\u044b\u0431\u043e\u0440 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430<\/h3>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c. \u0410\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u0435\u043d \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043d\u043e \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0441\u0430\u043c\u044b\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0433\u043d\u0430\u0432 \u043c\u0438\u043a\u0440\u043e\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/167\/d01\/77d\/167d0177d0c307df241f97fadaf31f9e.png\" alt=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043c\u0438\u043a\u0440\u043e\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\" title=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043c\u0438\u043a\u0440\u043e\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\" width=\"731\" height=\"540\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/167\/d01\/77d\/167d0177d0c307df241f97fadaf31f9e.png\"\/><\/p>\n<div><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043c\u0438\u043a\u0440\u043e\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <code>tcmalloc<\/code> \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430 \u0432 \u043f\u044f\u0442\u044c \u0440\u0430\u0437. \u042d\u0442\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0441\u044f \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u044d\u0442\u043e\u0442 \u0433\u0440\u0430\u0444\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u043d\u043e \u0432 \u043e\u0431\u0449\u0435\u043c \u0438 \u0446\u0435\u043b\u043e\u043c <code>tcmalloc<\/code> \u0438\u0437 <code>gperftools<\/code> \u043f\u043e\u043a\u0430 \u043d\u0430\u0448 \u043b\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0432\u043e\u0440\u0438\u0442*.<\/p>\n<p>* <a href=\"https:\/\/github.com\/jemalloc\/jemalloc\"><em><sub>jemalloc<\/sub><\/em><\/a><em><sub> \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0435\u0441\u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0435\u0433\u043e \u043f\u043e\u0434\u0442\u044e\u043d\u0438\u0442\u044c, \u2014 \u0431\u043b\u0430\u0433\u043e \u043e\u043f\u0446\u0438\u0439 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442.<\/sub><\/em>    <\/p>\n<p>\u041f\u0440\u0430\u0432\u0434\u0430, \u0437\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0439 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0434\u0430\u043b\u044c\u0448\u0435. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043b\u0435\u0447\u0438\u0442 \u0441\u0438\u043c\u043f\u0442\u043e\u043c\u044b, \u0430 \u043d\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b.<\/p>\n<p><a class=\"anchor\" name=\"%D0%98%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5\" id=\"\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435\"><\/a><\/p>\n<h3>\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0425\u043e\u0442\u044f \u0441\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0438 10%, \u0438 20% \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0423 \u043d\u0430\u0441 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u0440\u0430\u0437\u043c\u0430\u0437\u0430\u043d\u043e \u0442\u043e\u043d\u043a\u0438\u043c \u0441\u043b\u043e\u0435\u043c \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0444\u043b\u0435\u0439\u043c\u0433\u0440\u0430\u0444\u0443\u00bb (\u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u00ab\u0444\u043b\u0435\u0439\u043c\u0433\u0440\u0430\u0444\u00bb \u0438 \u0441 \u0447\u0435\u043c \u0435\u0433\u043e \u0435\u0434\u044f\u0442 \u2014 \u0441\u043c. <a href=\"https:\/\/habr.com\/ru\/companies\/pt\/articles\/820453\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e<\/a>).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f86\/8e7\/88c\/f868e788c3a761afd1fe1d597cafaefb.png\" alt=\"\u0424\u043b\u0435\u0439\u043c\u0433\u0440\u0430\u0444 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439\" title=\"\u0424\u043b\u0435\u0439\u043c\u0433\u0440\u0430\u0444 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439\" width=\"731\" height=\"304\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f86\/8e7\/88c\/f868e788c3a761afd1fe1d597cafaefb.png\"\/><\/p>\n<div><figcaption>\u0424\u043b\u0435\u0439\u043c\u0433\u0440\u0430\u0444 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0443\u0440\u043f\u0443\u0440\u043d\u044b\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0432\u044b\u0437\u043e\u0432\u044b \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430. <\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e <a href=\"https:\/\/meetingcpp.com\/mcpp\/slides\/2022\/Basic%20usage%20of%20PMRs%20for%20better%20performance8308.pdf\">\u0432\u00a0\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a> \u041c\u0430\u0440\u0435\u043a\u0430 \u041a\u0440\u0430\u0435\u0432\u0441\u043a\u0438.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0435\u0441\u043b\u0438 \u043c\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0432\u0430\u0442\u0438\u0442 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, \u2014 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, \u044d\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<p><strong>\u041f\u043b\u043e\u0445\u043e<\/strong><\/p>\n<pre><code class=\"cpp\">void some_function() {   \/\/ \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c, \/\/ \u0438 \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 SSO: https:\/\/rrmprogramming.com\/article\/small-string-optimization-sso-in-c\/ std::string hostname;  \/\/ \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u043d\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0445\u043e\u0441\u0442\u043d\u0435\u0439\u043c\u043e\u043c  \/\/ \u0438 \u043e\u043d \u043d\u0435 \u0432\u043b\u0435\u0437\u0435\u0442 \u0432 SSO, \/\/ \u043c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u0432 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 \u0437\u0430 \u043f\u0430\u043c\u044f\u0442\u044c\u044e } <\/code><\/pre>\n<p><strong>\u041b\u0443\u0447\u0448\u0435<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">#define __USE_POSIX #include &lt;limits.h&gt;   void some_function() {    \/\/ \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \/\/ \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 SSO, \u043d\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a  \/\/ \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0432 variable-length arrays, \/\/ \u0442\u043e \u0435\u0441\u0442\u044c alloca()\/_malloca()   char hostname[HOST_NAME_MAX] ={0};   \/\/ \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u043f\u043e\u0439\u0434\u0435\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0445\u043e\u0441\u0442\u043d\u0435\u0439\u043c \u0443\u0436\u0435 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 } <\/code><\/pre>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0442\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0431\u043b\u043e\u043a \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p><strong>\u041a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u043d\u0430 \u043f\u0430\u0440\u0430\u0445<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">int** make_2d_array(size_t M, size_t N) { \/\/ \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u043c\u0430\u0441\u0441\u0438\u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 auto array = new int*[M];  \/\/ \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u0446\u0438\u043a\u043b\u0435 for(size_t i = 0; i &lt; M; ++i) { array[i] = new int[N]; } return array; } <\/code><\/pre>\n<p><strong>\u041b\u0443\u0447\u0448\u0435<\/strong><\/p>\n<pre><code class=\"cpp\">int** make_2d_array(size_t M, size_t N) {  \/\/ \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u043c\u0430\u0441\u0441\u0438\u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 auto array = new int*[M];   \/\/ \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434 \u0432\u0435\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432 auto data = new int[M * N];  \/\/ \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u043c\u0438 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u0438\u0437 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 for(size_t i = 0; i &lt; M; ++i) { \/\/ \u043d\u0430\u0447\u0430\u043b\u043e \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u0431\u043b\u043e\u043a\u0435 array[i] = (data + i * N); } return array; } <\/code><\/pre>\n<p>\u041f\u043e\u0445\u043e\u0436\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a \u0441\u043b\u043e\u0432\u0443, \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u0445 STL: \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u0435\u0440\u0433\u0430\u0442\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u043f\u0430\u043c\u044f\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c \u043f\u043e\u0434 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u042d\u0442\u043e, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u0435 \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>reserve()<\/code> \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>\u0412-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u0435\u0441\u043b\u0438 \u0432 \u0445\u043e\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043c\u044b \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u0445 \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u043e\u0440\u043e\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 <code>malloc()<\/code> \u0438 <code>free()<\/code>.<\/p>\n<p><strong>\u041f\u043b\u043e\u0445\u043e<\/strong><\/p>\n<pre><code class=\"cpp\">void some_function(size_t sz) { \/\/ \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043f\u0440\u043e\u0441\u0438\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 char *buf = static_cast&lt;char*&gt;(std::malloc(sz)); \/\/ \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0447\u0442\u043e-\u0442\u043e \u0432 \u044d\u0442\u043e\u0442 \u0431\u0443\u0444\u0435\u0440 \u043f\u0438\u0448\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 } <\/code><\/pre>\n<p><strong>\u041b\u0443\u0447\u0448\u0435<\/strong><\/p>\n<pre><code class=\"cpp\">void some_function(size_t sz) { \/\/ static \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 static size_t allocated = sz;  static char *buf = static_cast&lt;char*&gt;(std::malloc(allocated));  \/\/ \u0435\u0441\u043b\u0438 \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0430 \u0438\u043b\u0438 \u0435\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \/\/ \u0442\u043e \u0434\u043e\u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c if(sz &gt; allocated) { buf = static_cast&lt;char*&gt;(std::realloc(buf, sz)); }  \/\/ \u0438 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0447\u0442\u043e-\u0442\u043e \u0432 \u044d\u0442\u043e\u0442 \u0431\u0443\u0444\u0435\u0440 \u043f\u0438\u0448\u0435\u043c } <\/code><\/pre>\n<p><a class=\"anchor\" name=\"%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5\" id=\"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\"><\/a><\/p>\n<h3>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432<\/h3>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u0418\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b, \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u043d\u0435\u043a\u043e\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438, \u043a\u0443\u0434\u0430 \u043f\u043e\u0442\u043e\u043c \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430-\u043b\u044f <a href=\"https:\/\/www.ibm.com\/docs\/en\/zos\/2.5.0?topic=only-placement-syntax\">placement new<\/a>. \u0412\u044b\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u043e\u0436\u0435 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430. \u041a\u0430\u043a \u043d\u0430\u0448 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 <code>glibc<\/code>, <code>tcmalloc<\/code> \u0438\u043b\u0438 \u043a\u0435\u043c-\u0442\u043e \u0435\u0449\u0435, \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u044f\u0434\u0440\u0443, \u0442\u0430\u043a \u0438 \u043c\u044b \u0441\u043e\u043e\u0440\u0443\u0436\u0430\u0435\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0443\u0436\u0435 \u043a \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0443.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a18\/9be\/75a\/a189be75a5595ccb97feca1e733cb42b.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0430\u0440\u0435\u043d\u044b \u043f\u0430\u043c\u044f\u0442\u0438\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0430\u0440\u0435\u043d\u044b \u043f\u0430\u043c\u044f\u0442\u0438\" width=\"731\" height=\"203\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a18\/9be\/75a\/a189be75a5595ccb97feca1e733cb42b.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0430\u0440\u0435\u043d\u044b \u043f\u0430\u043c\u044f\u0442\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0425\u043e\u0440\u043e\u0448\u0438\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f <a href=\"https:\/\/dev.mysql.com\/doc\/dev\/mysql-server\/latest\/structMEM__ROOT.html\">MEM_ROOT<\/a> \u0438\u0437 MySQL \u0438\u043b\u0438 \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0432 C++17 <a href=\"https:\/\/en.cppreference.com\/w\/cpp\/memory\/monotonic_buffer_resource\">std::pmr::monotonic_buffer_resource<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"%D0%A1%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B5\" id=\"\u0421\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435\"><\/a><\/p>\n<h2>\u0421\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b<\/h2>\n<p><a class=\"anchor\" name=\"%D0%92%D1%8B%D0%B1%D0%BE%D1%802\" id=\"\u0412\u044b\u0431\u043e\u04402\"><\/a><\/p>\n<h3>\u0412\u044b\u0431\u043e\u0440<\/h3>\n<p>\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 third-party-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"99\" width=\"99\">\n<p align=\"left\"><strong>\u0411\u044b\u043b\u043e<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"193\" width=\"193\">\n<p align=\"left\"><strong>\u0421\u0442\u0430\u043b\u043e<\/strong><\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\"><strong>\u041f\u0440\u0438\u0440\u043e\u0441\u0442 EPS<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"99\" width=\"99\">\n<p align=\"left\"><a href=\"https:\/\/www.boost.org\/\">Boost<\/a><\/p>\n<\/td>\n<td data-colwidth=\"193\" width=\"193\">\n<p align=\"left\"><a href=\"https:\/\/www.akenotsuki.com\/misc\/srell\/en\/\">SRELL<\/a><\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">3%<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 <code>SRELL<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0411\u043e\u043d\u0443\u0441\u043e\u043c   \u0432\u044b\u043a\u0438\u043d\u0443\u043b\u0438 boost \u0438\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"99\" width=\"99\">\n<p align=\"left\"><a href=\"https:\/\/unicode-org.github.io\/icu\/\">ICU<\/a><\/p>\n<\/td>\n<td data-colwidth=\"193\" width=\"193\">\n<p align=\"left\"><a href=\"https:\/\/github.com\/simdutf\/simdutf\">simdutf<\/a><\/p>\n<p align=\"left\">\u00a0<\/p>\n<p align=\"left\">\u0421\u0432\u043e\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f case folding \u0434\u043b\u044f UTF-8<\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">3%<\/p>\n<p align=\"left\">\u00a0<\/p>\n<p align=\"left\">6%<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412   \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437.<\/p>\n<p>\u0421\u0432\u043e\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f case folding \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0442\u0430\u043a\u043e\u0432\u043e\u0439 \u0432 <code>simdutf<\/code>. \u041d\u0435\u043b\u044c\u0437\u044f \u0441\u043a\u0430\u0437\u0430\u0442\u044c (\u043f\u043e\u043a\u0430), \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 <code>ICU<\/code>, \u043d\u043e \u0442\u0443\u0442 \u043c\u044b \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u043c \u043d\u0430   \u043a\u044d\u0448\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"99\" width=\"99\">\n<p align=\"left\"><a href=\"https:\/\/rapidjson.org\/\">RapidJSON<\/a><\/p>\n<\/td>\n<td data-colwidth=\"193\" width=\"193\">\n<p align=\"left\"><a href=\"https:\/\/github.com\/simdjson\/simdjson\">simdjson<\/a><\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">3%<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0434\u0435\u0441\u044c   \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c, \u0447\u0442\u043e <code>simdjson <\/code>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 read-only   \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"99\" width=\"99\">\n<p align=\"left\"><a href=\"https:\/\/github.com\/jemalloc\/jemalloc\">jemalloc<\/a><\/p>\n<\/td>\n<td data-colwidth=\"193\" width=\"193\">\n<p align=\"left\"><a href=\"https:\/\/github.com\/gperftools\/gperftools\">tcmalloc<\/a><\/p>\n<\/td>\n<td data-colwidth=\"89\" width=\"89\">\n<p align=\"left\">6%<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0435\u043a\u043b\u0438\u043a\u0430\u0435\u0442\u0441\u044f   \u0441 \u043f\u0440\u043e\u0448\u043b\u044b\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u043c, \u043d\u043e \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043c\u0435\u0442\u0438\u0442, \u0447\u0442\u043e \u0442\u044f\u043d\u0443\u0442\u044c Boost \u0440\u0430\u0434\u0438 \u043e\u0434\u043d\u0438\u0445 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043e\u043a \u2014 \u044d\u0442\u043e \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0443\u0431\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u0440\u0430 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043a\u0443\u0432\u0430\u043b\u0434\u043e\u0439, \u043d\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u0440\u0435\u0446\u0435\u0434\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 \u0440\u0430\u0434\u0438 \u043f\u0430\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0437\u0430\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0434\u043e\u0440\u043e\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u0438, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439.<\/p>\n<p><a class=\"anchor\" name=\"%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5\" id=\"\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\"><\/a><\/p>\n<h3>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432\u044b\u0445\u043e\u0434 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0422\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044e 20231101\u00a0<a href=\"https:\/\/github.com\/google\/re2.git\">re2<\/a> \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 20220601 \u0434\u0430\u043b \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0432 1,5% \u043d\u0430 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u043e\u0432. <\/p>\n<p><a class=\"anchor\" name=\"%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B\" id=\"\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b\"><\/a><\/p>\n<h2>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p><a class=\"anchor\" name=\"%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F\" id=\"\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f\"><\/a><\/p>\n<h3>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c<\/h3>\n<p>\u041b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0437\u043d\u0430\u0435\u0442 \u043f\u0440\u043e <code>O(f(n))<\/code>, \u043e\u043d\u043e \u0436\u0435 \u00abO\u00bb \u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u0430 \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u043d\u0430 C \u0445\u043e\u0442\u044f \u0431\u044b \u0440\u0430\u0437 \u0432 \u0436\u0438\u0437\u043d\u0438 \u0432\u0438\u0434\u0435\u043b \u0446\u0438\u043a\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430.<\/p>\n<p><strong>\u0422\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0446\u0438\u043a\u043b<\/strong><\/p>\n<pre><code class=\"cpp\">#include &lt;string.h&gt;  \/\/ \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u0430\u0432\u0434\u0430\u043c\u0438 \u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0434\u0430\u043c\u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443, \/\/ \u0447\u0442\u043e \u0441 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c \u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 void foo(const char* __restrict const s) {     int dumb;      for(size_t i = 0; i &lt; strlen(s); ++i) { \/\/ \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \/\/ \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u043a\u0438\u043d\u0435\u0442 \u0446\u0438\u043a\u043b, \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0432 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c \/\/ \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0430\u043a\u0443\u044e \u0448\u0442\u0443\u043a\u0443 \/\/ \u0441\u043c. https:\/\/theunixzoo.co.uk\/blog\/2021-10-14-preventing-optimisations.html         asm volatile(\"\" : \"+m,r\"(dumb) : : \"memory\");  \/\/ \u0437\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0431\u044b\u0442\u044c printf(), sleep() \u0438\u043b\u0438 \u0432\u0430\u0448\u0430 \u0440\u0435\u043a\u043b\u0430\u043c\u0430     } } <\/code><\/pre>\n<p>\u0418\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u2014 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0442\u0440\u0443\u0434\u043e\u0435\u043c\u043a\u043e\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 <code>\u041e(N)<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u043a\u043e\u0434 \u0441\u0432\u0435\u0436\u0438\u043c GCC \u0441 <code>-O3<\/code> \u0438 \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u043d\u0430\u0441 \u0436\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435.<\/p>\n<p><strong>\u0428\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u043f\u0440\u0430\u0432\u0434\u0430<\/strong><\/p>\n<pre><code class=\"cpp\">foo(char const*):         push    r12         mov     r12, rdi         push    rbp         xor     ebp, ebp         push    rbx         jmp     .L2 .L3:         add     rbp, 1 .L2:         mov     rdi, r12         call    strlen         cmp     rbp, rax         jb      .L3         pop     rbx         pop     rbp         pop     r12         ret <\/code><\/pre>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0432\u044b\u043d\u043e\u0441\u0438\u0442 \u0440\u0430\u0441\u0447\u0435\u0442 <code>strlen()<\/code> \u043d\u0430\u0440\u0443\u0436\u0443 \u0446\u0438\u043a\u043b\u0430, \u0438 \u043c\u044b \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u043f\u0443\u0441\u0442\u0443\u044e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u0436\u0435 \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u0430.<\/p>\n<p><strong>\u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u2116\u00a02<\/strong><\/p>\n<pre><code class=\"cpp\">#include &lt;string.h&gt;   static size_t inline __attribute__((always_inline)) strlen2(const char* __restrict const s) {     const char *end;     for(end = s; *end; ++end);     return (size_t)(end - s); }  void foo(const char* __restrict const s) {     int dumb;  \/\/ strlen2 \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \/\/ \u0442\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u043c\u043e\u0433 \u0431\u044b \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u043b\u044f\u043c\u0431\u0434\u044b       for(size_t i = 0; i &lt; strlen2(s); ++i) {         asm volatile(\"\" : \"+m,r\"(dumb) : : \"memory\");     } }  \/\/ \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \/\/ foo(char const*): \/\/         xor     ecx, ecx \/\/         cmp     BYTE PTR [rdi], 0 \/\/         je      .L1 \/\/ .L9: \/\/         mov     rax, rdi \/\/ .L3: \/\/         add     rax, 1 \/\/         cmp     BYTE PTR [rax], 0 \/\/         jne     .L3 \/\/         sub     rax, rdi \/\/         cmp     rcx, rax \/\/         jnb     .L1 \/\/         add     rcx, 1 \/\/         cmp     BYTE PTR [rdi], 0 \/\/         jne     .L9 \/\/ .L1: \/\/         ret <\/code><\/pre>\n<p>\u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0440\u0443\u0434\u043e\u0435\u043c\u043a\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u041e(N<sup>2<\/sup>) \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043d\u0430 \u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043a\u043e\u0434, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u0434\u0435\u0440\u0435\u0432\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u0438\u043c \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u043c, \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u043c \u0432\u0435\u043b\u0438\u043a\u043e\u0439 \u0434\u0438\u043d\u0430\u0441\u0442\u0438\u0438 \u0426\u0438\u043d\u044c, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b \u043a \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044e \u0441\u0442\u0430\u0440\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u043f\u0430\u0440\u0443 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0441\u0435\u043a\u0443\u043d\u0434. <\/p>\n<p>\u0420\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e.<\/p>\n<p><strong>\u041b\u0443\u0447\u0448\u0435<\/strong><\/p>\n<pre><code class=\"cpp\">#include &lt;string.h&gt;  void foo(const char* s) {     int dumb;  \/\/ \u0432\u044b\u043d\u043e\u0441\u0438\u043c \u0434\u043b\u0438\u043d\u0443 \u043d\u0430\u0440\u0443\u0436\u0443 \u0441\u0430\u043c\u0438     const size_t len = strlen(s);     for(size_t i = 0; i &lt; len; ++i) {         asm volatile(\"\" : \"+m,r\"(dumb) : : \"memory\");     } }  \/\/ \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435   \/\/ foo(char const*): \/\/         push    rbx \/\/         call    strlen \/\/         test    rax, rax \/\/         je      .L1 \/\/         xor     edx, edx \/\/ .L3: \/\/         add     rdx, 1 \/\/         cmp     rax, rdx \/\/         jne     .L3 \/\/ .L1: \/\/         pop     rbx \/\/         ret <\/code><\/pre>\n<p><strong>\u041a\u0430\u043a \u0434\u0435\u043b\u0430\u044e\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u043a\u043e\u0432\u0431\u043e\u0438<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">#include &lt;string.h&gt;  void foo(const char* s) {     int dumb;  \/\/ \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0443 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0432\u0443\u0445     for(const char *p = s; *p; ++p) {         asm volatile(\"\" : \"+m,r\"(dumb) : : \"memory\");     } }  \/\/ \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435  \/\/ foo(char const*): \/\/         jmp     .L5 \/\/ .L3: \/\/         add     rdi, 1 \/\/ .L5: \/\/         cmp     BYTE PTR [rdi], 0 \/\/         jne     .L3 \/\/         ret <\/code><\/pre>\n<p><a class=\"anchor\" name=\"%D0%92%D1%8B%D0%B1%D0%BE%D1%803\" id=\"\u0412\u044b\u0431\u043e\u04403\"><\/a><\/p>\n<h3>\u0412\u044b\u0431\u043e\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>STL \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c <code>std::map<\/code> \u043f\u0440\u043e\u0442\u0438\u0432 <code>std::unordered_map<\/code>, \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0440\u0438 \u0432\u0441\u0435\u043c \u0443\u0432\u0430\u0436\u0435\u043d\u0438\u0438 \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043e\u043d\u0430, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u0442\u0430\u043b\u043e\u043d\u043e\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/jacksonallan.github.io\/c_cpp_hash_tables_benchmark\/\">\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u043c\u0438<\/a>.<\/p>\n<p>\u0422\u0430\u043a, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043f\u0430\u0440\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043d\u0430 5%, \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0432\u00a0<a href=\"https:\/\/en.cppreference.com\/w\/cpp\/container\/unordered_map\">std::unordered_map<\/a> \u043d\u0430 <a href=\"https:\/\/github.com\/martinus\/unordered_dense\">ankerl::unordered_dense::map<\/a>. \u042d\u0442\u043e \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0437\u0434\u0435, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p><a class=\"anchor\" name=\"%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\" id=\"\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\"><\/a><\/p>\n<h3>\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0438 MAC-\u0430\u0434\u0440\u0435\u0441\u043e\u043c.<\/p>\n<p><strong>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/strong><\/p>\n<pre><code class=\"cpp\">uint8_t *hwaddr_lookup(uint32_t ip, uint8_t *dst) { \/\/ \u0430 \u0437\u0434\u0435\u0441\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u0430\u043f\u0440\u043e\u0441 \u0447\u0435\u0440\u0435\u0437 netlink-\u0441\u043e\u043a\u0435\u0442 } <\/code><\/pre>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 ARP-\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 Linux \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 60 \u0441\u0435\u043a\u0443\u043d\u0434. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0434\u0435\u0440\u0433\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0430\u0434\u0440\u0435\u0441 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u2014 \u0432\u0435\u0434\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043e\u0442\u0432\u0435\u0442.<\/p>\n<p><strong>\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/strong><\/p>\n<pre><code class=\"cpp\">uint8_t *hwaddr_lookup(uint32_t ip, uint8_t *dst) { auto entry = cache.find(ip); if(entry != cache.end()) { \/\/ \u0437\u0430\u043f\u0438\u0441\u044c \u0435\u0441\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \/\/ \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0440\u043e\u0447\u0435\u043d\u0430  } \/\/ \u043d\u0435 \u043d\u0430\u0448\u043b\u0438, \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u041e\u0421 \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043a\u044d\u0448 } <\/code><\/pre>\n<p>\u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043d\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u0438 \u0432\u0437\u0430\u043c\u0435\u043d \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0440\u0443\u0433\u0443\u044e \u0433\u043e\u043b\u043e\u0432\u043d\u0443\u044e \u0431\u043e\u043b\u044c \u0432 \u0432\u0438\u0434\u0435 \u0438\u043d\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u043a\u044d\u0448\u0430, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"%D0%A1%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" id=\"\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\"><\/a><\/p>\n<h3>\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<p>\u041e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043a\u0438\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u043b\u0438 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0443 \u043a \u044d\u0442\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0431\u043e \u0432\u0441\u0435 \u0435\u0441\u0442\u044c \u0431\u0430\u0439\u0442\u044b \u0438 \u0432\u0441\u0435 \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0430. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c IP-\u0430\u0434\u0440\u0435\u0441.<\/p>\n<p><strong>\u041a\u0430\u043a \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b<\/strong><\/p>\n<pre><code class=\"cpp\">std::string ip_to_string(uint32_t address) { char buf[32]; sprintf(buf, \"%d.%d.%d.%d\", (address &gt;&gt; 24) &amp; 0xFF, (address &gt;&gt; 16) &amp; 0xFF, (address &gt;&gt; 8) &amp; 0xFF, address &amp; 0xFF); return std::string(buf); } <\/code><\/pre>\n<p>\u0414\u044d\u043d\u0438\u0435\u043b \u041b\u0435\u043c\u0438\u0440 <a href=\"https:\/\/lemire.me\/blog\/2023\/02\/01\/serializing-ips-quickly-in-c\/\">\u0432 \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u043a\u0438\u043d\u0443\u0442\u044c \u0438\u0445 \u0432 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a.<\/p>\n<p><strong>\u041a\u043e\u0434 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430<\/strong><\/p>\n<pre><code class=\"cpp\">#include &lt;string&gt; #include &lt;cstring&gt; #include &lt;charconv&gt;  #include &lt;arpa\/inet.h&gt; #include &lt;stdio.h&gt;  #include &lt;benchmark\/benchmark.h&gt;  constexpr auto ADDRESS_START = 0xFA002200; constexpr auto ADDRESS_END = 0xFA0022FF;  void ip_serialize_sprintf(benchmark::State&amp; state) {     for (auto _ : state) {         for(auto address = ADDRESS_START; address &lt; ADDRESS_END; ++address) {             char buf[32];             sprintf(buf, \"%d.%d.%d.%d\", (address &gt;&gt; 24) &amp; 0xFF, (address &gt;&gt; 16) &amp; 0xFF,                     (address &gt;&gt; 8) &amp; 0xFF, address &amp; 0xFF);             std::string output(buf);         }     } } BENCHMARK(ip_serialize_sprintf);  void ip_serialize_inet_ntoa(benchmark::State&amp; state) {     for (auto _ : state) {         for(auto address = ADDRESS_START; address &lt; ADDRESS_END; ++address) {                 struct in_addr ip_addr;                 ip_addr.s_addr = address;                 std::string output(inet_ntoa(ip_addr));         }     } } BENCHMARK(ip_serialize_inet_ntoa);  void ip_serialize_simple(benchmark::State&amp; state) {     for (auto _ : state) {         for(auto address = ADDRESS_START; address &lt; ADDRESS_END; ++address) {             std::string output = std::to_string(address &gt;&gt; 24);             for (int i = 2; i &gt;= 0; i--) {                 output.append(std::to_string((address &gt;&gt; (i * 8)) % 256) + \".\");             }         }     } } BENCHMARK(ip_serialize_simple);  void ip_serialize_advanced(benchmark::State&amp; state) {     for (auto _ : state) {         for(auto address = ADDRESS_START; address &lt; ADDRESS_END; ++address) {             std::string output(4 * 3 + 3, '\\0'); \/\/ allocate just one big string             char *point = output.data();             char *point_end = output.data() + output.size();             point = std::to_chars(point, point_end, uint8_t(address &gt;&gt; 24)).ptr;             for (int i = 2; i &gt;= 0; i--) {                  *point++ = '.';                  point = std::to_chars(point, point_end, uint8_t(address &gt;&gt; (i * 8))).ptr;             }             output.resize(point - output.data());         }     } } BENCHMARK(ip_serialize_advanced);  void ip_serialize_bulk(benchmark::State&amp; state) {     constexpr static const char *lookup =         \".0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .10 .11 .12 .13 .14 .15 .16 .17 \"         \".18 .19 .20 .21 .22 .23 .24 .25 .26 .27 .28 .29 .30 .31 .32 .33 .34 .35 \"         \".36 .37 .38 .39 .40 .41 .42 .43 .44 .45 .46 .47 .48 .49 .50 .51 .52 .53 \"         \".54 .55 .56 .57 .58 .59 .60 .61 .62 .63 .64 .65 .66 .67 .68 .69 .70 .71 \"         \".72 .73 .74 .75 .76 .77 .78 .79 .80 .81 .82 .83 .84 .85 .86 .87 .88 .89 \"         \".90 .91 .92 .93 .94 .95 .96 .97 .98 .99 \"         \".100.101.102.103.104.105.106.107.108.109.110.111.112.113.114.115.116.\"         \"117.118.119.120.121.122.123.124.125.126.127.128.129.130.131.132.133.134.\"         \"135.136.137.138.139.140.141.142.143.144.145.146.147.148.149.150.151.152.\"         \"153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.\"         \"171.172.173.174.175.176.177.178.179.180.181.182.183.184.185.186.187.188.\"         \"189.190.191.192.193.194.195.196.197.198.199.200.201.202.203.204.205.206.\"         \"207.208.209.210.211.212.213.214.215.216.217.218.219.220.221.222.223.224.\"         \"225.226.227.228.229.230.231.232.233.234.235.236.237.238.239.240.241.242.\"         \"243.244.245.246.247.248.249.250.251.252.253.254.255\";     for (auto _ : state) {         for(auto address = ADDRESS_START; address &lt; ADDRESS_END; ++address) {             std::string output(4 * 3 + 3, '\\0');             char *point = output.data();             uint8_t by;             by = address &gt;&gt; 24;             std::memcpy(point, lookup + by * 4 + 1, 4);             point += (by &lt; 10) ? 1 : (by &lt; 100 ? 2 : 3);             by = address &gt;&gt; 16;             std::memcpy(point, lookup + by * 4, 4);             point += (by &lt; 10) ? 2 : (by &lt; 100 ? 3 : 4);             by = address &gt;&gt; 8;             std::memcpy(point, lookup + by * 4, 4);             point += (by &lt; 10) ? 2 : (by &lt; 100 ? 3 : 4);             by = address &gt;&gt; 0;             std::memcpy(point, lookup + by * 4, 4);             point += (by &lt; 10) ? 2 : (by &lt; 100 ? 3 : 4);             output.resize(point - output.data());         }     } } BENCHMARK(ip_serialize_bulk);  BENCHMARK_MAIN(); <\/code><\/pre>\n<p><strong>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/strong><\/p>\n<pre><code class=\"cpp\">----------------------------------------------------------------- Benchmark                       Time             CPU   Iterations ----------------------------------------------------------------- ip_serialize_sprintf        26973 ns        26971 ns        25955 ip_serialize_inet_ntoa      27929 ns        27925 ns        25338 ip_serialize_simple         13911 ns        13910 ns        50322 ip_serialize_advanced        1872 ns         1872 ns       374777 ip_serialize_bulk            1587 ns         1587 ns       440684 <\/code><\/pre>\n<p>\u0418\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\/\u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0435 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b \u0438 \u0443\u0436\u0435 \u0440\u0435\u0448\u0430\u043b\u0438\u0441\u044c \u043a\u0435\u043c-\u0442\u043e \u0435\u0449\u0435. \u0414\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u0443\u0434\u044c \u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u043b\u0438 \u0432\u0440\u0435\u043c\u044f \u0441 \u0434\u0430\u0442\u043e\u0439, \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0432\u044b\u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><a class=\"anchor\" name=\"%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\" id=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\"><\/a><\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 std::pair \u0438 std::tuple<\/h3>\n<p>\u042d\u0442\u0430 \u043c\u044b\u0441\u043b\u044c \u0431\u044b\u043b\u0430 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0430\u00a0<a href=\"https:\/\/squidex.jugru.team\/api\/assets\/srm\/7gIeNhluN01z7UI5jBJiGk\/danila-kutenin-c-stl-best-and-worst-performance-features-and-how-to-learn-from-them-2020-06-30-17-59-56.pdf\">\u0432 \u0434\u043e\u043a\u043b\u0430\u0434\u0435<\/a> \u0414\u0430\u043d\u0438\u043b\u044b \u041a\u0443\u0442\u0435\u043d\u0438\u043d\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u043e\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c, \u0442\u0430\u043a \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432, \u0437\u0430\u0431\u043e\u0442\u043b\u0438\u0432\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u044d\u0442\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b.<\/p>\n<p><strong>\u041a\u043e\u0434 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430<\/strong><\/p>\n<pre><code class=\"cpp\">#include &lt;benchmark\/benchmark.h&gt;  constexpr size_t VECTOR_SIZE = 1000000;  struct pair_s {     int a = 0;     int b = 0; };  void copy_std_tuple(benchmark::State&amp; state) {     std::vector&lt;std::tuple&lt;int, int&gt;&gt; v_std_tuple(VECTOR_SIZE);     decltype(v_std_tuple) tmp;      for (auto _ : state) {         tmp = v_std_tuple;         benchmark::DoNotOptimize(tmp);     } } BENCHMARK(copy_std_tuple);  void copy_std_pair(benchmark::State&amp; state) {     std::vector&lt;std::pair&lt;int, int&gt;&gt; v_std_pair(VECTOR_SIZE);     decltype(v_std_pair) tmp;      for (auto _ : state) {         tmp = v_std_pair;         benchmark::DoNotOptimize(tmp);     } } BENCHMARK(copy_std_pair);  void copy_pair_s(benchmark::State&amp; state) {     std::vector&lt;pair_s&gt; v_stuct(VECTOR_SIZE);     decltype(v_stuct) tmp;      for (auto _ : state) {         tmp = v_stuct;         benchmark::DoNotOptimize(tmp);     } } BENCHMARK(copy_pair_s);  BENCHMARK_MAIN(); <\/code><\/pre>\n<p><strong>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">Run on (16 X 800 MHz CPU s)                                                                                                                                                                                                              CPU Caches:                                                                                                                                                                                                                                L1 Data 48 KiB (x8)                                                                                                                                                                                                                      L1 Instruction 32 KiB (x8)                                                                                                                                                                                                               L2 Unified 512 KiB (x8)                                                                                                                                                                                                                  L3 Unified 16384 KiB (x1)                                                                                                                                                                                                              Load Average: 0.43, 0.89, 1.01                                                                                                                                                                                                           ---------------------------------------------------------                                                                                                                                                                                Benchmark               Time             CPU   Iterations                                                                                                                                                                                ---------------------------------------------------------                                                                                                                                                                                copy_std_tuple     359752 ns       359459 ns         1946 copy_std_pair      358388 ns       358253 ns         1946 copy_pair_s        281680 ns       280752 ns         2491 <\/code><\/pre>\n<p>\u0418\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430 22%, \u0438 \u0435\u0441\u043b\u0438 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043a\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043f\u043e\u043b\u044f \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0445, \u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>std::pair<\/code> \u0438\u043b\u0438 <code>std::tuple<\/code>. \u041f\u043e\u043c\u0438\u043c\u043e \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u0430 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0438 \u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u0432\u0435\u0434\u044c, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044f \u0432 \u0434\u0435\u0441\u044f\u0442\u044b\u0439 \u0440\u0430\u0437 \u043f\u043e\u0434\u0440\u044f\u0434 <code>data.first.second.second.first<\/code>, \u043f\u043e\u043d\u0435\u0432\u043e\u043b\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0448\u044c \u043c\u0435\u0447\u0442\u0430\u0442\u044c \u043e \u044f\u0434\u0435\u0440\u043d\u043e\u043c \u0430\u043f\u043e\u043a\u0430\u043b\u0438\u043f\u0441\u0438\u0441\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442 \u0432\u0441\u0435 \u0436\u0438\u0432\u043e\u0435 \u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442 \u044d\u0442\u043e\u0442 \u0431\u0435\u0437\u0443\u043c\u043d\u044b\u0439 \u043a\u043e\u0448\u043c\u0430\u0440.<\/p>\n<p><a class=\"anchor\" name=\"%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5\" id=\"\u041c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0435\"><\/a><\/p>\n<h2>\u041c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h2>\n<p><a class=\"anchor\" name=\"%D0%97%D0%B0%D0%B1%D1%8B%D1%82%D1%8B%D0%B5\" id=\"\u0417\u0430\u0431\u044b\u0442\u044b\u0435\"><\/a><\/p>\n<h3>\u0417\u0430\u0431\u044b\u0442\u044b\u0435 \u0438 \u043b\u0438\u0448\u043d\u0438\u0435 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u044b<\/h3>\n<p>\u0411\u0430\u043d\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u0444\u0430\u043a\u0442: \u0438\u043d\u043e\u0433\u0434\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u043d \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u0441\u044f, \u0438 \u043c\u044c\u044e\u0442\u0435\u043a\u0441 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u043c, \u043d\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0434\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u043c \u0431\u044b\u043b\u043e\u0439 \u044d\u043f\u043e\u0445\u0438, \u0431\u0443\u0434\u0443\u0447\u0438 \u0437\u0430\u0431\u044b\u0442\u044b\u043c \u0438\u043b\u0438 \u00ab\u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u00bb.<\/p>\n<p>\u0414\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u043a\u043e\u0433\u0434\u0430 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c \u0437\u0430\u0449\u0438\u0449\u0430\u044e\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0438\u043c \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u044b: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/www.boost.org\/doc\/libs\/?view=category_concurrent\">boost::concurrent::*<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"%D0%A0%D0%B0%D0%B7%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0\" id=\"\u0420\u0430\u0437\u0433\u0440\u0443\u0437\u043a\u0430\"><\/a><\/p>\n<h3>\u0420\u0430\u0437\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u0439<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432, \u043d\u043e \u043e\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0435\u0448\u0435\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c.<\/p>\n<p><strong>\u041f\u043b\u043e\u0445\u043e<\/strong><\/p>\n<pre><code class=\"cpp\">void recv() {     \/\/ \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u044e\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f     \/\/ \u0432 \u043e\u0434\u043d\u0443 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u0443\u044e \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u044c      std::unique_lock&lt;std::mutex&gt; lock{ queue_mutex }; queue.push(msq); if(queue.size() &gt; QUEUE_SIZE_MAX) { \/\/ \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \/\/ \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u0447\u043a\u0443  notify_sender(); } }  void send() { \/\/ \u041e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a-\u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438     std::unique_lock&lt;std::mutex&gt; lock{ queue_mutex }; \/\/ \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 auto all = queue.get_everything(); \/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u0447\u043a\u0443 \u0434\u0430\u043b\u044c\u0448\u0435 xmit(all); } <\/code><\/pre>\n<p>\u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0435\u0439. \u041f\u0440\u043e\u0441\u0442\u0430\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c +10\u201315% \u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><strong>\u041b\u0443\u0447\u0448\u0435<\/strong><\/p>\n<pre><code class=\"cpp\">void recv() {     \/\/ \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u0443\u044e\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f     \/\/ \u0432 \u043e\u0434\u043d\u0443 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u0443\u044e \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u044c      std::unique_lock&lt;std::mutex&gt; lock{ queue_mutex }; queue.push(msq); if(queue.size() &gt; QUEUE_SIZE_MAX) { \/\/ \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \/\/ \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u043f\u0430\u0447\u043a\u0443  notify_sender(); } }  void send() { \/\/ \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a-\u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 auto all = [&amp;queue]() {     std::unique_lock&lt;std::mutex&gt; lock{ queue_mutex }; \/\/ \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \/\/ \u0438 \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043c\u044c\u044e\u0442\u0435\u043a\u0441 return queue.get_everything(); }(); \/\/ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u0447\u043a\u0443 \u0434\u0430\u043b\u044c\u0448\u0435 \/\/ \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 xmit(all); } <\/code><\/pre>\n<p>\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0438\u0434\u0438\u043e\u043c\u0430\u00a0<a href=\"https:\/\/en.cppreference.com\/w\/cpp\/language\/raii\">RAII<\/a> \u0434\u043b\u044f \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u0432 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0440\u043e\u043c. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u043e \u0434\u0435\u0434\u043b\u043e\u043a\u0430\u0445, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0438\u0441\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0435\u043a\u0446\u0438\u044e \u0442\u043e, \u0447\u0435\u043c\u0443 \u0442\u0430\u043c, \u0432 \u043e\u0431\u0449\u0435\u043c-\u0442\u043e, \u043d\u0435 \u043c\u0435\u0441\u0442\u043e.<\/p>\n<p><a class=\"anchor\" name=\"%D0%9D%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D1%8B%D0%B5\" id=\"\u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435\"><\/a><\/p>\n<h3>\u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043a\u043e\u043f\u0438\u0438, \u0448\u0430\u0440\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 shared mutex<\/h3>\n<p>\u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 read-write-\u043c\u044c\u044e\u0442\u0435\u043a\u0441, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043a\u0430\u043a <code>std::shared_mutex<\/code> \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0432 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u043e, \u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0440\u0435\u0434\u043a\u043e, \u043a\u0430\u043a, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u043d\u0435\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 MAC-\u0430\u0434\u0440\u0435\u0441\u043e\u0432.<\/p>\n<p>\u0414\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0448\u0430\u0440\u0434\u0438\u043d\u0433, \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 \u043f\u043e\u0434\u0435\u043b\u0435\u043d \u043d\u0430 \u043a\u0443\u0441\u043a\u0438, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u0449\u0438\u0449\u0435\u043d \u0441\u0432\u043e\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c. \u041f\u043e\u0442\u043e\u043a, \u043e\u0431\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u0443, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0441 \u043a\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0448\u0430\u0440\u0434\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e. \u041c\u0438\u043d\u0443\u0441\u043e\u043c \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0432\u043e\u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u0448\u0430\u0440\u0434\u0438\u043d\u0433.<\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433 <code>MEM_ROOT<\/code> \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430, \u0442\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u0442\u043e\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0441\u0432\u043e\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438 \u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u044c\u044e\u0442\u0435\u043a\u0441.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bbb\/2ee\/183\/bbb2ee183800f4f25521a1ad3ad61dc8.png\" alt=\"\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u0432\u043e\u0439 MEMROOT\" title=\"\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u0432\u043e\u0439 MEMROOT\" width=\"658\" height=\"95\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bbb\/2ee\/183\/bbb2ee183800f4f25521a1ad3ad61dc8.png\"\/><\/p>\n<div><figcaption>\u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u0432\u043e\u0439 MEMROOT<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435\u0440\u0435\u0434\u043a\u043e \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/en.cppreference.com\/w\/cpp\/keyword\/thread_local\">thread_local<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 <a href=\"http:\/\/david-grs.github.io\/tls_performance_overhead_cost_linux\/\">\u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u0435\u043d<\/a>, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0444\u043b\u0435\u0439\u043c\u0433\u0440\u0430\u0444\u0430\u0445. \u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 <code>thread_local<\/code> \u0432 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043d\u0430\u0434 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0432 \u043d\u0430\u0448\u0438\u0445 \u043a\u0435\u0439\u0441\u0430\u0445 \u0434\u0430\u0432\u0430\u043b +1% \u043a \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441\u0443.<\/p>\n<p><a class=\"anchor\" name=\"%D0%97%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\" id=\"\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\"><\/a><\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041a\u0430\u043a \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u043c\u0441\u044f \u0435\u0449\u0435 \u043d\u0435 \u0440\u0430\u0437, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u044b \u043a \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0435 \u0438\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0423\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0436\u0435 \u043e\u0434\u043d\u0438\u0445 \u044d\u0442\u0438\u0445 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435\u043f\u043e\u0441\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430 \u043d\u0430\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c \u0434\u0430\u0432\u0430\u043b\u043e \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043e\u0442 30% \u0434\u043e 50% \u043f\u0440\u0438\u0440\u043e\u0441\u0442\u0430 EPS. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435 \u043d\u0435 \u0441\u0442\u0443\u043f\u0430\u043b\u0430 \u043d\u043e\u0433\u0430 \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0446\u0438\u0444\u0440\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0430, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0432 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u043a\u0435\u0439\u0441\u044b \u0438 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0434\u0430\u0432\u0430\u044f\u0441\u044c \u0432 \u043d\u044e\u0430\u043d\u0441\u044b \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0443 \u043a\u043e\u0433\u043e-\u0442\u043e \u0438\u0437 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u043c\u0435\u043b\u044c\u043a\u043d\u0443\u043b \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0432\u044c\u0435\u0442\u043d\u0430\u043c\u0441\u043a\u0438\u0439 \u0444\u043b\u0435\u0448\u0431\u044d\u043a, \u0430 \u0432 \u0433\u043e\u043b\u043e\u0432\u0435 \u2014 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u0442\u043e\u0438\u043b\u043e \u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e, \u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430\u0435\u0434\u0438\u043d\u0435 \u0441 \u0441\u043e\u0431\u043e\u0439, \u043c\u0438\u043b\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0438\u043c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/867146\/\"> https:\/\/habr.com\/ru\/articles\/867146\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p><em>                                                                                     \u2014 Are there a lot of these kinds of accidents? <\/em><br \/>                                                                                                                       <em>\u2014 You wouldn&#8217;t believe. <\/em><br \/>                                                                                              <em>\u2014 Which car company do you work for? <\/em><br \/>                                                                                                                                     <em>\u2014 A major one.<\/em><\/p>\n<p>                                                                                                                                           (Fight Club)<\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0430\u0432\u0435\u043b \u041f\u0440\u0435\u0431\u043b\u0430\u0433\u0438\u043d, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 Positive Technologies. \u041c\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438 \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0438\u0437\u043d\u0443\u0442\u0440\u0438. \u041a\u0430\u043a \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0430\u0448\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u0440\u043e\u0435\u043a\u0442\u043d\u0430\u044f: \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b, \u043a\u0440\u043e\u043c\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041e\u0431\u044b\u0447\u043d\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0442\u0434\u0435\u043b\u043e\u0432 \u043f\u0440\u0438\u043d\u043e\u0441\u044f\u0442 \u043d\u0430\u043c \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u044e \u0431\u0430\u0437\u0443, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 C++, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u0431\u044b\u0441\u0442\u0440\u043e, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u043e. \u041c\u044b \u0432 \u043e\u0442\u0432\u0435\u0442 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u043c \u0438\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430\u043c\u0435\u0440\u043e\u0432, \u043f\u0430\u0442\u0447\u0438 \u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438.<\/p>\n<p>\u0425\u043e\u0442\u044f \u043d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u043b\u043e\u0434\u0430\u044f, \u043c\u044b \u0443\u0436\u0435 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0442\u0430\u043a\u0438\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c \u0438 \u043d\u0430\u043d\u0435\u0441\u0442\u0438 \u043d\u0435\u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043c\u0443\u044e \u043f\u043e\u043b\u044c\u0437\u0443. \u0412\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0440\u0430\u0437\u043d\u044b\u0435 \u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c, \u043d\u043e \u043c\u044b \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438\u0441\u044c \u0432 \u0442\u043e\u0439 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0432\u0435\u0437\u0434\u0435, \u043d\u043e\u0441\u0438\u043b\u0438 \u043e\u0431\u0449\u0438\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440, \u0430 \u0440\u0435\u0448\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0438 \u043f\u043e\u0440\u043e\u0439 \u0431\u0435\u0437 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u044b\u0445 \u0443\u0441\u0438\u043b\u0438\u0439. \u0426\u0435\u043b\u044c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u0434\u0431\u043e\u0440\u043a\u0443 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u043c\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c\u0438 \u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041a\u0435\u0439\u0441\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0433\u043b\u0443\u043f\u044b\u043c\u0438, \u043d\u043e \u0444\u0430\u043a\u0442 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u043a\u0442\u043e\u043c: \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043c\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u0441\u0442\u0432\u043e\u043c \u0438 \u0432\u0438\u0434\u0435\u043b\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f\u0445, \u0435\u0449\u0435 \u0434\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u0432 \u041f\u043e\u0437\u0438\u0442\u0438\u0432.<\/p>\n<p>\u041f\u0440\u043e\u0435\u043a\u0442\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438, \u2014 \u044d\u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0431\u0443\u0434\u044c \u0442\u043e \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0436\u0443\u0440\u043d\u0430\u043b\u0430 \u0438\u043b\u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0434\u043b\u044f \u043d\u0430\u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432 EPS, \u043e\u043d\u0438 \u0436\u0435 events per second, \u043e\u043d\u0438 \u0436\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0415\u0441\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u043f\u043e \u0445\u043e\u0434\u0443 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0440\u043e\u0441\u043b\u0430 \u043d\u0430 10%, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0430 10% \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043a\u0435\u0439\u0441\u043e\u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u044b \u0434\u043e \u043d\u0430\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044e \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0415\u0441\u043b\u0438 \u043a\u043e\u043c\u0443-\u0442\u043e \u0432\u0441\u0435 \u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u044b\u0440\u043d\u0443\u0442\u044c \u0432 \u043d\u0438\u0445 \u0441 \u0433\u043e\u043b\u043e\u0432\u043e\u0439, \u043d\u0430\u0448\u0438 \u0434\u043e\u0431\u0440\u044b\u0435 \u0438 \u043f\u0440\u0438\u0432\u0435\u0442\u043b\u0438\u0432\u044b\u0435 HR \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0434\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0430\u0448\u0435 \u0440\u0435\u0437\u044e\u043c\u0435.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c-\u0441.<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u0441\u0442\u0430\u0442\u044c\u0435<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><a href=\"#%D0%9B%D0%BE%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%98%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B5\">\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0435 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%9B%D0%BE%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B2\">\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u044f\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a \u0432\u044b\u0432\u043e\u0434\u0443 \u0432 \u043b\u043e\u0433 \u0431\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e <\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%92%D1%8B%D0%B1%D0%BE%D1%80\">\u0412\u044b\u0431\u043e\u0440 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%98%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5\">\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%A3%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5\">\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%A1%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B5\">\u0421\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b <\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%92%D1%8B%D0%B1%D0%BE%D1%802\">\u0412\u044b\u0431\u043e\u0440<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5\">\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 <\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%92%D1%8B%D0%B1%D0%BE%D1%803\">\u0412\u044b\u0431\u043e\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%A1%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\">\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 std::pair \u0438 std::tuple<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5\">\u041c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#%D0%97%D0%B0%D0%B1%D1%8B%D1%82%D1%8B%D0%B5\">\u0417\u0430\u0431\u044b\u0442\u044b\u0435 \u0438 \u043b\u0438\u0448\u043d\u0438\u0435 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%A0%D0%B0%D0%B7%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0\">\u0420\u0430\u0437\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D0%9D%D0%B5%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D1%8B%D0%B5\">\u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u043a\u043e\u043f\u0438\u0438, \u0448\u0430\u0440\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 shared mutex<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%97%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<p><a class=\"anchor\" name=\"%D0%9B%D0%BE%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5\" id=\"\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\">\u0432\u0430\u043d\u0438\u0435&#187;<\/a><\/p>\n<h2>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p><a class=\"anchor\" name=\"%D0%98%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D0%B5\" id=\"\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0435\">\u0447\u043d\u043e\u0435&#187;><\/a><\/p>\n<h3>\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0435 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u043c, \u0442\u0435\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c.<\/p>\n<p><strong>\u041f\u043b\u043e\u0445\u043e<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">int upper_level(char *data, size_t sz) {     \/\/ \u0447\u0442\u043e-\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430     LOG_INFO(\"Going to do lower_level() with data {}\", data);     LOG_INFO(\"Size {}\", sz);      status = lower_level(data, sz);     LOG_INFO(\"Status {}\", status); \u00a0   \/\/ \u0438 \u0447\u0442\u043e-\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 }  int lower_level(void *data, size_t sz) { \u00a0\u00a0\u00a0 LOG_INFO(\"Data pointer is {}\", data);     \/\/ \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u0447\u0442\u043e \u0432\u0435\u043b\u0438\u043a\u043e\u0435     LOG_INFO(\"Data size {}\", sz } <\/code><\/pre>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0430\u0443\u0434\u0438\u0442\u0443, \u0438\u043b\u0438 \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u044c \u2014 \u0441\u0435\u0441\u0442\u0440\u0430 \u0442\u0430\u043b\u0430\u043d\u0442\u0430.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e\/\u043d\u0438\u0436\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u044b\u0432\u043e\u0434 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043b\u043e\u0433\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435, \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u044f\u0432\u043d\u043e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0434\u0432\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432 \u043e\u0434\u043d\u043e. \u041e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0445, \u0438 \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043b\u043e\u0433.<\/p>\n<p>\u0412-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c severity \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435, \u043d\u043e \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043f\u043e \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0441\u0442\u0438 \u2014 \u0440\u0435\u0448\u0438\u0442\u044c, \u043d\u0443\u0436\u043d\u044b \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u043e\u0433\u0438 \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0430\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0435\u0433\u043e \u0436\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0438 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u043e\u043d\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c, \u043a\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0433\u043e\u0442\u043e\u0432. \u041f\u043e\u0440\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 <code>assert()<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u0447\u0435\u0437\u0430\u0442\u044c \u0432 \u0440\u0435\u043b\u0438\u0437\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043a\u0430\u0445.<\/p>\n<p><strong>\u041b\u0443\u0447\u0448\u0435<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">int upper_level(char *data, size_t sz) {      \/\/ \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u044d\u0442\u043e\u0442 \u043b\u043e\u0433, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0443\u0436\u043d\u043e     LOG_DEBUG(\"Doing lower_level(), size {}, data {}\", data_size, data);      status = lower_level(data, data_size);     \/\/ \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0434\u043a\u043e, \u0430 \u0435\u0441\u043b\u0438 \u0441\u043b\u0443\u0447\u0438\u043b\u0438\u0441\u044c,     \/\/ \u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0443\u0436\u0435 \u043d\u0435 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u043b\u0430\u043d\u0435     if(status != SUCCESS) {         LOG_ERROR(\"lower_level() failed with status {} for {}\", status, data);     }  }  int lower_level(void *data, size_t sz) {  \/\/ \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u043c \u0442\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \/\/ \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c assert(data != nullptr);     \/\/ \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0422\u041e\u041b\u042c\u041a\u041e \u043d\u0435\u0447\u0442\u043e \u0432\u0435\u043b\u0438\u043a\u043e\u0435  } <\/code><\/pre>\n<p><a class=\"anchor\" name=\"%D0%9B%D0%BE%D0%B3%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B2\" id=\"\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\">\u0430\u043d\u0438\u0435 \u0432&#187;<\/a><\/p>\n<h3>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u044f\u0445<\/h3>\n<p>\u0422\u043e, \u0447\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u044f\u043c\u043e \u0437\u0434\u0435\u0441\u044c \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0438\u0441\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u044b \u0432 \u0444\u0430\u0439\u043b, \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u042d\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u00ab\u043c\u044c\u044e\u0442\u0435\u043a\u0441 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c \u043f\u043e\u0433\u043e\u043d\u044f\u0435\u0442\u00bb, \u0438 \u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u0436\u0435 \u0432 \u0442\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u0434 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p><strong>\u041f\u043b\u043e\u0445\u043e<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">void some_sync_function() {     std::unique_lock&lt;std::mutex&gt; lock{ some_mutex };     \/\/ \u0447\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u0449\u0438\u0442\u044b \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438     LOG_TRACE(\"Critical section done!\") } <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0442\u043e \u043b\u0443\u0447\u0448\u0435 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0432\u044b\u0439\u0434\u044f \u0438\u0437 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438.<\/p>\n<p><strong>\u041b\u0443\u0447\u0448\u0435<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">void some_sync_function() {     {     std::unique_lock&lt;std::mutex&gt; lock{ some_mutex }; \/\/ \u0447\u0442\u043e-\u0442\u043e, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0437\u0430\u0449\u0438\u0442\u044b \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \/\/ \u0438 \u0432\u044b\u0434\u043e\u0445\u043d\u0443\u043b\u0438, \u043e\u0442\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043c\u044c\u044e\u0442\u0435\u043a\u0441 } \/\/ \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u0430 \u0438\u043b\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0435 \u0442\u043e\u0433\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0433\u043e LOG_TRACE(\"Critical section done!\"); } <\/code><\/pre>\n<p>\u0412\u044b\u043d\u043e\u0441 \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437-\u043f\u043e\u0434 \u043c\u044e\u0442\u0435\u043a\u0441\u0430 \u0434\u0430\u043b +10% \u043a \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441\u0443 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p><a class=\"anchor\" name=\"%D0%9F%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0\" id=\"\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430\">\u043e\u0432\u043a\u0430&#187;><\/a><\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a \u0432\u044b\u0432\u043e\u0434\u0443 \u0432 \u043b\u043e\u0433 \u0431\u0435\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043d\u0430\u0439\u0434\u0435\u0442\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u0434\u043d\u0430\u0436\u0434\u044b \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u043b\u0433\u0438\u0445 \u0440\u0430\u0437\u0434\u0443\u043c\u0438\u0439 \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043d\u0430\u0431\u0440\u0430\u043b\u0441\u044f \u0441\u043c\u0435\u043b\u043e\u0441\u0442\u0438, \u0438 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u041f\u043e\u0445\u043e\u0436\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432 \u043a\u043e\u0434\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a \u0432\u044b\u0432\u043e\u0434\u0443 \u0432 \u043b\u043e\u0433: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 JSON \u0432 \u0441\u0442\u0440\u043e\u043a\u0443, \u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c.<\/p>\n<p><strong>\u041f\u043b\u043e\u0445\u043e<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">void debug(std::string_view s) {     \/\/ \u043c\u043e\u0436\u0435\u0442, \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c; \u043c\u043e\u0436\u0435\u0442, \u043d\u0435 \u0431\u0443\u0434\u0435\u043c     if(debug_log_level &gt;= current_log_level) {         \/\/ \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0443\u0434\u0430-\u0442\u043e \u043f\u0438\u0448\u0435\u043c     } }  void do_something_with_json() {     \/\/ \u0437\u0434\u0435\u0441\u044c \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f JSON     \/\/ \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0443     auto s = json.to_string(); \/\/ \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u0434\u043b\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0438 debug(\"JSON is \" + s);     \/\/ \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u044c\u0448\u0435  } <\/code><\/pre>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u043c\u0435\u0442\u043e\u0434 <code>json.to_string()<\/code>, \u043a\u0430\u043a \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0431\u0443\u0434\u0435\u043c \u043b\u0438 \u043c\u044b \u0447\u0442\u043e-\u0442\u043e \u043a\u0443\u0434\u0430-\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043b\u0438 \u043d\u0435\u0442. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u043e\u043d\u0438, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0432\u043f\u0443\u0441\u0442\u0443\u044e.<\/p>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u043a\u0440\u043e\u0441\u044b (\u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0434\u0443\u0442 \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439) \u0438 \u0438\u0437\u0431\u0430\u0432\u0438\u0432\u0448\u0438\u0441\u044c \u043e\u0442 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.<\/p>\n<p><strong>\u041b\u0443\u0447\u0448\u0435<\/strong>\u00a0<\/p>\n<pre><code class=\"cpp\">#define LOG_DEBUG if(debug_log_level &gt;= current_log_level) { \/\/ \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043a\u0443\u0434\u0430-\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0438\u0448\u0435\u043c \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b }  void do_something_with_json() {     \/\/ \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 \u0432\u044b\u0448\u0435, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043d\u043e\u0432\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u043a\u0430 \u0435\u0449\u0435 \u043d\u0435\u0442      LOG_DEBUG(\"JSON is \" + json.to_string());     \/\/ \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u044c\u0448\u0435, \u043d\u043e \u0443\u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 } <\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0432\u0435\u0434\u0435\u0442\u0441\u044f, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0432 \u0441 \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 +5% \u043a \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u043c\u0443 EPS.<\/p>\n<p><a class=\"anchor\" name=\"%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0\" id=\"\u0420\u0430\u0431\u043e\u0442\u0430\">\u0442\u0430&#187;><\/a><\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/h2>\n<p><a class=\"anchor\" name=\"%D0%92%D1%8B%D0%B1%D0%BE%D1%80\" id=\"\u0412\u044b\u0431\u043e\u0440\">\u043e\u0440&#187;<\/a><\/p>\n<h3>\u0412\u044b\u0431\u043e\u0440 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430<\/h3>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c. \u0410\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u0435\u043d \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043d\u043e \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435 \u0441\u0430\u043c\u044b\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0433\u043d\u0430\u0432 \u043c\u0438\u043a\u0440\u043e\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0442\u0438\u043f\u043e\u0432\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043c\u0438\u043a\u0440\u043e\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <code>tcmalloc<\/code> \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430 \u0432 \u043f\u044f\u0442\u044c \u0440\u0430\u0437. \u042d\u0442\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0441\u044f \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0412 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u044d\u0442\u043e\u0442 \u0433\u0440\u0430\u0444\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u043d\u043e \u0432 \u043e\u0431\u0449\u0435\u043c \u0438 \u0446\u0435\u043b\u043e\u043c <code>tcmalloc<\/code> \u0438\u0437 <code>gperftools<\/code> \u043f\u043e\u043a\u0430 \u043d\u0430\u0448 \u043b\u0438\u0447\u043d\u044b\u0439 \u0444\u0430\u0432\u043e\u0440\u0438\u0442*.<\/p>\n<p>* <a href=\"https:\/\/github.com\/jemalloc\/jemalloc\"><em><sub>jemalloc<\/sub><\/em><\/a><em><sub> \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0435\u0441\u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0435\u0433\u043e \u043f\u043e\u0434\u0442\u044e\u043d\u0438\u0442\u044c, \u2014 \u0431\u043b\u0430\u0433\u043e \u043e\u043f\u0446\u0438\u0439 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442.<\/sub><\/em>    <\/p>\n<p>\u041f\u0440\u0430\u0432\u0434\u0430, \u0437\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0439 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0434\u0430\u043b\u044c\u0448\u0435. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043b\u0435\u0447\u0438\u0442 \u0441\u0438\u043c\u043f\u0442\u043e\u043c\u044b, \u0430 \u043d\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u044b.<\/p>\n<p><a class=\"anchor\" name=\"%D0%98%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B5\" id=\"\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435\">\u0447\u043d\u044b\u0435&#187;><\/a><\/p>\n<h3>\u0418\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0425\u043e\u0442\u044f \u0441\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0438 10%, \u0438 20% \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0423 \u043d\u0430\u0441 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u0440\u0430\u0437\u043c\u0430\u0437\u0430\u043d\u043e \u0442\u043e\u043d\u043a\u0438\u043c \u0441\u043b\u043e\u0435\u043c \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0444\u043b\u0435\u0439\u043c\u0433\u0440\u0430\u0444\u0443\u00bb (\u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u00ab\u0444\u043b\u0435\u0439\u043c\u0433\u0440\u0430\u0444\u00bb \u0438 \u0441 \u0447\u0435\u043c \u0435\u0433\u043e \u0435\u0434\u044f\u0442 \u2014 \u0441\u043c. <a href=\"https:\/\/habr.com\/ru\/companies\/pt\/articles\/820453\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e<\/a>).<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0424\u043b\u0435\u0439\u043c\u0433\u0440\u0430\u0444 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0443\u0440\u043f\u0443\u0440\u043d\u044b\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u044b \u0432\u044b\u0437\u043e\u0432\u044b \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430. <\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e <a href=\"https:\/\/meetingcpp.com\/mcpp\/slides\/2022\/Basic%20usage%20of%20PMRs%20for%20better%20performance8308.pdf\">\u0432\u00a0\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/a> \u041c\u0430\u0440\u0435\u043a\u0430 \u041a\u0440\u0430\u0435\u0432\u0441\u043a\u0438.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0435\u0441\u043b\u0438 \u043c\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0445\u0432\u0430\u0442\u0438\u0442 \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, \u2014 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, \u044d\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<p><strong>\u041f\u043b\u043e\u0445\u043e<\/strong><\/p>\n<pre><code class=\"cpp\">void some_function() {   \/\/ \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c, \/\/ \u0438 \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 SSO: https:\/\/rrmprogramming.com\/article\/small-string-optimization-sso-in-c\/ std::string hostname;  \/\/ \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0447\u043d\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-443078","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443078","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=443078"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443078\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=443078"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=443078"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=443078"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}