{"id":383070,"date":"2024-06-29T04:40:17","date_gmt":"2024-06-29T04:40:17","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=383070"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=383070","title":{"rendered":"<span>Main Loop (\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b) \u0432 Android \u0427\u0430\u0441\u0442\u044c 3. \u0414\u0440\u0443\u0433\u0438\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b<\/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\/w780q1\/getpro\/habr\/upload_files\/f41\/e33\/8b6\/f41e338b6e77cba9a8e42e83612d7826.jpg\" width=\"1600\" height=\"700\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f41\/e33\/8b6\/f41e338b6e77cba9a8e42e83612d7826.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u041e\u0441\u043d\u043e\u0432\u043e\u0439 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a. \u041d\u0430 \u043d\u0435\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0432\u0441\u0435 \u0441\u0430\u043c\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0432\u0435\u0449\u0438: \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438, \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f UI. \u0412\u0430\u0436\u043d\u0435\u0439\u0448\u0435\u0439 \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b. \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0442\u043e\u043a \u0433\u043b\u0430\u0432\u043d\u044b\u0439, \u0442\u043e \u0438 \u0435\u0433\u043e \u0446\u0438\u043a\u043b \u0442\u043e\u0436\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 &#8212; \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043d\u0430\u0440\u043e\u0434\u044c\u0435 Main Loop.<\/p>\n<p>\u0422\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0443\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 Android SDK, \u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043b\u0438\u0448\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u043d\u0438\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u0435\u043d, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0440\u0435\u0448\u0430\u0435\u0442 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<p>\u042d\u0442\u043e \u0442\u0440\u0435\u0442\u044c\u044f \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432 Android. \u0412 <a href=\"https:\/\/habr.com\/ru\/company\/cian\/blog\/588314\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0438 \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412\u043e <a href=\"https:\/\/habr.com\/ru\/company\/cian\/blog\/589827\/\">\u0432\u0442\u043e\u0440\u043e\u0439<\/a>, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 Android SDK \u0432 Java \u0441\u043b\u043e\u0435. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 Looper \u0432 C++, \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e \u043f\u0440\u043e\u0431\u0435\u0436\u0438\u043c\u0441\u044f \u043f\u043e Flutter, Chrome \u0438 React Native. \u0410 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0438\u0433\u0440\u044b \u2014 \u0432 \u043d\u0438\u0445 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435 \u0441 \u043d\u043e\u0433 \u043d\u0430 \u0433\u043e\u043b\u043e\u0432\u0443.<\/p>\n<p>\u0422\u0443\u0442 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043e\u043a\u0440\u0430\u0438\u043d\u0443 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438 \u043c\u043e\u0438\u0445 \u0437\u043d\u0430\u043d\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u043c\u0435\u043d\u044f \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0422\u0430\u043a\u0436\u0435 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0441\u0441\u044b\u043b\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0447\u0442\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 \u0434\u043e\u0441\u0443\u0433\u0435.<\/p>\n<p>\u041f\u043e \u0432\u0441\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u043f\u0440\u0438\u043b\u0438\u0447\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044e\u0441\u044c \u2014 \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0435\u0440\u0435\u0432\u0430\u043b\u043e\u0432 \u0414\u0430\u043d\u0438\u043b, \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0442\u0435\u043c\u0435.<\/p>\n<h2>Looper \u0432 C++ \u0441\u043b\u043e\u0435<\/h2>\n<h3>\u041e\u0431\u0449\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430<\/h3>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b, \u0447\u0442\u043e Looper \u0438\u0437 Java \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Looper \u0438\u0437 C++. \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0432 \u0441\u043b\u043e\u0435 C++ \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 Looper \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0441\u0430\u043c \u0446\u0438\u043a\u043b \u0438 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443, \u0441\u0432\u043e\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0441\u0432\u043e\u0439 Message. \u0414\u0430\u043b\u0435\u0435 \u0432 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f\u0445 \u044f \u0431\u0443\u0434\u0443 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u044b \u043f\u0440\u043e\u0447\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\/\u0438\u043b\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435 \u043e\u0431\u0449\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0438 \u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 Java \u0441\u043b\u043e\u0435 Android SDK.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 Looper, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 C++ \u0441\u043b\u043e\u044e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 Java \u0441\u043b\u043e\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 nativePollOnce. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043a\u043e\u0433\u0434\u0430 \u0432 MessageQueue \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f nativePollOnce. \u0412 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u044c Looper \u0438\u0437 C++ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0438 \u043e\u043d \u0432\u0435\u0440\u043d\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 Java \u0441\u043b\u043e\u0439 \u043b\u0438\u0448\u044c \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0432\u043e\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u0431\u0430 \u044d\u0442\u0438\u0445 Looper \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u2014 MainThread, \u0442\u043e \u0435\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0434\u0432\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u00ab\u0437\u0430\u0441\u043f\u0430\u043c\u0438\u0442\u044c\u00bb \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u0437 C++, \u0442\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u0437 Java \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6e5\/1fc\/a2a\/6e51fca2a808574ad114f03bfdb3c234.png\" width=\"1999\" height=\"1603\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6e5\/1fc\/a2a\/6e51fca2a808574ad114f03bfdb3c234.png\"\/><\/figure>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 Looper \u0438\u0437 C++ \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0438 \u043b\u043e\u0433\u0438\u043a\u0443 Looper \u0438 \u043b\u043e\u0433\u0438\u043a\u0443 MessageQueue. \u0414\u0430 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0435 \u0442\u0430\u043a \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e, \u043a\u0430\u043a \u0435\u0433\u043e \u0441\u043e\u0431\u0440\u0430\u0442 \u0438\u0437 Java \u0441\u043b\u043e\u044f. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u0430\u043c\u0438, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0435\u0433\u043e <a href=\"https:\/\/android.googlesource.com\/platform\/system\/core\/+\/master\/libutils\/Looper.cpp\"><u>\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/u><\/a> \u0441 <a href=\"https:\/\/android.googlesource.com\/platform\/system\/core\/+\/master\/libutils\/include\/utils\/Looper.h\"><u>\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c<\/u><\/a>. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u043a\u043e\u0434 \u044f \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u0431\u0443\u0434\u0443, \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043a\u0443\u0441\u043a\u0438. <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0447\u043d\u0451\u043c \u0441\u00a0\u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u00a0\u2014 \u043a\u043b\u0430\u0441\u0441\u0430 Message. \u041e\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u044b\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041f\u043e\u00a0\u0441\u0443\u0442\u0438 \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f what \u0438\u00a0\u0434\u0432\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430.<\/p>\n<pre><code class=\"cpp\">struct Message {     Message() : what(0) { }     Message(int w) : what(w) { }     int what; };<\/code><\/pre>\n<p>\u0410 \u043a\u0430\u043a \u0436\u0435 \u0442\u043e\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438, \u0447\u0442\u043e \u043e\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e what \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c. \u0417\u0430\u0442\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0438 MessageHandler.<\/p>\n<pre><code class=\"cpp\">class MessageHandler : public virtual RefBase { protected:     virtual ~MessageHandler(); public:     virtual void handleMessage(const Message&amp; message) = 0; };<\/code><\/pre>\n<p>\u0423 MessageHandler \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 (\u0441\u0447\u0438\u0442\u0430\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439) \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c. \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a \u043d\u0435\u043c\u0443 \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u043e. \u0412 \u0446\u0435\u043b\u043e\u043c \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c\u0443 MessageHandler \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 Message, \u0442\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u0435\u043c\u0443\u0434\u0440\u043e\u0441\u0442\u044f\u043c\u0438 \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438 \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. <\/p>\n<p>\u041d\u043e \u043a\u0430\u043a \u043d\u0430\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 MessageEnvelope. \u0412 \u043d\u0435\u043c \u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Message \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0432\u044b\u0448\u0435;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/android.googlesource.com\/platform\/frameworks\/native\/+\/android-4.2.2_r1\/include\/utils\/StrongPointer.h\"><u>StrongPointer<\/u><\/a> \u043d\u0430 MessageHandler, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_(%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)\"><u>\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c<\/u><\/a> \u0441 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u043c \u0441\u0441\u044b\u043b\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438, \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 MessageHandler \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439;\u00a0<\/p>\n<\/li>\n<li>\n<p>uptime \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e \u0441\u0442\u0430\u0440\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041e\u043d\u0430 \u043d\u0435\u0441\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0441\u043c\u044b\u0441\u043b \u043a\u0430\u043a \u0438 when \u0432 Message \u0438\u0437 Java, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0434\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cpp\">struct MessageEnvelope {     MessageEnvelope() : uptime(0) { }     MessageEnvelope(nsecs_t u, sp&lt;MessageHandler> h, const Message&amp; m)         : uptime(u), handler(std::move(h)), message(m) {}     nsecs_t uptime;     sp&lt;MessageHandler> handler;     Message message; };<\/code><\/pre>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0432 \u043e\u0431\u044a\u0435\u043a\u0442 MessageEnvelope \u043c\u044b \u0441\u0432\u044f\u0436\u0435\u043c \u043d\u0430\u0448\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c. \u0422\u0430\u043a\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e, \u0431\u0435\u0437 \u0437\u0430\u0437\u0440\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u0435\u0441\u0442\u0438, \u043a\u043b\u0430\u0441\u0442\u044c \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u041a\u0441\u0442\u0430\u0442\u0438 \u043e \u043d\u0435\u0439. <\/p>\n<p>\u041e\u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c Vector, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0441\u0443\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u044b\u043c \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c. \u041a\u0430\u043a \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0432\u044b\u0448\u0435 &#8212; \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u044d\u0442\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432 \u0441\u0430\u043c\u043e\u043c Looper \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 mMessageEnvelopes.<\/p>\n<pre><code class=\"cpp\">Vector&lt;MessageEnvelope> mMessageEnvelopes;<\/code><\/pre>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435 Looper \u0438\u0437 C++ \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u0430 \u0438\u0437 Java \u0441\u043b\u043e\u044f, \u043d\u043e \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0435\u0449\u0435 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438. \u0415\u0441\u043b\u0438 Looper \u0438\u0437 Java \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 Looper \u0438\u0437 C++, \u0442\u043e \u0447\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c \u0438 \u043d\u0430\u0434\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0436\u0434\u0430\u0442\u044c? \u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u0441\u043b\u043e\u044e \u0443\u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f, \u043c\u044b \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u043d\u0435. \u041d\u0430\u0434\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0436\u0434\u0430\u0442\u044c. <\/p>\n<h3>\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043d\u0430 wait \u0438 notify \u0438\u0437 Java. \u041a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 Java \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80_(%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F)\"><u>\u043c\u043e\u043d\u0438\u0442\u043e\u0440<\/u><\/a>. \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 wait \u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 wait set \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430. \u041f\u043e\u043a\u0430 \u043f\u043e\u0442\u043e\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 wait set \u043e\u043d \u00ab\u0441\u043f\u0438\u0442\u00bb. \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 notify \u0438\u043b\u0438 notifyAll \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 wait set \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430.\u00a0<\/p>\n<p>\u0412 \u0421++ \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 <a href=\"https:\/\/en.cppreference.com\/w\/cpp\/thread\/condition_variable\"><u>condition_variable<\/u><\/a>, \u043d\u043e \u0432 Looper \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 &#8212; \u0441\u0432\u044f\u0437\u043a\u0430 <a href=\"https:\/\/man7.org\/linux\/man-pages\/man7\/epoll.7.html\"><u>epoll<\/u><\/a> + <a href=\"https:\/\/man7.org\/linux\/man-pages\/man2\/eventfd.2.html\"><u>eventfd<\/u><\/a>. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 wait-notify\/condition_variable \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, epoll + eventfd \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u0430\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0442\u0430\u043a \u0438 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438. \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 eventfd.<\/p>\n<h4>eventfd<\/h4>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 eventfd, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u0442\u0430\u043a \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u043a\u0430 eventfd \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u043d\u0435\u043c.\u00a0<\/p>\n<p>\u041c\u043d\u0435 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u043a\u0430\u043a &#8212; \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430. \u0418\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0444\u0430\u0439\u043b, \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0441\u043e\u043a\u0435\u0442, stdin, stdout \u0438 \u0442.\u0434. \u0421\u0430\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u0438\u043b\u0438 \u0441\u043e\u043a\u0435\u0442, \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0435, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044f\u0434\u0440\u043e. \u041e\u043d\u043e \u0437\u043d\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0435\u0449\u0435 \u043f\u0440\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0444\u0430\u0439\u043b, \u043d\u043e \u043e\u0442\u0434\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a\u0441\u0442\u0430\u0442\u0438, \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430). \u0422\u0430\u043a \u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430\u043c\u0438 0, 1 \u0438 2 \u2014 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u044f\u0434\u0440\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430, \u0432\u044b\u0432\u043e\u0434\u0430 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/timeweb.com\/ru\/community\/articles\/chto-takoe-faylovyy-deskriptor-prostymi-slovami\"><u>\u0442\u0443\u0442<\/u><\/a>.\u00a0<\/p>\n<p>eventfd \u044d\u0442\u043e kernel system call \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u043d\u0430\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445. \u041c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044f\u0434\u0440\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0430\u0448 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 eventfd \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0435\u0433\u043e \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 mWakeEventFd:<\/p>\n<pre><code class=\"cpp\">mWakeEventFd.reset(eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC));<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e \u0441 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u043c \u043d\u0430\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c wait\/notify \u0441 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u043c, \u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043e\u0442\u0434\u0430\u0441\u0442 eventfd, \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430.\u00a0<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u044b \u0430\u043d\u0430\u043b\u043e\u0433\u0438 \u0434\u043b\u044f wait \u0438 notify. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 wait, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0435\u0433\u043e \u0432\u044b\u0441\u0442\u0443\u043f\u0438\u0442 epoll.<\/p>\n<h4>(e)poll<\/h4>\n<p>poll \u044d\u0442\u043e kernel system call, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440. epoll \u044d\u0442\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f poll, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <a href=\"http:\/\/www.xmailserver.org\/linux-patches\/nio-improve.html\"><u>\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0435\u0435<\/u><\/a>. \u0427\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 epoll \u043d\u0430\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043d\u0435\u0433\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e epoll \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 epoll.<\/p>\n<p>\u0418\u0437 \u044d\u0442\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u044b &#8212; epoll_wait,\u00a0 epoll_ctl \u0438 epoll_create1.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 epoll, \u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u043d\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 mEpollFd.<\/p>\n<pre><code class=\"cpp\">mEpollFd.reset(epoll_create1(EPOLL_CLOEXEC));<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e epoll_ctl \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e epoll \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0442 eventfd.<\/p>\n<pre><code class=\"cpp\">epoll_ctl(mEpollFd.get(), EPOLL_CTL_ADD, mWakeEventFd.get(), &amp;wakeEvent); <\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u0432 \u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0433\u0434\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0436\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u043c\u0435\u0442\u043e\u0434 epoll_wait. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445 \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432, \u0441\u043b\u0435\u0434\u0438\u0442 epoll. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043e\u043d \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0430\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f. <\/p>\n<pre><code class=\"cpp\">int eventCount = epoll_wait(     mEpollFd.get(),      eventItems,      EPOLL_MAX_EVENTS,      timeoutMillis);<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 epoll_wait \u043c\u044b \u043b\u0438\u0431\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f, \u043b\u0438\u0431\u043e, \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0435\u0442, \u0431\u0443\u0434\u0435\u043c \u0438\u0445 \u0434\u043e\u0436\u0438\u0434\u0430\u0442\u044c\u0441\u044f. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c epoll \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 &#8212; \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u043c\u0435\u0442\u043e\u0434 \u043d\u0443\u0436\u043d\u043e\u0435 \u043d\u0430\u043c \u0432\u0440\u0435\u043c\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 timeoutMillis. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0443 \u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u044f\u0442 \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438\u043b\u0438 \u043d\u0435 \u0438\u0441\u0442\u0435\u0447\u0435\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0432 timeoutMillis \u0432\u0440\u0435\u043c\u044f, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0440\u0430\u043d\u044c\u0448\u0435. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.\u00a0<\/p>\n<p>\u0422\u043e, \u043a\u0430\u043a Looper \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0440\u0430 \u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 &#8212; \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u044e. \u0422\u0443\u0442 \u043a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f write.<\/p>\n<h4>write<\/h4>\n<p><a href=\"https:\/\/man7.org\/linux\/man-pages\/man2\/write.2.html\"><u>write<\/u><\/a> &#8212; \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0431\u0430\u0439\u0442\u044b \u0432 \u0440\u0435\u0441\u0443\u0440\u0441 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 \u0432\u044b\u0441\u0442\u0443\u043f\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 uint64_t. \u041d\u0430\u043c \u0432\u0435\u0434\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0434\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442\u044c epoll, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<pre><code class=\"cpp\">uint64_t inc = 1; write(mWakeEventFd.get(), &amp;inc, sizeof(uint64_t))<\/code><\/pre>\n<p>\u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439:<\/p>\n<ol>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 eventfd \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043d\u0435\u0433\u043e;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 epoll;<\/p>\n<\/li>\n<li>\n<p>\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 epoll \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u043e\u0442 eventfd;<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0434\u0430\u0447\u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e epoll \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0436\u0434\u0430\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u0432 epoll_wait;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043f\u0438\u0448\u0435\u043c \u0432 \u0440\u0435\u0441\u0443\u0440\u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u043c\u0443 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0443 eventfd, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u044f epoll.<\/p>\n<\/li>\n<\/ol>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u0430\u044f, \u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u044f\u0436\u0435\u043b\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u0430\u044f \u0438\u0437-\u0437\u0430 \u043d\u0435\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 \u0434\u043b\u044f Android \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432.<\/p>\n<p>\u041e\u0431\u0449\u0438\u0439 \u043f\u0443\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0439 \u0438 \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044f Java \u0441\u043b\u043e\u0439, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/174\/b3c\/dca\/174b3cdca715af665e45683e76595d9a.png\" width=\"1999\" height=\"1266\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/174\/b3c\/dca\/174b3cdca715af665e45683e76595d9a.png\"\/><\/figure>\n<p>\u0421 Android SDK \u043f\u043e\u043a\u043e\u043d\u0447\u0435\u043d\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0434 Android. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u043d\u0435 \u0432\u0441\u0435. \u0422\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0438\u043b\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0441\u0432\u043e\u0438\u043c\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438.<\/p>\n<h2>Flutter<\/h2>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u043c\u044b \u0441 Flutter. \u0428\u0442\u0443\u043a\u0430 \u044d\u0442\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u043e\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e.<\/p>\n<h3>\u0414\u0432\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438<\/h3>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432\u043e Flutter \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u0432\u0443\u0445 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439: \u043e\u0447\u0435\u0440\u0435\u0434\u044c Event \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c MicroTask.\u00a0<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430\u043c \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0430 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0430 &#8212; \u044d\u0442\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0430 \u0432\u043e\u0442 \u0432\u0442\u043e\u0440\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0443\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. \u041e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u0440\u0435\u0435. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9d3\/ae7\/eb7\/9d3ae7eb733228ab2801065e5af6f1ae.png\" width=\"1999\" height=\"712\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9d3\/ae7\/eb7\/9d3ae7eb733228ab2801065e5af6f1ae.png\"\/><\/figure>\n<p>\u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"dart\">void loop() {  var isAlive = true;  while (isAlive) {    ........................................    while (_microTaskQueue.isNotEmpty) {      final currentMicroTask = _microTaskQueue.first;      currentMicroTask.call();      _microTaskQueue.remove(currentMicroTask);    }     if (_eventQueue.isNotEmpty) {      final currentEvent = _eventQueue.first;      currentEvent.call();      _eventQueue.remove(currentEvent);    }    ........................................  } }<\/code><\/pre>\n<p>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435 \u0446\u0438\u043a\u043b\u0430 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 MicroTask, \u0435\u0441\u043b\u0438 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0442\u043e \u043e\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442 &#8212; \u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e Event. \u041f\u043e \u0441\u0443\u0442\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c MicroTask \u044d\u0442\u043e \u0442\u0430 \u0436\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u043d\u0430\u0438\u0432\u044b\u0441\u0448\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442, \u0438 \u043f\u043e\u043a\u0430 \u044d\u0442\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435 \u043e\u043f\u0443\u0441\u0442\u0435\u0435\u0442, \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 Event \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f.<\/p>\n<h3>Isolate<\/h3>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432\u043e Flutter \u043d\u0435\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043d\u043e \u0435\u0441\u0442\u044c Isolate. \u041e\u043d \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c Isolate \u043d\u0435 \u0434\u0435\u043b\u044f\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0439 \u0434\u043b\u044f \u043d\u0430\u0441 \u0441\u0445\u0435\u043c\u0435 \u043c\u0435\u043d\u044f\u0442\u044c \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 Isolate, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0435\u0442. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0439 \u0436\u0435 \u043d\u0430\u0441 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 Isolate \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 \u0446\u0438\u043a\u043b \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044f\u043c\u0438 Event \u0438 MicroTask. \u041e\u0431\u0449\u0430\u044e\u0442\u0441\u044f \u0436\u0435 Isolate c \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u043e Flutter \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0446\u0438\u043a\u043b\u0430\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0b9\/98a\/dd5\/0b998add5bf779131ee85f4aa8cc0683.png\" width=\"1999\" height=\"1929\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0b9\/98a\/dd5\/0b998add5bf779131ee85f4aa8cc0683.png\"\/><\/figure>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/www.didierboelens.com\/2019\/01\/futures-isolates-event-loop\/\"><u>\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/u><\/a> (<a href=\"https:\/\/habr.com\/ru\/post\/497278\/\"><u>\u043f\u0435\u0440\u0435\u0432\u043e\u0434<\/u><\/a>). <\/p>\n<h2>Chrome<\/h2>\n<p>\u041c\u043d\u043e\u0433\u0438\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <a href=\"https:\/\/cordova.apache.org\/\"><u>Cordova<\/u><\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 WebView, \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B5%D1%81%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B2%D0%B5%D0%B1-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5\"><u>PWA<\/u><\/a> (\u0445\u043e\u0442\u044f, \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0432\u0441\u0435 \u0443\u0436\u0435 \u0437\u0430\u0431\u044b\u043b\u0438). \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Android 7, \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e WebView <a href=\"https:\/\/developer.android.com\/about\/versions\/nougat\/android-7.0#webview\"><u>\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Chrome<\/u><\/a>. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e Android \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Chrome. \u0422\u0430\u043a \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c\u0441\u044f \u0438 \u043a \u0435\u0433\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u043c\u0443 \u0446\u0438\u043a\u043b\u0443.<\/p>\n<p><a href=\"https:\/\/chromium.googlesource.com\/chromium\/chromium\/+\/refs\/heads\/main\/third_party\/libevent\"><u>\u041e\u043d \u043e\u0441\u043d\u043e\u0432\u0430\u043d<\/u><\/a> \u043d\u0430 open-source \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <a href=\"https:\/\/libevent.org\/\"><u>libevent<\/u><\/a>. \u042d\u0442\u0430 \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u043e\u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043a\u0430\u043a UI, \u0442\u0430\u043a \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u041e\u043d\u0430 \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u0441\u0430\u043c\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0432\u0435\u0449\u0438 \u043a\u0430\u043a: \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u044b \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0432\u0435\u0449\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0446\u0438\u043a\u043b\u0430\u043c\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/p>\n<p>(\u041a\u0441\u0442\u0430\u0442\u0438, \u0432 Android SDK \u044d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0442\u043e\u0436\u0435 <a href=\"https:\/\/android.googlesource.com\/platform\/external\/libevent\/\"><u>\u0435\u0441\u0442\u044c<\/u><\/a>, \u043d\u043e \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0434\u043b\u044f \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043f\u0440\u0430\u0432\u0434\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0435\u0435 \u0442\u0443\u0434\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 2015 \u0433\u043e\u0434\u0443.)\u00a0<\/p>\n<p>\u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b libevent \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f\/\u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u044f. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 Android \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0439 \u0434\u043e\u0431\u0440\u044b\u0439 epoll + eventfd. \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f.\u00a0<\/p>\n<p>\u041f\u043e\u0432\u0435\u0440\u0445 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043e\u0431\u0451\u0440\u0442\u043a\u0430. \u0412 \u0446\u0435\u043b\u043e\u043c \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0446\u0438\u043a\u043b Flutter (\u0447\u0442\u043e \u043d\u0435 \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u201c\u043a\u043e\u0440\u043d\u0438\u201d \u044f\u0437\u044b\u043a\u0430 Dart) &#8212; \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c Task \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c Microtask. \u041d\u043e \u0435\u0441\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f &#8212; \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u043e\u043c, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.\u00a0<\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 Chrome \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"https:\/\/habr.com\/ru\/post\/461401\/\"><u>\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/u><\/a>. \u042f \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0443 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u043e\u0442\u0442\u0443\u0434\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6ac\/f7c\/6fa\/6acf7c6faa181a47d79101291c3a6e5a.png\" width=\"1398\" height=\"1000\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ac\/f7c\/6fa\/6acf7c6faa181a47d79101291c3a6e5a.png\"\/><\/figure>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u043c \u0446\u0435\u043b\u044b\u0445 \u0442\u0440\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043d\u0430 \u043e\u0434\u0438\u043d \u0446\u0438\u043a\u043b \u0441\u043e\u0431\u044b\u0442\u0438\u0439.\u00a0<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432 Chrome, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e (\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e) \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f74\/9fb\/2ff\/f749fb2ff68fef611aeb4061959c7e7b.png\" width=\"1999\" height=\"942\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f74\/9fb\/2ff\/f749fb2ff68fef611aeb4061959c7e7b.png\"\/><\/figure>\n<p>\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 Render \u0437\u0434\u0435\u0441\u044c \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0441\u0438\u0440\u0435\u043d\u0435\u0432\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u0441 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0430 \u0442\u0435\u043c\u0430 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430, \u0442\u043e \u0432\u043e\u0442 <a href=\"https:\/\/www.alibabacloud.com\/blog\/exploration-of-the-flutter-rendering-mechanism-from-architecture-to-source-code_597285\"><u>\u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0432\u043e Flutter \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0441\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 Chromium \u0438 Android SDK<\/u><\/a>.<\/p>\n<h2>React Native<\/h2>\n<p>\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432 React Native \u0443\u0445\u043e\u0434\u044f\u0442 \u043a\u043e\u0440\u043d\u044f\u043c\u0438 \u0432 \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043f\u043e\u0442\u043e\u043a\u0438 main \u0438 JsThread:<\/p>\n<ol>\n<li>\n<p>main &#8212; \u0441\u0442\u0430\u0440\u044b\u0439, \u0434\u043e\u0431\u0440\u044b\u0439, \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439. \u0418\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043d \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043f\u0430\u043a\u0435\u0442\u044b JS, \u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 JS \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435. Main \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c View.\u00a0<\/p>\n<\/li>\n<li>\n<p>JsThread &#8212; \u043f\u043e\u0442\u043e\u043a \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c Javascript. \u0412 \u043d\u0435\u043c \u043f\u043e \u0441\u0443\u0442\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432 React Native \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 view \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u043e\u0440\u043e\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e MainThread \u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0438 \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c JS. \u0412\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 JsThread, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u0422\u0430\u043a \u0447\u0442\u043e \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u201c\u041a\u0442\u043e \u0442\u0443\u0442 \u0433\u043b\u0430\u0432\u043d\u044b\u0439?\u201d \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 ReactNative \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435. <\/p>\n<h2>KMM<\/h2>\n<p>\u0421\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0443\u0442 \u043e\u0441\u043e\u0431\u043e \u043d\u0435\u0447\u0435\u0433\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043a\u043e\u0434 Kotlin Native \u043f\u043e \u0441\u0443\u0442\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 Android SDK, \u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0447\u0442\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0442\u0443\u0434\u0430 \u0436\u0435. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432 KMM \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 <a href=\"https:\/\/github.com\/Kotlin\/kotlinx.coroutines\/blob\/master\/kotlinx-coroutines-core\/common\/src\/EventLoop.common.kt\"><u>EventLoop \u0434\u043b\u044f \u043a\u043e\u0440\u0443\u0442\u0438\u043d<\/u><\/a>, \u043d\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u043e\u043d, \u0443\u0432\u044b, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<h2>\u0418\u0433\u0440\u044b<\/h2>\n<p>\u0412 \u0438\u0433\u0440\u0430\u0445 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044f \u0432\u0430\u0448\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0432\u0438\u0436\u043e\u043a. \u0412\u0435\u0434\u044c \u043b\u0438\u0441\u0442\u0438\u043a\u0438 \u043d\u0430 \u0434\u0435\u0440\u0435\u0432\u044c\u044f\u0445 \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0432\u0435\u0442\u0440\u043e\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0438\u0433\u0440\u043e\u043a \u043d\u0438\u043a\u0430\u043a \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0438\u0433\u0440\u043e\u0439.<\/p>\n<p>\u041d\u0443 \u0442\u0443\u0442, \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0435 \u043d\u0430\u0434\u043e \u0442\u0430\u043a \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435\u043c \u0438 \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0446\u0438\u043a\u043b\u0430. \u0412\u0441\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0449\u0435, \u043f\u0440\u0430\u0432\u0434\u0430? \u041d\u0435\u0442, \u043d\u0435 \u043f\u0440\u0430\u0432\u0434\u0430, \u043d\u0430 \u0434\u0435\u043b\u0435 \u0442\u0443\u0442 \u0432\u0441\u0435 \u0434\u0430\u0436\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f &#8212; \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u043e\u0445\u043e\u0434 \u0446\u0438\u043a\u043b\u0430 \u043d\u0430\u043c \u043d\u0430\u0434\u043e:<\/p>\n<ol>\n<li>\n<p>\u0421\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0432\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u044d\u043a\u0440\u0430\u043d\u0430, \u0433\u0435\u0439\u043c\u043f\u0430\u0434\u0430 \u0438\u043b\u0438 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 processInput.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0444\u0438\u0437\u0438\u043a\u0443, \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e, \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u043a\u0430\u043c\u0435\u0440\u044b, \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442 \u0438 \u043f\u0440. \u0422\u043e \u0435\u0441\u0442\u044c \u0432 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432\u0441\u0435\u0445 \u0442\u043e\u0447\u0435\u043a \u0434\u043b\u044f \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u0432. \u041f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 updatePhysics<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u043e\u0447\u0435\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u044b, \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0448\u0435\u0439\u0434\u0435\u0440\u044b, \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0440., \u0447\u0442\u043e\u0431\u044b \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e. \u041f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 updateRender.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 processInput, updatePhysics, updateRender \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u044b, \u043d\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u043d\u0430\u043c \u0441\u0445\u0435\u043c\u044b \u0441 \u043e\u0447\u0435\u0440\u0435\u0434\u044f\u043c\u0438 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u043c\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0442\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u043c\u0438 \u043f\u0440\u0435\u043d\u0435\u0431\u0440\u0435\u0433\u0430\u0442\u044c. <\/p>\n<h3>\u041f\u043e\u0434\u0445\u043e\u0434 \u0432 \u043b\u043e\u0431\u043e\u0432\u0443\u044e<\/h3>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 &#8212; \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0448\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435, \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"kotlin\">class GameLooper {     private var isRunning = true     fun loop() {               while (isRunning) {            processInput()            updatePhysics()            updateRender()        }    }     private fun processInput() {        ..................    }     private fun updatePhysics() {        ..................    }     private fun updateRender() {        ..................    } }<\/code><\/pre>\n<p>\u0418\u0438\u0438\u0438\u0438\u0438&#8230; \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u043f\u043b\u043e\u0445\u043e. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041f\u043e \u0441\u0443\u0442\u0438, \u0447\u0435\u043c \u043c\u043e\u0449\u043d\u0435\u0435 \u0436\u0435\u043b\u0435\u0437\u043e \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0430\u0448\u0430 \u0438\u0433\u0440\u0430, \u043d\u043e \u0435\u0441\u043b\u0438 \u0436\u0435\u043b\u0435\u0437\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0435, \u0442\u043e \u0438\u0433\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e.\u00a0<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0447\u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u0435 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436, \u0438 \u043f\u043e\u043a\u0430 \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0430 \u00ab\u0432\u043f\u0435\u0440\u0435\u0434\u00bb, \u043e\u043d \u0438\u0434\u0435\u0442 \u0432\u043f\u0435\u0440\u0435\u0434 (\u0434\u0430 \u0434\u0430!!!). \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 walk, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0440\u043e\u0432\u043d\u043e \u043d\u0430 \u043c\u0435\u0442\u0440 \u0432\u043f\u0435\u0440\u0435\u0434. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0444\u0438\u0437\u0438\u043a\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0441\u043b\u0430\u0431\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u2014 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0430 \u043d\u0430 \u043c\u043e\u0449\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u2014 0,5 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.\u00a0<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0436\u043c\u0435\u0442 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0442\u043e \u043d\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u043c\u0435\u0442\u043e\u0434 \u0443\u0441\u043f\u0435\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c\u0441\u044f 3 \u0440\u0430\u0437\u0430, \u0430 \u043d\u0430 \u043c\u043e\u0449\u043d\u043e\u043c \u2014 6. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430 \u043c\u043e\u0449\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436 \u043f\u0440\u043e\u0439\u0434\u0435\u0442 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ce3\/96a\/9c3\/ce396a9c396032b05d78eb4ad3f5e79a.png\" width=\"1999\" height=\"1005\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ce3\/96a\/9c3\/ce396a9c396032b05d78eb4ad3f5e79a.png\"\/><\/figure>\n<p>\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0436\u0435 \u0438\u0433\u0440\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c \u2014 \u0442\u0430\u043a\u043e\u0439 \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u0439 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<p>\u041a\u0430\u043a \u0436\u0435 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f?<\/p>\n<h3>\u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0434\u0440\u043e\u0432<\/h3>\n<p>\u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0434\u0440\u043e\u0432 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 25 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043d\u0430\u0448\u0430 \u0438\u0433\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c 25 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u044b\u0439 \u0434\u043e\u0431\u0440\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 Thread.sleep, \u0438 \u043d\u0430\u0448 \u0446\u0438\u043a\u043b \u0443\u0441\u043d\u0435\u0442 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442 \u0432\u0440\u0435\u043c\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430.<\/p>\n<pre><code class=\"kotlin\">private const val FRAMES_PER_SECOND = 25 private const val SKIP_TICKS = 1000 \/ FRAMES_PER_SECOND  class GameLooper {       private var isRunning = true       fun loop() {        var nextGameTick = SystemClock.uptimeMillis()         while (isRunning) {            processInput()            updatePhysics()            updateRender()             nextGameTick += SKIP_TICKS            val sleepTime = nextGameTick - SystemClock.uptimeMillis()            if (sleepTime > 0) {                Thread.sleep(sleepTime)            }        }    } }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e, \u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0438 \u043c\u043e\u0449\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e. \u0418 \u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u043b\u044e\u0441\u044b \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f.\u00a0<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0430 \u0441\u043b\u0430\u0431\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u043d\u0430\u0448\u0430 \u0438\u0433\u0440\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0443\u0448\u043b\u0430. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u044d\u0434\u0430\u043a\u043e\u0435 \u043b\u0430\u0433\u0430\u044e\u0449\u0435\u0435 slo-mo, <a href=\"https:\/\/www.youtube.com\/watch?v=7kYnoIIED1o\"><u>\u0442\u0430\u043a\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 Dark Souls<\/u><\/a>.\u00a0<\/p>\n<p>\u0421 \u043c\u043e\u0449\u043d\u044b\u043c \u0436\u0435\u043b\u0435\u0437\u043e\u043c \u0432\u0441\u0451 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e. \u041f\u043e \u0444\u0430\u043a\u0442\u0443, \u043e\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u0430\u0434\u0440\u0430. \u0425\u043e\u0442\u044f \u0438 \u0443 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u043f\u043b\u044e\u0441\u044b &#8212; \u043c\u0435\u043d\u044c\u0448\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u0443\u0435\u0442\u0441\u044f \u0431\u0430\u0442\u0430\u0440\u0435\u044f \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435. \u041d\u043e \u0432\u0441\u0435 \u0436\u0435, \u0447\u0435\u043c \u043c\u043e\u0449\u043d\u0435\u0435 \u0436\u0435\u043b\u0435\u0437\u043e, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043d\u043e \u0441\u043f\u0438\u0442.\u00a0<\/p>\n<p>\u042d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u0432\u0435\u0434\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u043a\u0443\u043f\u0430\u043b \u043c\u043e\u0449\u043d\u044b\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0441\u043e 120 \u0413\u0446 \u044d\u043a\u0440\u0430\u043d\u043e\u043c \u043d\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c 25 \u043a\u0430\u0434\u0440\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u0439\u043c\u0435\u043c\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u0433\u0440\u044b. <\/p>\n<h3>\u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f, \u0442\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0432\u0435\u0449\u0438, \u043a\u0430\u043a \u0437\u0432\u0443\u043a\u0438 \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438, \u0437\u0430\u0432\u044f\u0437\u0430\u043d\u044b \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0417\u0432\u0443\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 \u0436\u0435\u043b\u0435\u0437\u0430. \u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0439 \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0438 \u0443\u0436\u0435 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434 \u043d\u0435\u0433\u043e. <\/p>\n<p>\u041f\u0440\u0430\u0432\u0434\u0430 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u044b \u0444\u0438\u0437\u0438\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438 \u0432\u0440\u0435\u043c\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 \u0433\u0438\u043f\u043e\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439. \u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0434\u0440\u0430, \u043f\u0440\u044f\u043c\u043e \u0432 \u043c\u0435\u0442\u043e\u0434 updatePhysics \u0438 \u0443\u0436\u0435 \u0432 \u0441\u0430\u043c\u0438\u0445 \u0440\u0430\u0441\u0447\u0435\u0442\u0430\u0445 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u0448\u043b\u043e.\u00a0 <\/p>\n<pre><code class=\"kotlin\">class GameLooper {     private var isRunning = true     fun loop() {        var currentFrameTick = SystemClock.uptimeMillis()         while (isRunning) {            val prevFrameTick = currentFrameTick            currentFrameTick = SystemClock.uptimeMillis()              processInput()            updatePhysics(currentFrameTick - prevFrameTick)            updateRender()        }    } }<\/code><\/pre>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u0448\u0430 \u0438\u0433\u0440\u0430 \u0438\u0434\u0451\u0442 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 \u0436\u0435\u043b\u0435\u0437\u0430 (\u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u044f \u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0436 \u043d\u0438\u0437\u043a\u0438\u0439 FPS). \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u0431\u0435\u0434\u0430!\u00a0<\/p>\n<p>\u042d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c, \u043d\u043e \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0438 \u043c\u0438\u043d\u0443\u0441\u044b.\u00a0<\/p>\n<p>\u041d\u0430 \u0441\u043b\u0430\u0431\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0441\u043b\u0438 FPS \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0436 \u043d\u0438\u0437\u043a\u0438\u043c &#8212; 10-15 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0433\u0440\u043e\u0439 \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438\u0433\u0440\u0430 \u043d\u0435 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0430\u0432\u0430\u044f \u0438\u0433\u0440\u043e\u043a\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u043e \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u0438\u0433\u0440\u0430\u0442\u044c \u043d\u0430 \u0442\u0430\u043a\u043e\u043c FPS \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/p>\n<p>\u041d\u0430 \u043c\u043e\u0449\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u0430\u0433\u0438\u044f. \u0412 \u0447\u0435\u043c \u043e\u043d\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f? \u041d\u0443, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0442\u0430\u0442\u044c (\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b), \u0447\u0442\u043e-\u0442\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u044b\u0441\u0442\u0440\u043e, \u0430 \u0447\u0442\u043e-\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0412 \u0447\u0435\u043c \u0436\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u0433\u0438\u0438? \u0412 \u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u0447\u0438\u0441\u043b\u0430\u0445.\u00a0<\/p>\n<p>\u0414\u0440\u043e\u0431\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0432\u0440\u043e\u0434\u0435 Float \u0438\u043b\u0438 Double, \u0438\u043c\u0435\u044e\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0438\u0444\u0440 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043d\u044b\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 0.1 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a\u00a00,10000000000000001, \u0442\u0430\u043a \u0438 0,99999999999999976. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"kotlin\">println(\"%f\".format(1f * 1_000_000_000_000))<\/code><\/pre>\n<p>\u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u043b\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 Float \u0438 \u0443\u043c\u043d\u043e\u0436\u0438\u043b\u0438 \u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u043c \u0432\u044b\u0432\u0435\u0434\u0435\u0442\u0441\u044f 999999995904.000000. \u041f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u043b\u0430 \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439.<\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u041d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u0443\u0441\u0435\u043d\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u043f\u043e\u043b\u0437\u0430\u0435\u0442 0.0001 \u043c\u0435\u0442\u0440\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041f\u0440\u0438 30 \u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0433\u0443\u0441\u0435\u043d\u0438\u0446\u0443 \u043d\u0430 1\/30 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f &#8212; 0,0000033, \u043f\u0440\u0438 120 \u0443\u0436\u0435 \u043d\u0430 1\/120 &#8212; 0,000000833. \u0427\u0435\u043c \u0432\u044b\u0448\u0435 FPS \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0438\u043c\u0438 \u0434\u0440\u043e\u0431\u044f\u043c\u0438 \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0442\u0435\u043c \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c. \u041e\u0447\u0435\u043d\u044c \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f Skyrim, <a href=\"https:\/\/www.youtube.com\/watch?v=ZFVtXjr-Nno\"><u>\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u043a\u0430\u0434\u0440\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0442\u0435\u043b\u0435\u0433\u0438 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445<\/u><\/a>.<\/p>\n<p>\u041d\u0435 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432 \u0432\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u0435 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c Float \u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442, \u043d\u043e \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437 \u0442\u0435\u0445 \u0432\u0435\u0449\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0441 \u0432\u0430\u043c\u0438 \u0441\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f. \u0418\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0430\u0440\u0430\u044f\u0441\u044c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u044b\u0435 \u0434\u0440\u043e\u0431\u0438. \u041d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u0442\u0443\u0442 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0437\u0430 \u0441\u0447\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0446\u0438\u043a\u043b\u0430.\u00a0<\/p>\n<p>\u0414\u0430 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c, <a href=\"https:\/\/gafferongames.com\/post\/fix_your_timestep\/\"><u>\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 \u043b\u044e\u0431\u044f\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u0441\u0442\u0432\u043e<\/u><\/a>.<\/p>\n<h2>\u041f\u043e\u0441\u0442\u043e\u044f\u043d\u0441\u0442\u0432\u043e \u0428\u0440\u0451\u0434\u0438\u043d\u0433\u0435\u0440\u0430<\/h2>\n<p>\u0420\u0430\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c\u044e Float \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0435\u0442 \u0441\u0435\u0431\u044f \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432 \u0440\u0430\u0441\u0447\u0451\u0442\u0430\u0445 \u0444\u0438\u0437\u0438\u043a\u0438, \u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0435\u0439 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043f\u0443\u0441\u0442\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u0430\u043a \u0447\u0430\u0441\u0442\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0438 \u043d\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0430\u044f.<\/p>\n<p>\u0423\u0441\u043b\u043e\u0432\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u0444\u0438\u0437\u0438\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f 50 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041f\u0443\u0442\u0435\u043c \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0444\u0438\u0437\u0438\u043a\u0443 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043a\u0430\u0436\u0434\u044b\u0435 20 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0438\u0437\u0438\u043a\u0438 \u043f\u0440\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c 20 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434, \u0442\u043e \u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c.<\/p>\n<pre><code class=\"kotlin\">private const val TICKS_PER_SECOND = 50 private const val SKIP_TICKS = 1000 \/ TICKS_PER_SECOND class GameLooper {     private var isRunning = true     fun loop() {        var nextGameTick = SystemClock.uptimeMillis()         while (isRunning) {            val needUpdate = SystemClock.uptimeMillis() > nextGameTick            if (needUpdate) {                processInput()                updatePhysics()                 nextGameTick += SKIP_TICKS            }             updateRender()        }    } }<\/code><\/pre>\n<p>\u0412\u044b\u0432\u043e\u0434 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e updateRender \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a \u0447\u0430\u0441\u0442\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u0435\u043c. \u0422\u0435\u043f\u0435\u0440\u044c \u0438\u0433\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0449\u0443\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043b\u0430\u0432\u043d\u0435\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u0438\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b, \u0448\u0435\u0439\u0434\u0435\u0440\u044b, \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0438 \u043f\u0440. \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.\u00a0<\/p>\n<p>\u041d\u043e \u0432 \u0438\u0433\u0440\u0430\u0445 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043a\u0430\u0434\u0440\u043e\u0432 \u043d\u0435\u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e, \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043a\u0430\u0434\u0440 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0432 updateRender \u0441\u0438\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u044c\u0448\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e &#8212; \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 65 \u043c\u0441. \u0422\u043e\u0433\u0434\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0444\u0438\u0437\u0438\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c\u0441\u044f 3 \u0440\u0430\u0437\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u0412 \u0446\u0435\u043b\u043e\u043c \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u0434\u0440\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0433\u043e. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0438 \u0442\u0430\u043a \u043d\u0435 \u0441\u043b\u0430\u0431\u0435\u043d\u044c\u043a\u043e\u0435 \u043f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043e\u0449\u0443\u0449\u0430\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u0441\u0438\u043b\u044c\u043d\u0435\u0435.\u00a0<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0434\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0444\u0438\u0437\u0438\u043a\u0443 \u201c\u0434\u043e\u0433\u043e\u043d\u044f\u0442\u044c\u201d. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0432\u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0446\u0438\u043a\u043b while, \u0432\u043c\u0435\u0441\u0442\u043e if. <\/p>\n<pre><code class=\"kotlin\">private const val TICKS_PER_SECOND = 50 private const val SKIP_TICKS = 1000 \/ TICKS_PER_SECOND  class GameLooper {     private var isRunning = true     fun loop() {        var nextGameTick = SystemClock.uptimeMillis()         while (isRunning) {            while (SystemClock.uptimeMillis() > nextGameTick) {                processInput()                updatePhysics()                 nextGameTick += SKIP_TICKS            }             updateRender()        }    } }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u0430\u0434\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043a\u0430 \u0444\u0438\u0437\u0438\u043a\u0430 \u043d\u0435 \u0434\u043e\u0433\u043e\u043d\u0438\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f.\u00a0<\/p>\n<p>\u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 updateRender. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 updateRender \u0444\u0438\u0437\u0438\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043a\u043e\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043a\u0430\u0434\u0440\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f. \u0421 \u044d\u0442\u0438\u043c \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0435\u0441\u0442\u044c &#8212; \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f!<\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0438\u0437\u0438\u043a\u0438 \u043f\u0440\u043e\u0448\u043b\u043e 10 \u043c\u0441, \u0432\u0440\u0435\u043c\u044f \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0444\u0438\u0437\u0438\u043a\u0438 20 \u043c\u0441. \u041f\u043e \u0441\u0443\u0442\u0438 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0438\u043c 10 \u043d\u0430 20 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u00bd. \u0422\u043e \u0435\u0441\u0442\u044c \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0438\u0437\u0438\u043a\u0438 \u043f\u0440\u043e\u0448\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u0430\u0434\u0440\u0430. \u00bd \u0438 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0448\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438. \u041f\u0440\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u043a\u0430\u0434\u0440\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430\u0448\u0430 \u0438\u0433\u0440\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u043b\u0430\u0432\u043d\u0435\u0435.\u00a0 <\/p>\n<pre><code class=\"kotlin\">private const val TICKS_PER_SECOND = 50 private const val SKIP_TICKS = 1000 \/ TICKS_PER_SECOND  class GameLooper {     private var isRunning = true     fun loop() {        var nextGameTick = SystemClock.uptimeMillis()         while (isRunning) {            while (SystemClock.uptimeMillis() > nextGameTick) {                processInput()                updatePhysics()                 nextGameTick += SKIP_TICKS            }            val time = SystemClock.uptimeMillis() + SKIP_TICKS - nextGameTick            val interpolation = time.toFloat() \/ SKIP_TICKS            updateRender(interpolation)        }    } }<\/code><\/pre>\n<p>\u0422\u0430\u043a, \u0430 \u0440\u0430\u0437\u0432\u0435 \u0443 \u043d\u0430\u0441 \u043e\u043f\u044f\u0442\u044c \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c\u044e Float? \u041c\u044b \u0432\u0435\u0434\u044c \u043e\u043f\u044f\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0434\u0435\u043b\u0438\u043c.\u00a0<\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0432 \u043d\u0430\u0448\u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430, \u0442\u043e \u0432 \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0438\u0442\u044c 1 \u043d\u0430 20. \u0410 1\/20 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u0448\u043d\u0430\u044f \u0434\u0440\u043e\u0431\u044c. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, updateRender \u043b\u0438\u0448\u044c \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u0432 \u043d\u0435\u043c \u043d\u0430\u0432\u0440\u0435\u0434\u0438\u0442 \u043d\u0435 \u0442\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e, \u043a\u0430\u043a \u0432 \u0440\u0430\u0441\u0447\u0451\u0442\u0430\u0445 \u0444\u0438\u0437\u0438\u043a\u0438 \u0438\u043b\u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u00ab\u0441\u0435\u0440\u0435\u0431\u0440\u044f\u043d\u043d\u043e\u0439 \u043f\u0443\u043b\u0435\u0439\u00bb \u0445\u043e\u0442\u044c \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u0435\u043d. \u0412 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0446\u0438\u043a\u043b\u043e\u0432. \u0412\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0438\u0433\u0440\u044b. \u0414\u043b\u044f \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440 \u0442\u0438\u043f\u0430 CS:GO \u0438\u043b\u0438 Valorant \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043c\u0438\u0440 \u0438 \u0444\u0438\u0437\u0438\u043a\u0443 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0447\u0430\u0449\u0435, \u043d\u0430 \u044d\u0442\u043e \u0438 \u0441\u0442\u043e\u0438\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0443\u043f\u043e\u0440. \u0410 \u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c VR, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0434\u043e \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u043d\u0435 \u043e\u0434\u043d\u0443 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u0430 \u0434\u0432\u0435, \u043f\u0440\u0438\u0447\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 90 \u0444\u043f\u0441, \u0430 \u043b\u0443\u0447\u0448\u0435 120, \u0438\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0448\u043d\u0438\u0442\u044c. \u0410 \u0435\u0441\u043b\u0438 \u0443\u0436 \u0432 \u0438\u0433\u0440\u0435 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u043e\u0442\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438\u2026 \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u0430\u0445 \u0432 \u0442\u0430\u043a\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u041c\u043e\u0436\u0435\u0442\u0435 \u043e\u0446\u0435\u043d\u0438\u0442\u044c <a href=\"https:\/\/docs.unity3d.com\/Manual\/ExecutionOrder.html\"><u>\u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 Unity<\/u><\/a>. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0433\u043b\u0443\u0431\u0436\u0435 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u043e\u043a\u0435\u0430\u043d \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u043e\u0432 \u0432 \u0438\u0433\u0440\u0430\u0445, \u0442\u043e \u0432\u043e\u0442 <a href=\"http:\/\/gameprogrammingpatterns.com\/game-loop.html\"><u>\u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f<\/u><\/a> \u0438 <a href=\"https:\/\/dewitters.com\/dewitters-gameloop\/\"><u>\u0432\u043e\u0442 \u0435\u0449\u0435 \u0442\u043e\u0436\u0435<\/u><\/a>.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u0444\u0430\u043a\u0442\u043e\u0440, \u043a\u0430\u043a \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u0441\u0442\u0432\u043e \u043a\u0430\u0434\u0440\u043e\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b. \u041e\u043d\u0430 \u0442\u043e\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0438 \u043e\u0447\u0435\u043d\u044c \u0433\u043b\u0443\u0431\u043e\u043a\u0430\u044f \u0442\u0435\u043c\u0430, \u0434\u043b\u044f \u0442\u0435\u0445 \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u0432 \u043d\u0435\u0435 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f, \u044f \u0442\u043e\u0436\u0435 \u043d\u0430\u0448\u0435\u043b <a href=\"https:\/\/www.kinematicsoup.com\/news\/2016\/8\/9\/rrypp5tkubynjwxhxjzd42s3o034o8\"><u>\u0445\u043e\u0440\u043e\u0448\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e<\/u><\/a> (\u043e\u043d\u0430 \u0435\u0449\u0435 \u0438 \u0441 gif\u2019\u043a\u0430\u043c\u0438!!!). <\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u041d\u0443 \u0432\u043e\u0442 \u043c\u044b \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u0432 Android. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u044f \u043c\u043e\u0433 \u043e \u0447\u0435\u043c-\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0442\u044c \u0438\u043b\u0438 \u043e \u0447\u0435\u043c-\u0442\u043e \u0437\u0430\u0431\u044b\u0442\u044c, \u043d\u043e \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u0432\u0441\u0435 \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b. \u0423\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e \u0441\u0443\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0433\u0434\u0435-\u0442\u043e \u0432 \u043d\u0435\u0434\u0440\u0430\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/company\/cian\/blog\/588314\/\"><u>Main Loop (\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b) \u0432 Android \u0427\u0430\u0441\u0442\u044c 1. \u041f\u0438\u0448\u0435\u043c \u0441\u0432\u043e\u0439 \u0446\u0438\u043a\u043b<\/u><\/a><\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/company\/cian\/blog\/589827\/\"><u>Main Loop (\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b) \u0432 Android \u0427\u0430\u0441\u0442\u044c 2. Android SDK<\/u><\/a><\/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\/591877\/\"> https:\/\/habr.com\/ru\/articles\/591877\/<\/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>\u041e\u0441\u043d\u043e\u0432\u043e\u0439 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a. \u041d\u0430 \u043d\u0435\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0432\u0441\u0435 \u0441\u0430\u043c\u044b\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0432\u0435\u0449\u0438: \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438, \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f UI. \u0412\u0430\u0436\u043d\u0435\u0439\u0448\u0435\u0439 \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b. \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0442\u043e\u043a \u0433\u043b\u0430\u0432\u043d\u044b\u0439, \u0442\u043e \u0438 \u0435\u0433\u043e \u0446\u0438\u043a\u043b \u0442\u043e\u0436\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 &#8212; \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043d\u0430\u0440\u043e\u0434\u044c\u0435 Main Loop.<\/p>\n<p>\u0422\u043e\u043d\u043a\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0443\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 Android SDK, \u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043b\u0438\u0448\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0441 \u043d\u0438\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0443\u0436\u0435\u043d, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0440\u0435\u0448\u0430\u0435\u0442 \u0438 \u043a\u0430\u043a\u0438\u0435 \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<p>\u042d\u0442\u043e \u0442\u0440\u0435\u0442\u044c\u044f \u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432 Android. \u0412 <a href=\"https:\/\/habr.com\/ru\/company\/cian\/blog\/588314\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0438 \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412\u043e <a href=\"https:\/\/habr.com\/ru\/company\/cian\/blog\/589827\/\">\u0432\u0442\u043e\u0440\u043e\u0439<\/a>, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 Android SDK \u0432 Java \u0441\u043b\u043e\u0435. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 Looper \u0432 C++, \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e \u043f\u0440\u043e\u0431\u0435\u0436\u0438\u043c\u0441\u044f \u043f\u043e Flutter, Chrome \u0438 React Native. \u0410 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0438\u0433\u0440\u044b \u2014 \u0432 \u043d\u0438\u0445 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435 \u0441 \u043d\u043e\u0433 \u043d\u0430 \u0433\u043e\u043b\u043e\u0432\u0443.<\/p>\n<p>\u0422\u0443\u0442 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043e\u043a\u0440\u0430\u0438\u043d\u0443 \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u0438 \u043c\u043e\u0438\u0445 \u0437\u043d\u0430\u043d\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0433\u0434\u0435-\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u043b\u044f\u0439\u0442\u0435 \u043c\u0435\u043d\u044f \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445. \u0422\u0430\u043a\u0436\u0435 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0441\u0441\u044b\u043b\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0447\u0442\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430 \u0434\u043e\u0441\u0443\u0433\u0435.<\/p>\n<p>\u041f\u043e \u0432\u0441\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u043f\u0440\u0438\u043b\u0438\u0447\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044e\u0441\u044c \u2014 \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041f\u0435\u0440\u0435\u0432\u0430\u043b\u043e\u0432 \u0414\u0430\u043d\u0438\u043b, \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0442\u0435\u043c\u0435.<\/p>\n<h2>Looper \u0432 C++ \u0441\u043b\u043e\u0435<\/h2>\n<h3>\u041e\u0431\u0449\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430<\/h3>\n<p>\u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b, \u0447\u0442\u043e Looper \u0438\u0437 Java \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 Looper \u0438\u0437 C++. \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0432 \u0441\u043b\u043e\u0435 C++ \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 Looper \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0441\u0430\u043c \u0446\u0438\u043a\u043b \u0438 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443, \u0441\u0432\u043e\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0441\u0432\u043e\u0439 Message. \u0414\u0430\u043b\u0435\u0435 \u0432 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f\u0445 \u044f \u0431\u0443\u0434\u0443 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u044b \u043f\u0440\u043e\u0447\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\/\u0438\u043b\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435 \u043e\u0431\u0449\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0438 \u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0432 Java \u0441\u043b\u043e\u0435 Android SDK.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 Looper, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 C++ \u0441\u043b\u043e\u044e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 Java \u0441\u043b\u043e\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 nativePollOnce. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043a\u043e\u0433\u0434\u0430 \u0432 MessageQueue \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f nativePollOnce. \u0412 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u044c Looper \u0438\u0437 C++ \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0438 \u043e\u043d \u0432\u0435\u0440\u043d\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 Java \u0441\u043b\u043e\u0439 \u043b\u0438\u0448\u044c \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0432\u043e\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f. \u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u0431\u0430 \u044d\u0442\u0438\u0445 Looper \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u2014 MainThread, \u0442\u043e \u0435\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0434\u0432\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u00ab\u0437\u0430\u0441\u043f\u0430\u043c\u0438\u0442\u044c\u00bb \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u0437 C++, \u0442\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u0437 Java \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0430:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 Looper \u0438\u0437 C++ \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0438 \u043b\u043e\u0433\u0438\u043a\u0443 Looper \u0438 \u043b\u043e\u0433\u0438\u043a\u0443 MessageQueue. \u0414\u0430 \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0435 \u0442\u0430\u043a \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e, \u043a\u0430\u043a \u0435\u0433\u043e \u0441\u043e\u0431\u0440\u0430\u0442 \u0438\u0437 Java \u0441\u043b\u043e\u044f. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u0441\u0430\u043c\u0438, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0435\u0433\u043e <a href=\"https:\/\/android.googlesource.com\/platform\/system\/core\/+\/master\/libutils\/Looper.cpp\"><u>\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/u><\/a> \u0441 <a href=\"https:\/\/android.googlesource.com\/platform\/system\/core\/+\/master\/libutils\/include\/utils\/Looper.h\"><u>\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c<\/u><\/a>. \u041f\u043e \u044d\u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u043a\u043e\u0434 \u044f \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u0431\u0443\u0434\u0443, \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0437\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043a\u0443\u0441\u043a\u0438. <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0447\u043d\u0451\u043c \u0441\u00a0\u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u00a0\u2014 \u043a\u043b\u0430\u0441\u0441\u0430 Message. \u041e\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u044b\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041f\u043e\u00a0\u0441\u0443\u0442\u0438 \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f what \u0438\u00a0\u0434\u0432\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430.<\/p>\n<pre><code class=\"cpp\">struct Message {     Message() : what(0) { }     Message(int w) : what(w) { }     int what; };<\/code><\/pre>\n<p>\u0410 \u043a\u0430\u043a \u0436\u0435 \u0442\u043e\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438, \u0447\u0442\u043e \u043e\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e what \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c. \u0417\u0430\u0442\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0438 MessageHandler.<\/p>\n<pre><code class=\"cpp\">class MessageHandler : public virtual RefBase { protected:     virtual ~MessageHandler(); public:     virtual void handleMessage(const Message&amp; message) = 0; };<\/code><\/pre>\n<p>\u0423 MessageHandler \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 (\u0441\u0447\u0438\u0442\u0430\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439) \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c. \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043a \u043d\u0435\u043c\u0443 \u043f\u0440\u0435\u0434\u043f\u0438\u0441\u0430\u043d\u043e. \u0412 \u0446\u0435\u043b\u043e\u043c \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c\u0443 MessageHandler \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 Message, \u0442\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u0435\u043c\u0443\u0434\u0440\u043e\u0441\u0442\u044f\u043c\u0438 \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0438 \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f. \u0415\u0441\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438 \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e\u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. <\/p>\n<p>\u041d\u043e \u043a\u0430\u043a \u043d\u0430\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 MessageEnvelope. \u0412 \u043d\u0435\u043c \u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Message \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043b\u0438\u0441\u044c \u0432\u044b\u0448\u0435;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/android.googlesource.com\/platform\/frameworks\/native\/+\/android-4.2.2_r1\/include\/utils\/StrongPointer.h\"><u>StrongPointer<\/u><\/a> \u043d\u0430 MessageHandler, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_(%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)\"><u>\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c<\/u><\/a> \u0441 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u043c \u0441\u0441\u044b\u043b\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438, \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 MessageHandler \u0434\u043b\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439;\u00a0<\/p>\n<\/li>\n<li>\n<p>uptime \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e \u0441\u0442\u0430\u0440\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041e\u043d\u0430 \u043d\u0435\u0441\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0441\u043c\u044b\u0441\u043b \u043a\u0430\u043a \u0438 when \u0432 Message \u0438\u0437 Java, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0434\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435. \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"cpp\">struct MessageEnvelope {     MessageEnvelope() : uptime(0) { }     MessageEnvelope(nsecs_t u, sp&lt;MessageHandler> h, const Message&amp; m)         : uptime(u), handler(std::move(h)), message(m) {}     nsecs_t uptime;     sp&lt;MessageHandler> handler;     Message message; };<\/code><\/pre>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0432 \u043e\u0431\u044a\u0435\u043a\u0442 MessageEnvelope \u043c\u044b \u0441\u0432\u044f\u0436\u0435\u043c \u043d\u0430\u0448\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c. \u0422\u0430\u043a\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e, \u0431\u0435\u0437 \u0437\u0430\u0437\u0440\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u0435\u0441\u0442\u0438, \u043a\u043b\u0430\u0441\u0442\u044c \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439. \u041a\u0441\u0442\u0430\u0442\u0438 \u043e \u043d\u0435\u0439. <\/p>\n<p>\u041e\u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c Vector, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e \u0441\u0443\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u044b\u043c \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c. \u041a\u0430\u043a \u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u0432\u044b\u0448\u0435 &#8212; \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u044d\u0442\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432 \u0441\u0430\u043c\u043e\u043c Looper \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 mMessageEnvelopes.<\/p>\n<pre><code class=\"cpp\">Vector&lt;MessageEnvelope> mMessageEnvelopes;<\/code><\/pre>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435 Looper \u0438\u0437 C++ \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u0430 \u0438\u0437 Java \u0441\u043b\u043e\u044f, \u043d\u043e \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0435\u0449\u0435 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438. \u0415\u0441\u043b\u0438 Looper \u0438\u0437 Java \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 Looper \u0438\u0437 C++, \u0442\u043e \u0447\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438\u0441\u044c \u0438 \u043d\u0430\u0434\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0436\u0434\u0430\u0442\u044c? \u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u0441\u043b\u043e\u044e \u0443\u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f, \u043c\u044b \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u043d\u0435. \u041d\u0430\u0434\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0436\u0434\u0430\u0442\u044c. <\/p>\n<h3>\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043d\u0430 wait \u0438 notify \u0438\u0437 Java. \u041a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 Java \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0439 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9C%D0%BE%D0%BD%D0%B8%D1%82%D0%BE%D1%80_(%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F)\"><u>\u043c\u043e\u043d\u0438\u0442\u043e\u0440<\/u><\/a>. \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 wait \u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 wait set \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430. \u041f\u043e\u043a\u0430 \u043f\u043e\u0442\u043e\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 wait set \u043e\u043d \u00ab\u0441\u043f\u0438\u0442\u00bb. \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 notify \u0438\u043b\u0438 notifyAll \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 wait set \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430.\u00a0<\/p>\n<p>\u0412 \u0421++ \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 <a href=\"https:\/\/en.cppreference.com\/w\/cpp\/thread\/condition_variable\"><u>condition_variable<\/u><\/a>, \u043d\u043e \u0432 Looper \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 &#8212; \u0441\u0432\u044f\u0437\u043a\u0430 <a href=\"https:\/\/man7.org\/linux\/man-pages\/man7\/epoll.7.html\"><u>epoll<\/u><\/a> + <a href=\"https:\/\/man7.org\/linux\/man-pages\/man2\/eventfd.2.html\"><u>eventfd<\/u><\/a>. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 wait-notify\/condition_variable \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, epoll + eventfd \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u0430\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0442\u0430\u043a \u0438 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438. \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 eventfd.<\/p>\n<h4>eventfd<\/h4>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 eventfd, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u0442\u0430\u043a \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u043a\u0430 eventfd \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u043d\u0435\u043c.\u00a0<\/p>\n<p>\u041c\u043d\u0435 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u043a\u0430\u043a &#8212; \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430. \u0418\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0444\u0430\u0439\u043b, \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0441\u043e\u043a\u0435\u0442, stdin, stdout \u0438 \u0442.\u0434. \u0421\u0430\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u0438\u043b\u0438 \u0441\u043e\u043a\u0435\u0442, \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0435, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044f\u0434\u0440\u043e. \u041e\u043d\u043e \u0437\u043d\u0430\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0435\u0449\u0435 \u043f\u0440\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0444\u0430\u0439\u043b, \u043d\u043e \u043e\u0442\u0434\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a\u0441\u0442\u0430\u0442\u0438, \u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430). \u0422\u0430\u043a \u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430\u043c\u0438 0, 1 \u0438 2 \u2014 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u044f\u0434\u0440\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0438\u0445 \u0434\u043b\u044f \u0432\u0432\u043e\u0434\u0430, \u0432\u044b\u0432\u043e\u0434\u0430 \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0430\u0445. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/timeweb.com\/ru\/community\/articles\/chto-takoe-faylovyy-deskriptor-prostymi-slovami\"><u>\u0442\u0443\u0442<\/u><\/a>.\u00a0<\/p>\n<p>eventfd \u044d\u0442\u043e kernel system call \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u0439 \u043d\u0430\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u0445. \u041c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044f\u0434\u0440\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0430\u0448 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 eventfd \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0435\u0433\u043e \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 mWakeEventFd:<\/p>\n<pre><code class=\"cpp\">mWakeEventFd.reset(eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC));<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e \u0441 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u043c \u043d\u0430\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c wait\/notify \u0441 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u043c, \u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043e\u0442\u0434\u0430\u0441\u0442 eventfd, \u0431\u0443\u0434\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u043c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0430.\u00a0<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u044b \u0430\u043d\u0430\u043b\u043e\u0433\u0438 \u0434\u043b\u044f wait \u0438 notify. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 wait, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0435\u0433\u043e \u0432\u044b\u0441\u0442\u0443\u043f\u0438\u0442 epoll.<\/p>\n<h4>(e)poll<\/h4>\n<p>poll \u044d\u0442\u043e kernel system call, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440. epoll \u044d\u0442\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f poll, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <a href=\"http:\/\/www.xmailserver.org\/linux-patches\/nio-improve.html\"><u>\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0435\u0435<\/u><\/a>. \u0427\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 epoll \u043d\u0430\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043d\u0435\u0433\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e epoll \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 epoll.<\/p>\n<p>\u0418\u0437 \u044d\u0442\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u044b &#8212; epoll_wait,\u00a0 epoll_ctl \u0438 epoll_create1.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 epoll, \u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u043d\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 mEpollFd.<\/p>\n<pre><code class=\"cpp\">mEpollFd.reset(epoll_create1(EPOLL_CLOEXEC));<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e epoll_ctl \u043c\u044b \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0442\u043e epoll \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043e\u0442 eventfd.<\/p>\n<pre><code class=\"cpp\">epoll_ctl(mEpollFd.get(), EPOLL_CTL_ADD, mWakeEventFd.get(), &amp;wakeEvent); <\/code><\/pre>\n<p>\u041d\u0443 \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u0432 \u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0433\u0434\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0436\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u043c\u0435\u0442\u043e\u0434 epoll_wait. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445 \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432, \u0441\u043b\u0435\u0434\u0438\u0442 epoll. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043e\u043d \u0432\u0435\u0440\u043d\u0435\u0442 \u043d\u0430\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f. <\/p>\n<pre><code class=\"cpp\">int eventCount = epoll_wait(     mEpollFd.get(),      eventItems,      EPOLL_MAX_EVENTS,      timeoutMillis);<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 epoll_wait \u043c\u044b \u043b\u0438\u0431\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f, \u043b\u0438\u0431\u043e, \u0435\u0441\u043b\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0435\u0442, \u0431\u0443\u0434\u0435\u043c \u0438\u0445 \u0434\u043e\u0436\u0438\u0434\u0430\u0442\u044c\u0441\u044f. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c epoll \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 &#8212; \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u043c\u0435\u0442\u043e\u0434 \u043d\u0443\u0436\u043d\u043e\u0435 \u043d\u0430\u043c \u0432\u0440\u0435\u043c\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 timeoutMillis. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0443 \u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u044f\u0442 \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438\u043b\u0438 \u043d\u0435 \u0438\u0441\u0442\u0435\u0447\u0435\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u0432 timeoutMillis \u0432\u0440\u0435\u043c\u044f, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0440\u0430\u043d\u044c\u0448\u0435. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439.\u00a0<\/p>\n<p>\u0422\u043e, \u043a\u0430\u043a Looper \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0440\u0430 \u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 &#8212; \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u044e. \u0422\u0443\u0442 \u043a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f write.<\/p>\n<h4>write<\/h4>\n<p><a href=\"https:\/\/man7.org\/linux\/man-pages\/man2\/write.2.html\"><u>write<\/u><\/a> &#8212; \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0431\u0430\u0439\u0442\u044b \u0432 \u0440\u0435\u0441\u0443\u0440\u0441 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 \u0432\u044b\u0441\u0442\u0443\u043f\u0438\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 uint64_t. \u041d\u0430\u043c \u0432\u0435\u0434\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0434\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442\u044c epoll, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<pre><code class=\"cpp\">uint64_t inc = 1; write(mWakeEventFd.get(), &amp;inc, sizeof(uint64_t))<\/code><\/pre>\n<p>\u041f\u043e \u0438\u0442\u043e\u0433\u0443 \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439:<\/p>\n<ol>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 eventfd \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043d\u0435\u0433\u043e;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 epoll;<\/p>\n<\/li>\n<li>\n<p>\u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0443 epoll \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u043e\u0442 eventfd;<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0434\u0430\u0447\u0438<\/p>\n<\/li>\n<\/ol>\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-383070","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/383070","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=383070"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/383070\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=383070"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=383070"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=383070"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}