{"id":493165,"date":"2026-09-02T06:19:41","date_gmt":"2026-09-02T06:19:41","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=493165"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=493165","title":{"rendered":"\u0413\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0438\u0437\u043d\u0443\u0442\u0440\u0438, \u0447\u0430\u0441\u0442\u044c 3"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0424\u0438\u043d\u0430\u043b \u0441\u0435\u0440\u0438\u0438 \u043f\u0440\u043e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c Go. \u0417\u0434\u0435\u0441\u044c \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0443\u044e\u0442\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430 G\/M\/P: \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b, \u0441\u0435\u0442\u044c, \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430. \u041f\u043b\u044e\u0441 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434 <code>GODEBUG=schedtrace<\/code> \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043b\u043e\u0433, \u0438 \u0432\u0441\u0435 \u0441\u0432\u0435\u0436\u0435\u0435 \u0438\u0437 Go 1.22-1.27: \u0440\u0430\u043d\u0442\u0430\u0439\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0447\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430.<\/p>\n<p><strong>\u041f\u043b\u0430\u043d \u0441\u0435\u0440\u0438\u0438:<\/strong><\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/1070050\/\" rel=\"noopener nofollow\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0438 \u041e\u0421 \u043d\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438 \u043a\u0430\u043a Go \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b GMP.<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/1073044\" rel=\"noopener nofollow\">\u041f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u044e\u0449\u0438\u0439 \u0441\u0442\u0435\u043a, \u0441\u0438\u0433\u043d\u0430\u043b SIGURG \u0438 \u0436\u0438\u0437\u043d\u044c \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b.<\/a><\/p>\n<\/li>\n<li>\n<p><strong>syscall, netpoll, \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0438 \u0441\u0432\u0435\u0436\u0438\u0439 Go.<\/strong><\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u0440\u0438\u0448\u0435\u043b \u0441\u0440\u0430\u0437\u0443 \u0441\u044e\u0434\u0430. \u0413\u043e\u0440\u0443\u0442\u0438\u043d\u0430: \u0434\u0435\u0448\u0435\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u043c \u0432 \u043a\u0443\u0447\u0435, \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u041e\u0421 (M), \u0432\u0437\u044f\u0432\u0448\u0438\u0439 \u043f\u0440\u0430\u0432\u043e P, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u043e\u0432\u043d\u043e GOMAXPROCS. \u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 \u0438\u043b\u0438 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u0435 \u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b: \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u043f\u0430\u0440\u043a\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043a \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0431\u0435\u0440\u0435\u0442 \u0434\u0440\u0443\u0433\u0443\u044e. \u0417\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0441\u043b\u0435\u0434\u0438\u0442 sysmon, \u043f\u043e\u0442\u043e\u043a-\u043d\u0430\u0434\u0437\u0438\u0440\u0430\u0442\u0435\u043b\u044c \u0432\u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u043b GMP: \u043e\u043d \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0435\u0442 \u0436\u0430\u0434\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c SIGURG \u0438 \u043e\u0442\u0431\u0438\u0440\u0430\u0435\u0442 P \u0443 \u0437\u0430\u0441\u0442\u0440\u044f\u0432\u0448\u0438\u0445.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0443\u0442\u0438 \u0441\u0435\u0440\u0438\u044f \u0448\u043b\u0430 \u043f\u043e \u0442\u0430\u0439\u043c\u043b\u0430\u0439\u043d\u0443 \u0440\u0435\u043b\u0438\u0437\u043e\u0432, \u043d\u043e \u00ab\u043f\u043e\u043b\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u00bb \u0432 \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442: netpoll \u043f\u0440\u0438\u0435\u0445\u0430\u043b \u0432 1.1, \u0442\u0430\u0439\u043c\u0435\u0440\u044b \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0438 \u043d\u0430 P \u0432 1.14, \u043c\u043e\u0434\u0435\u043b\u044c syscall \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 1.26. \u0414\u0430\u043b\u044c\u0448\u0435 \u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e (Go 1.27), \u0430 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u044f\u043a\u043e\u0440\u044f\u043c\u0438 \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445.<\/p>\n<p>TL;DR \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0445: \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 syscall \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u0435\u043d, \u0434\u043e\u043b\u0433\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u00absysmon \u043e\u0442\u0431\u0438\u0440\u0430\u0435\u0442 P, \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0440\u0430\u0441\u0442\u0438\u0442 \u043f\u043e\u0442\u043e\u043a\u0438\u00bb \u0441 \u043f\u043e\u0442\u043e\u043b\u043a\u043e\u043c \u0432 10 000. \u0421\u0435\u0442\u044c \u0436\u0434\u0435\u0442 \u0431\u0435\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 (netpoll), \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0438\u0449\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043b\u0435\u0441\u0442\u043d\u0438\u0446\u0435\u0439 \u043e\u0442 \u0434\u0435\u0448\u0435\u0432\u043e\u0433\u043e \u043a \u0434\u043e\u0440\u043e\u0433\u043e\u043c\u0443, \u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043b\u0438\u0431\u043e \u043a\u0440\u0443\u0442\u044f\u0442\u0441\u044f (spinning), \u043b\u0438\u0431\u043e \u0441\u043f\u044f\u0442. GC \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u0438 \u0431\u0435\u0440\u0435\u0442 \u0441 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043d\u0430\u043b\u043e\u0433. \u0421 1.25 GOMAXPROCS \u0447\u0438\u0442\u0430\u0435\u0442 \u043b\u0438\u043c\u0438\u0442\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0441 1.27 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0443\u043c\u0435\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0443\u0442\u0435\u043a\u0448\u0438\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ecc\/faa\/a4d\/eccfaaa4d30b1ec6c139cc671f81b6c0.png\" alt=\"\u0420\u0430\u043c\u043a\u0430 \u0444\u0438\u043d\u0430\u043b\u0430: \u043d\u0435 \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Go 1.27\" width=\"1170\" height=\"787\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ecc\/faa\/a4d\/eccfaaa4d30b1ec6c139cc671f81b6c0.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ecc\/faa\/a4d\/eccfaaa4d30b1ec6c139cc671f81b6c0.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0430\u043c\u043a\u0430 \u0444\u0438\u043d\u0430\u043b\u0430: \u043d\u0435 \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Go 1.27<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0430\u043c\u0435\u0440\u044b, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0441 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b: Intel Core i9-14900KF, linux\/amd64, 32 \u043f\u043e\u0442\u043e\u043a\u0430, Go 1.27.0. \u041a\u043e\u0434 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 <a href=\"https:\/\/github.com\/dsbasko\/sandbox-gorutines\" rel=\"noopener nofollow\">dsbasko\/sandbox-gorutines<\/a>: \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0442\u0430\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0434\u0435\u043c\u043e \u0432 \u0442\u0435\u043a\u0441\u0442\u0435. \u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u0446\u0438\u0442\u0430\u0442\u044b \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u0441\u0442\u043e\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0444\u0430\u0439\u043b \u0438 \u0441\u0442\u0440\u043e\u043a\u0443, \u0438 \u0432\u0435\u0434\u0435\u0442 \u043e\u043d\u0430 \u043d\u0430 \u0442\u0435\u0433 <code>go1.27.0<\/code>, \u0430 \u043d\u0435 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u0432\u0435\u0442\u043a\u0443. \u0412\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u0433\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b.<\/p>\n<h3>\u0413\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u044f\u0434\u0440\u043e<\/h3>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0437\u0430\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439. \u0414\u0432\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b: \u043e\u0434\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 10 000 \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0445 \u0438\u0437 10 000 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439, \u0432\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 10 000 \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0445 10 000 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0434\u0438\u0441\u043a\u0430. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u041e\u0421 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043a\u0430\u0436\u0434\u0430\u044f? \u041e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e? \u041f\u0440\u0438\u043a\u0438\u043d\u044c, \u043e\u0442\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043a \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0433\u043b\u0430\u0432\u044b.<\/p>\n<h4>\u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u0435\u043d<\/h4>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435. \u0413\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0437\u043e\u0432\u0435\u0442 \u044f\u0434\u0440\u043e (\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c, \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u043e\u0442\u043a\u0440\u044b\u0442\u044c), \u0438 \u043d\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0435\u0435 \u043f\u043e\u0442\u043e\u043a \u043f\u043e\u0442\u0435\u0440\u044f\u043d \u0434\u043b\u044f Go: \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u0434 \u044f\u0434\u0440\u0430, \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u0444\u043b\u0430\u0433\u0438 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0432 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u0442. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>entersyscall<\/code> \u043f\u0435\u0440\u0435\u0434 \u0443\u0445\u043e\u0434\u043e\u043c \u0434\u0435\u043b\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0443\u043c: \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c <code>_Gsyscall<\/code>. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043d\u0430\u0434 \u0432\u0445\u043e\u0434\u043e\u043c \u0432 syscall \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043a\u043e\u0440\u043e\u0442\u043a\u043e (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L4618-L4619\" rel=\"noopener nofollow\"><code>proc.go:4618<\/code><\/a>):<\/p>\n<blockquote>\n<p>The goroutine g is about to enter a system call. Record that it\u2019s not using the cpu anymore.<\/p>\n<\/blockquote>\n<p>\u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0447\u0442\u043e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440. \u0417\u0430\u043c\u0435\u0442\u044c, \u0447\u0435\u0433\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442: P \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f, \u043e\u043d \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0442\u043e\u043a\u0435. \u0420\u0430\u0441\u0447\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0437\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 P \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0443 (\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0434 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043c\u043e\u043a, \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u043a\u043e\u0433\u043e-\u0442\u043e) \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u043e\u0438\u0442\u044c \u0434\u043e\u0440\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430. \u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 syscall \u0432 Go \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u0435\u043d: \u0443\u0448\u0435\u043b, \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f, \u043f\u043e\u0431\u0435\u0436\u0430\u043b \u0434\u0430\u043b\u044c\u0448\u0435, \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043c\u043a\u0430 \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0435.<\/p>\n<h4>\u0414\u043e\u043b\u0433\u0438\u0439 \u0432\u044b\u0437\u043e\u0432: P \u0441\u043f\u0430\u0441\u0430\u044e\u0442, \u043f\u043e\u0442\u043e\u043a \u0431\u0440\u043e\u0441\u0430\u044e\u0442<\/h4>\n<p>\u0410 \u0435\u0441\u043b\u0438 \u0432\u044b\u0437\u043e\u0432 \u0437\u0430\u0432\u0438\u0441? \u0414\u0438\u0441\u043a \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f, NFS \u0443\u0448\u0435\u043b \u0432 \u0441\u0435\u0431\u044f, \u0442\u0440\u0443\u0431\u0430 \u043f\u0443\u0441\u0442\u0430. \u041f\u043e\u0442\u043e\u043a \u0441\u0438\u0434\u0438\u0442 \u0432 \u044f\u0434\u0440\u0435, P \u043f\u0440\u0438 \u043d\u0435\u043c, \u0438 \u044d\u0442\u043e\u0442 P \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0438\u043a\u043e\u0433\u043e: \u043e\u0434\u043d\u0430 \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f \u0432\u0441\u0435\u0445 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b (\u043f\u0440\u0438 GOMAXPROCS=32) \u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u0430. \u0421\u0430\u043c \u043f\u043e\u0442\u043e\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0435 \u0440\u0435\u0448\u0438\u0442, \u043e\u043d \u0441\u043f\u0438\u0442 \u0432 \u044f\u0434\u0440\u0435. \u0420\u0435\u0448\u0430\u0435\u0442 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043f\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 sysmon: \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>retake<\/code> \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 P \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0448\u0438\u0445. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u043a\u043e\u0434\u0435 \u0447\u0435\u0441\u0442\u0435\u043d \u043d\u0430\u0441\u0447\u0435\u0442 \u043f\u043e\u0440\u043e\u0433\u0430 (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L6743\" rel=\"noopener nofollow\"><code>proc.go:6743<\/code><\/a>):<\/p>\n<blockquote>\n<p>Retake the P if it\u2019s there for more than 1 sysmon tick (at least 20us).<\/p>\n<\/blockquote>\n<p>\u041e\u0442\u043e\u0431\u0440\u0430\u0442\u044c P, \u0435\u0441\u043b\u0438 \u0442\u043e\u0442 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0434\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0438\u043a\u0430 sysmon, \u043c\u0438\u043d\u0438\u043c\u0443\u043c 20 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434. \u00ab\u041c\u0438\u043d\u0438\u043c\u0443\u043c\u00bb \u0437\u0434\u0435\u0441\u044c \u0432\u0430\u0436\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e: sysmon \u0441\u043f\u0438\u0442 \u043e\u0442 20 \u043c\u043a\u0441 \u0434\u043e 10 \u043c\u0441, \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u043b\u0430\u0432\u0430\u0435\u0442. \u0418 \u0435\u0441\u0442\u044c \u043b\u044c\u0433\u043e\u0442\u0430: \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u044d\u0442\u043e\u0433\u043e P \u043f\u0443\u0441\u0442\u0430, \u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438 \u0442\u0430\u043a \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0440\u0443\u043a (\u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u044e\u0449\u0438\u0435 P \u0438\u043b\u0438 \u043f\u043e\u0442\u043e\u043a\u0438 \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u0440\u0430\u0431\u043e\u0442\u044b), \u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u044e\u0442 \u043f\u0435\u0440\u0432\u044b\u0435 10 \u043c\u0441: \u0441\u043f\u0435\u0448\u0438\u0442\u044c \u043d\u0435\u043a\u0443\u0434\u0430.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0432 \u0434\u0435\u043b\u043e \u0432\u0441\u0442\u0443\u043f\u0430\u0435\u0442 <code>handoffp<\/code>: \u043e\u0442\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 P \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0443. \u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0435\u0435 \u0442\u0435\u043b\u0430 (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L3147-L3148\" rel=\"noopener nofollow\"><code>proc.go:3147<\/code><\/a>): \u043e\u043d\u0430 \u043e\u0431\u044f\u0437\u0430\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0432 \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0433\u0434\u0435 \u0443 \u044d\u0442\u043e\u0433\u043e P \u043d\u0430\u0448\u043b\u0430\u0441\u044c \u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430. \u0417\u0434\u0435\u0441\u044c, \u043a\u0441\u0442\u0430\u0442\u0438, \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0437\u0430\u0447\u0435\u043c \u0432 \u0441\u0445\u0435\u043c\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0443\u043a\u0432\u0430 P. \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a \u043f\u043e\u0442\u043e\u043a\u0443: \u043f\u043e\u0442\u043e\u043a\u0438 \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u044e\u0442 \u0432 \u044f\u0434\u0440\u0435 \u0438 \u043f\u043b\u043e\u0434\u044f\u0442\u0441\u044f, \u0430 \u043f\u0440\u0430\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c Go-\u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0431\u043e\u0440\u043e\u0442\u0435. P \u0438 \u0435\u0441\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u0438\u0437 \u0440\u0443\u043a \u0432 \u0440\u0443\u043a\u0438.<\/p>\n<p>\u0410 \u043d\u0430\u0448 \u0437\u0430\u0441\u0442\u0440\u044f\u0432\u0448\u0438\u0439 \u043f\u043e\u0442\u043e\u043a? \u0415\u0433\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442, \u043e\u043d \u0434\u043e\u0441\u0438\u0436\u0438\u0432\u0430\u0435\u0442 \u0432 \u044f\u0434\u0440\u0435. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f, <code>exitsyscall<\/code> \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u0442 \u0442\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043f\u043e \u0446\u0435\u043d\u0435: P \u0432\u0441\u0435 \u0435\u0449\u0435 \u043c\u043e\u0439 (\u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0443\u0442\u044c, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0431\u0435\u0436\u0430\u0442\u044c), P \u043e\u0442\u043e\u0431\u0440\u0430\u043b\u0438, \u043d\u043e \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 (\u0432\u0437\u044f\u0442\u044c \u0435\u0433\u043e), \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u043d\u0435\u0442 (\u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0435\u0434\u0435\u0442 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u043e\u0442\u043e\u043a \u043f\u0430\u0440\u043a\u0443\u0435\u0442\u0441\u044f).<\/p>\n<p>\u0412\u0440\u0435\u0437\u043a\u0430-\u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0447\u0438\u0442\u0430\u043b \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u044b. \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u0441\u0445\u0435\u043c\u044b \u0440\u0438\u0441\u0443\u044e\u0442 P \u0432 \u043e\u0441\u043e\u0431\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 <code><em>Psyscall<\/em><\/code><em>. \u0421 Go 1.26 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043d\u0435\u0442: \u0432 \u043a\u043e\u0434\u0435 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0433\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043c\u0435\u043d\u044c <\/em><code>Psyscall_unused<\/code> \u0441 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e \u00aba now-defunct state\u00bb (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/runtime2.go#L143-L146\" rel=\"noopener nofollow\"><code>runtime2.go:143<\/code><\/a>). \u0422\u0435\u043f\u0435\u0440\u044c P \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c <code>_Prunning<\/code>, \u0430 \u00ab\u0432 \u0432\u044b\u0437\u043e\u0432\u0435 \u0438\u043b\u0438 \u043d\u0435\u0442\u00bb \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0443 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b. \u0421\u0445\u0435\u043c\u044b \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u043e\u0439 \u00abP -&gt; syscall\u00bb \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/350\/469\/73a\/35046973a222c94fb72b8a6a3fe25a4f.png\" alt=\"\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432: \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043d\u044b\u0440\u043e\u043a \u0438 \u0434\u043e\u043b\u0433\u043e\u0435 \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u043d\u0438\u0435\" width=\"1170\" height=\"781\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/350\/469\/73a\/35046973a222c94fb72b8a6a3fe25a4f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/350\/469\/73a\/35046973a222c94fb72b8a6a3fe25a4f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432: \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043d\u044b\u0440\u043e\u043a \u0438 \u0434\u043e\u043b\u0433\u043e\u0435 \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u043d\u0438\u0435<\/figcaption><\/div>\n<\/figure>\n<h4>\u041e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a\u0438 \u0438 \u0433\u0434\u0435 \u0438\u0445 \u043f\u043e\u0442\u043e\u043b\u043e\u043a<\/h4>\n<p>\u041a\u043e\u043c\u0443 handoffp \u043e\u0442\u0434\u0430\u0435\u0442 P, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0437\u0430\u043d\u044f\u0442\u044b? \u041d\u0438\u043a\u043e\u043c\u0443: \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439. \u0426\u0435\u043f\u043e\u0447\u043a\u0430 <code>startm -&gt; newm -&gt; newosproc<\/code> \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c <code>clone(2)<\/code> \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430, \u043f\u0440\u0430\u0432\u0434\u0430, \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0438\u0449\u0435\u0442 \u0441\u043f\u044f\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0432 \u0437\u0430\u043f\u0430\u0441\u0435: \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0432\u0448\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u0443\u043c\u0438\u0440\u0430\u044e\u0442, \u0430 \u043f\u0430\u0440\u043a\u0443\u044e\u0442\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437 \u0434\u043e\u0440\u043e\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b (390 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443 \u043f\u0440\u043e\u0442\u0438\u0432 13 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u0441 \u0443\u0431\u043e\u0440\u043a\u043e\u0439). \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0430\u0441 \u043f\u0443\u0441\u0442, \u0440\u0430\u0441\u0442\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u041e\u0421.<\/p>\n<p>\u041e\u0442\u0441\u044e\u0434\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0435\u0445: \u0443 Go-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441 GOMAXPROCS=8 \u0432 <code>htop<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c 40 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430. GOMAXPROCS \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 Go-\u043a\u043e\u0434; \u043f\u043e\u0442\u043e\u043a\u0438, \u0437\u0430\u0441\u0442\u0440\u044f\u0432\u0448\u0438\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u0430\u0445, \u0432 \u043b\u0438\u043c\u0438\u0442 \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0442, \u043e \u0447\u0435\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043f\u0440\u044f\u043c\u043e. \u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u0443\u043d\u043e\u0441\u0438\u0442 \u043f\u043e\u0442\u043e\u043a, \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u043c\u043e\u043b\u0447\u0430 \u0437\u0430\u0432\u043e\u0434\u0438\u0442 \u043d\u043e\u0432\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043d\u0435 \u0432\u0441\u0442\u0430\u043b\u0438.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 (\u0434\u0435\u043c\u043e <a href=\"https:\/\/github.com\/dsbasko\/sandbox-gorutines\/tree\/main\/blocking_threads\" rel=\"noopener nofollow\"><code>blocking_threads<\/code><\/a>). \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u044e N \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0430\u0434\u0438\u0442\u0441\u044f \u043d\u0430 <a href=\"http:\/\/syscall.Read\" rel=\"noopener nofollow\"><code>syscall.Read<\/code><\/a> \u0438\u0437 \u043f\u0443\u0441\u0442\u043e\u0439 \u0442\u0440\u0443\u0431\u044b, \u0438 \u0441\u043c\u043e\u0442\u0440\u044e \u043c\u0435\u0442\u0440\u0438\u043a\u0443 <code>\/sched\/threads\/total<\/code>:<\/p>\n<pre><code class=\"bash\">go build -o \/tmp\/blocking_threads .\/blocking_threadsGOMAXPROCS=8 \/tmp\/blocking_threads 40<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>GOMAXPROCS = 8, \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 = 5\u0433\u043e\u0440\u0443\u0442\u0438\u043d \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u043c syscall = 40\u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u041e\u0421 \u0441\u0442\u0430\u043b\u043e             = 43<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043e\u0440\u043e\u043a \u0437\u0430\u043b\u0438\u043f\u0448\u0438\u0445 \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u0441\u043e\u0440\u043e\u043a \u0442\u0440\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u043f\u0440\u0438 GOMAXPROCS=8. \u0421\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438 \u0434\u0430\u043b\u044c\u0448\u0435: \u0441\u0442\u043e \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u0434\u0430\u044e\u0442 103 \u043f\u043e\u0442\u043e\u043a\u0430. \u041f\u043e\u0442\u043e\u043b\u043e\u043a \u0437\u0434\u0435\u0441\u044c \u043e\u0434\u0438\u043d, \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 <code>maxmcount<\/code> = 10 000 (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L876\" rel=\"noopener nofollow\"><code>proc.go:876<\/code><\/a>), \u0438 \u0434\u043e \u043d\u0435\u0435 \u043c\u044b \u0435\u0449\u0435 \u0434\u043e\u0439\u0434\u0435\u043c.<\/p>\n<p>\u041c\u043e\u043b\u0447\u0430, \u043d\u043e \u043d\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e. \u041f\u043e\u043c\u043d\u0438\u0448\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443-\u043f\u0440\u0435\u0434\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438? <code>sched.maxmcount = 10000<\/code>, \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0435\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L982-L986\" rel=\"noopener nofollow\"><code>proc.go:982<\/code><\/a>): \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0444\u043e\u0440\u043a-\u0431\u043e\u043c\u0431\u044b, \u00abmillions of goroutines blocking on system calls, causing the runtime to create millions of threads\u00bb. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043f\u0440\u0435\u0434\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c \u0434\u0435\u043c\u043e <a href=\"https:\/\/github.com\/dsbasko\/sandbox-gorutines\/tree\/main\/thread_exhaustion\" rel=\"noopener nofollow\"><code>thread_exhaustion<\/code><\/a>: \u043b\u0438\u043c\u0438\u0442 \u043e\u043f\u0443\u0449\u0435\u043d \u0434\u043e 12, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0436\u0434\u0430\u0442\u044c, \u0438 50 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u0443\u0445\u043e\u0434\u044f\u0442 \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u0442\u0440\u0443\u0431\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0438\u0448\u0435\u0442:<\/p>\n<pre><code class=\"go\">\/\/ thread_exhaustion\/main.go (\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442)debug.SetMaxThreads(12)for i := 0; i &lt; 50; i++ {go func() {buf := make([]byte, 1)syscall.Read(fds[0], buf) \/\/ \u0432 \u0442\u0440\u0443\u0431\u0443 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0438\u0448\u0435\u0442}()}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\u043b\u0438\u043c\u0438\u0442 \u043f\u043e\u0442\u043e\u043a\u043e\u0432: 12, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e 50 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u0441 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u043c syscall.Readruntime: program exceeds 12-thread limitfatal error: thread exhaustion<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412\u043e\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043c\u0430\u0433\u0438\u0438. \u041c\u0438\u043b\u043b\u0438\u043e\u043d \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0430\u0445: \u043d\u043e\u0440\u043c\u0430, 2.6 \u0413\u0411 \u043f\u0430\u043c\u044f\u0442\u0438. \u0414\u0435\u0441\u044f\u0442\u044c \u0442\u044b\u0441\u044f\u0447 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u043b\u0438\u043f\u0448\u0438\u0445 \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u0430\u0445: \u0441\u043c\u0435\u0440\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041b\u0438\u043c\u0438\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b, \u0430 \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u043e\u0434 \u043d\u0438\u043c\u0438.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4b0\/fb6\/d70\/4b0fb6d70406df829363b3a66ac1a0a2.png\" alt=\"\u041f\u043e\u0442\u043e\u043a\u0438 \u0440\u0430\u0441\u0442\u0443\u0442 \u043f\u043e\u0434 \u0437\u0430\u0441\u0442\u0440\u044f\u0432\u0448\u0438\u043c\u0438 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438\" width=\"1170\" height=\"797\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/4b0\/fb6\/d70\/4b0fb6d70406df829363b3a66ac1a0a2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4b0\/fb6\/d70\/4b0fb6d70406df829363b3a66ac1a0a2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u0442\u043e\u043a\u0438 \u0440\u0430\u0441\u0442\u0443\u0442 \u043f\u043e\u0434 \u0437\u0430\u0441\u0442\u0440\u044f\u0432\u0448\u0438\u043c\u0438 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438<\/figcaption><\/div>\n<\/figure>\n<h4>\u0421\u0435\u0442\u044c: \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0431\u0435\u0437 \u043f\u043e\u0442\u043e\u043a\u0430<\/h4>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u043e\u043a\u0443\u0441 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430. \u041f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u0432\u044b\u0448\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 10 000 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0443\u043c\u0435\u0440\u0435\u0442\u044c \u043e\u0442 thread exhaustion, \u0432\u0435\u0434\u044c \u043a\u0430\u0436\u0434\u043e\u0435 <a href=\"http:\/\/conn.Read\" rel=\"noopener nofollow\"><code>conn.Read<\/code><\/a><code>()<\/code> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432. \u041d\u0435 \u0443\u043c\u0438\u0440\u0430\u0435\u0442, \u0438 \u0432\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043e\u043a\u0435\u0442 \u0432 Go \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u043c (\u043d\u0430 Linux \u044d\u0442\u043e \u0444\u043b\u0430\u0433 <code>SOCK_NONBLOCK<\/code> \u043f\u0440\u044f\u043c\u043e \u0432 \u0432\u044b\u0437\u043e\u0432\u0435 socket, \u043d\u0430 macOS \u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c), \u0438 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0442\u0443\u0442 \u0436\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u043f\u043e\u043b\u043b\u0435\u0440\u0435 (epoll \u043d\u0430 Linux, kqueue \u043d\u0430 macOS), \u0442\u043e\u043c \u0441\u0430\u043c\u043e\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0435 \u00ab\u044f\u0434\u0440\u043e, \u0441\u043a\u0430\u0436\u0438, \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u043e\u043a\u0435\u0442\u043e\u0432 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0435\u00bb. \u041a\u043e\u0433\u0434\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0437 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0441\u043e\u043a\u0435\u0442\u0430, \u0432\u044b\u0437\u043e\u0432 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 EAGAIN (\u00ab\u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0442, \u043f\u0440\u0438\u0445\u043e\u0434\u0438 \u043f\u043e\u0437\u0436\u0435\u00bb), \u043f\u043e\u0442\u043e\u043a \u043d\u0435 \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u0435\u0442 \u043d\u0438 \u043d\u0430 \u0442\u0430\u043a\u0442. \u0420\u0430\u043d\u0442\u0430\u0439\u043c \u043b\u043e\u0432\u0438\u0442 EAGAIN \u0438 \u043f\u0430\u0440\u043a\u0443\u0435\u0442 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c <code>gopark<\/code> \u0441 \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 <code>IO wait<\/code>. \u0412\u0441\u0435: \u0436\u0434\u0443\u0449\u0435\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 epoll \u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u043f\u044f\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>g<\/code>. \u041d\u0438 \u043f\u043e\u0442\u043e\u043a\u0430, \u043d\u0438 P.<\/p>\n<p>\u041a\u0442\u043e \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442? \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u00ab\u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u0435\u0442\u0438\u00bb \u0432 Go \u043d\u0435\u0442, \u0438 \u044d\u0442\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043b\u043e\u043c\u0430\u0435\u0442 \u0438\u043d\u0442\u0443\u0438\u0446\u0438\u044e. \u041e\u043f\u0440\u043e\u0441 \u044f\u0434\u0440\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u0446\u0438\u043a\u043b \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b: \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0442\u043e\u043a, \u0438\u0449\u0443\u0449\u0438\u0439 \u0441\u0435\u0431\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443, \u043c\u0435\u0436\u0434\u0443 \u0434\u0435\u043b\u043e\u043c \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 netpoll \u00ab\u0430 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432 \u043b\u0438 \u043a\u0442\u043e \u0438\u0437 \u0441\u043e\u043a\u0435\u0442\u043e\u0432\u00bb (\u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d \u00abThis netpoll is only an optimization before we resort to stealing\u00bb, <a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L3502\" rel=\"noopener nofollow\"><code>proc.go:3502<\/code><\/a>). \u0415\u0441\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u043e\u0434\u0440\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u0441\u044b\u043f\u0430\u0435\u0442 \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 netpoll \u0438 \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u0435\u0442\u0438. \u0410 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0437\u0430\u043d\u044f\u0442\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0432 \u043f\u043e\u0438\u0441\u043a \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u0442, \u0441\u0442\u0440\u0430\u0445\u0443\u0435\u0442 sysmon: \u043e\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0441\u0435\u0442\u044c \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0438 \u043d\u0435 \u043f\u043e\u0437\u0436\u0435 10 \u043c\u0441 \u043d\u0430\u0437\u0430\u0434.<\/p>\n<h4>\u0424\u0430\u0439\u043b \u043d\u0435 \u0441\u043e\u043a\u0435\u0442<\/h4>\n<p>\u0418 \u0432\u043e\u0442 \u0440\u0430\u0437\u0432\u044f\u0437\u043a\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u0430-\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f. \u0421 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0444\u043e\u043a\u0443\u0441 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. <code>os.OpenFile<\/code> \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0432 \u043f\u043e\u043b\u043b\u0435\u0440\u0435, \u043d\u043e epoll \u043d\u0430 Linux \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0449\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/os\/file_unix.go#L212-L216\" rel=\"noopener nofollow\"><code>os\/file_unix.go:212<\/code><\/a>):<\/p>\n<blockquote>\n<p>An error here indicates a failure to register with the netpoll system. That can happen for a file descriptor that is not supported by epoll\/kqueue; for example, disk files on Linux systems.<\/p>\n<\/blockquote>\n<p>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u0430\u0434\u0430\u0435\u0442, \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c, \u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u0441 \u0434\u0438\u0441\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c: \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043d\u044f\u0442 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0441\u043f\u0430\u0441\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430 retake \u0438 \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438. \u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435: \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441 10 000 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u043e\u0439\u0434\u0435\u0442\u0441\u044f \u0433\u043e\u0440\u0441\u0442\u043a\u043e\u0439 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441 10 000 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432\u0438\u0441\u044f\u0449\u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u0439 \u0441 \u0434\u0438\u0441\u043a\u0430 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u044b\u0441\u044f\u0447\u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0438 \u0443\u043f\u0440\u0435\u0442\u0441\u044f \u0432 \u043b\u0438\u043c\u0438\u0442\u044b. \u00ab\u0412 Go \u0432\u0435\u0441\u044c I\/O \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439\u00bb \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0438\u0444\u043e\u043c: \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430 \u0441\u0435\u0442\u044c, \u0430 \u0434\u0438\u0441\u043a \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0438.<\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u0442\u0440\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0444\u0430\u043a\u0442\u0430. <code>time.Sleep<\/code> \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442: \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u043f\u0430\u0440\u043a\u0443\u0435\u0442\u0441\u044f, \u0430 \u0442\u0430\u0439\u043c\u0435\u0440 \u043b\u043e\u0436\u0438\u0442\u0441\u044f \u0432 \u043a\u0443\u0447\u0443 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432 \u0441\u0432\u043e\u0435\u0433\u043e P (\u0441 1.14 \u0442\u0430\u0439\u043c\u0435\u0440\u044b \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 P, \u0430 \u043d\u0435 \u0432 \u043e\u0431\u0449\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0438\u0437 64 \u043a\u043e\u0440\u0437\u0438\u043d), \u0438 \u0431\u0443\u0434\u0438\u0442 \u0435\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0438\u0439 \u0442\u0430\u0439\u043c\u0435\u0440\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b. \u0412\u044b\u0437\u043e\u0432\u044b C \u0447\u0435\u0440\u0435\u0437 cgo \u0434\u043b\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043d\u0435\u043e\u0442\u043b\u0438\u0447\u0438\u043c\u044b \u043e\u0442 syscall: \u043f\u043e\u0442\u043e\u043a \u043f\u043e\u0442\u0435\u0440\u044f\u043d \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430. \u0410 <code>runtime.LockOSThread<\/code> \u043f\u0440\u0438\u0431\u0438\u0432\u0430\u0435\u0442 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443 \u043a \u043f\u043e\u0442\u043e\u043a\u0443 \u043d\u0430\u043c\u0435\u0440\u0442\u0432\u043e, \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043d\u0430 \u043f\u043e\u0442\u043e\u043a \u0432\u0440\u043e\u0434\u0435 GUI \u0438 OpenGL.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c9c\/818\/73b\/c9c81873bb57350d9e1bc8b8819a3bd6.png\" alt=\"\u0420\u0430\u0437\u0432\u044f\u0437\u043a\u0430: \u0441\u043e\u043a\u0435\u0442 \u0441\u043f\u0438\u0442 \u0431\u0435\u0437 \u043f\u043e\u0442\u043e\u043a\u0430, \u0444\u0430\u0439\u043b \u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u0442\u043e\u043a\" width=\"1170\" height=\"794\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c9c\/818\/73b\/c9c81873bb57350d9e1bc8b8819a3bd6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c9c\/818\/73b\/c9c81873bb57350d9e1bc8b8819a3bd6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0430\u0437\u0432\u044f\u0437\u043a\u0430: \u0441\u043e\u043a\u0435\u0442 \u0441\u043f\u0438\u0442 \u0431\u0435\u0437 \u043f\u043e\u0442\u043e\u043a\u0430, \u0444\u0430\u0439\u043b \u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u0442\u043e\u043a<\/figcaption><\/div>\n<\/figure>\n<h3>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430<\/h3>\n<p>\u0412\u0441\u0435, \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438 \u0437\u0430 \u0442\u0440\u0438 \u0447\u0430\u0441\u0442\u0438, \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041f\u043e\u0440\u0430 \u043f\u0440\u043e\u0439\u0442\u0438 \u0435\u0435 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438: \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u044c schedtrace.<\/p>\n<h4>\u041a\u0440\u0443\u0433 \u0431\u0435\u0437 \u043d\u0430\u0447\u0430\u043b\u0430<\/h4>\n<p>\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a Go \u043d\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>schedule()<\/code>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043a\u0440\u0443\u0442\u0438\u0442 \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435 g0. \u041e\u043d\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u0440\u0438 \u0432\u0435\u0449\u0438: \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443 (<code>findRunnable<\/code>), \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0435\u0435 \u0431\u0435\u0433\u0443\u0449\u0435\u0439 \u0438 \u043f\u0440\u044b\u0433\u0430\u0435\u0442 \u0432 \u043d\u0435\u0435 (<code>execute<\/code>). \u0423 <code>schedule<\/code> \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u00abNever returns\u00bb (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L4148-L4150\" rel=\"noopener nofollow\"><code>proc.go:4149<\/code><\/a>), \u0438 \u044d\u0442\u043e \u043d\u0435 \u0444\u0438\u0433\u0443\u0440\u0430 \u0440\u0435\u0447\u0438: \u0438\u0437 <code>execute<\/code> \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430. \u041a\u0440\u0443\u0433 \u0437\u0430\u043c\u044b\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0438 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438: \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0432\u0448\u0430\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 goexit \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 <code>schedule()<\/code>, \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0432\u0448\u0430\u044f\u0441\u044f \u0447\u0435\u0440\u0435\u0437 gopark \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0442\u0443\u0434\u0430 \u0436\u0435. \u0412\u0435\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0435\u0441\u043e \u0431\u0435\u0437 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0435\u0441\u0438\u043a\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c66\/47b\/82c\/c6647b82ca477faa7a51d4fc6b722243.png\" alt=\"\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a: \u0432\u0435\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0435\u0441\u043e \u0431\u0435\u0437 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0430\" width=\"1170\" height=\"779\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c66\/47b\/82c\/c6647b82ca477faa7a51d4fc6b722243.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c66\/47b\/82c\/c6647b82ca477faa7a51d4fc6b722243.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a: \u0432\u0435\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0435\u0441\u043e \u0431\u0435\u0437 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0430<\/figcaption><\/div>\n<\/figure>\n<h4>\u041b\u0435\u0441\u0442\u043d\u0438\u0446\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b<\/h4>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 <code>findRunnable<\/code>: \u0433\u0434\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0442\u043e\u043a \u0438\u0449\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443. \u0412 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u00ab\u0432\u043e\u0441\u0435\u043c\u044c \u0448\u0430\u0433\u043e\u0432 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u00bb; \u0447\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0434\u0438, \u0432 \u043a\u043e\u0434\u0435 Go 1.27 \u044f \u043d\u0430\u0441\u0447\u0438\u0442\u0430\u043b \u043e\u043a\u043e\u043b\u043e \u0442\u0440\u0438\u043d\u0430\u0434\u0446\u0430\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0441 \u043f\u0435\u0440\u0435\u0437\u0430\u0445\u043e\u0434\u0430\u043c\u0438, \u043d\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u043e\u0441\u0435\u043c\u044c \u0441\u0442\u0443\u043f\u0435\u043d\u0435\u0439. \u0412\u043e\u0442 \u043e\u043d\u0438, \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L3404\" rel=\"noopener nofollow\"><code>proc.go:3404<\/code><\/a>):<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0442\u0430\u0439\u043c\u0435\u0440\u044b \u0441\u0432\u043e\u0435\u0433\u043e P (\u0432\u0434\u0440\u0443\u0433 \u0447\u0435\u0439-\u0442\u043e Sleep \u0438\u0441\u0442\u0435\u043a).<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0432\u043e\u0440\u043a\u0435\u0440\u0443 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430, \u0435\u0441\u043b\u0438 \u0438\u0434\u0435\u0442 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 61-\u0439 \u0442\u0438\u043a: \u043e\u0434\u043d\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0438\u0437 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0432\u043e\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c.<\/p>\n<\/li>\n<li>\n<p>\u0413\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u0430\u0447\u043a\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043f\u0440\u043e\u0441\u0438\u0442\u044c netpoll: \u043d\u0435 \u0433\u043e\u0442\u043e\u0432 \u043b\u0438 \u043a\u0442\u043e \u0438\u0437 \u0441\u043e\u043a\u0435\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0423\u043a\u0440\u0430\u0441\u0442\u044c \u0443 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 (work stealing).<\/p>\n<\/li>\n<li>\n<p>\u0421\u0434\u0430\u0442\u044c P \u0438 \u0443\u0441\u043d\u0443\u0442\u044c.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u043d: \u044d\u0442\u043e \u043b\u0435\u0441\u0442\u043d\u0438\u0446\u0430 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438. \u0421\u0432\u043e\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 \u0437\u0430\u043c\u043a\u043e\u0432, \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u0443\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0437\u044f\u0442\u044c <code>sched.lock<\/code>. Netpoll \u0445\u043e\u0434\u0438\u0442 \u043a \u044f\u0434\u0440\u0443. \u0412\u043e\u0440\u043e\u0432\u0441\u0442\u0432\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0447\u0443\u0436\u0438\u0435 P \u0441 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438, \u0430 \u0441\u043e\u043d \u0441\u0442\u043e\u0438\u0442 \u0446\u0435\u043b\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0430\u0440\u043a\u043e\u0432\u043a\u0438.<\/p>\n<p>\u041f\u043e\u043c\u0435\u043d\u044f\u0439 \u0441\u0442\u0443\u043f\u0435\u043d\u0438 \u043c\u0435\u0441\u0442\u0430\u043c\u0438, \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043b\u0438\u0431\u043e \u0437\u0430\u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 (\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043c\u043e\u043a \u0440\u0430\u043d\u044c\u0448\u0435 \u0441\u0432\u043e\u0435\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438), \u043b\u0438\u0431\u043e \u0441\u043e\u0436\u0436\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 (\u0432\u043e\u0440\u043e\u0432\u0441\u0442\u0432\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u0441\u0432\u043e\u0435\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438). \u041a\u0441\u0442\u0430\u0442\u0438, \u0432\u043e\u0442 \u0438 \u043e\u0442\u0432\u0435\u0442, \u0437\u0430\u0447\u0435\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f P: \u0442\u0443\u0434\u0430 \u0441\u0442\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0435\u043c\u0443 \u043d\u0435\u043a\u0443\u0434\u0430 \u0434\u0435\u0442\u044c\u0441\u044f, \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u0438 \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u0435\u0437 P.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/533\/f6f\/100\/533f6f1005475a29055cd24787512a9d.png\" alt=\"\u041b\u0435\u0441\u0442\u043d\u0438\u0446\u0430 findRunnable: \u0432\u043e\u0441\u0435\u043c\u044c \u0441\u0442\u0443\u043f\u0435\u043d\u0435\u0439 \u043f\u043e \u0446\u0435\u043d\u0435\" width=\"1170\" height=\"779\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/533\/f6f\/100\/533f6f1005475a29055cd24787512a9d.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/533\/f6f\/100\/533f6f1005475a29055cd24787512a9d.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041b\u0435\u0441\u0442\u043d\u0438\u0446\u0430 findRunnable: \u0432\u043e\u0441\u0435\u043c\u044c \u0441\u0442\u0443\u043f\u0435\u043d\u0435\u0439 \u043f\u043e \u0446\u0435\u043d\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0430\u0440\u0430 \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u043d\u0430 \u0441\u0442\u0443\u043f\u0435\u043d\u044f\u0445, \u043c\u0438\u043c\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0436\u0430\u043b\u043a\u043e \u043f\u0440\u043e\u0439\u0442\u0438. \u041f\u0430\u0447\u043a\u0430 \u0438\u0437 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 (\u0441\u0442\u0443\u043f\u0435\u043d\u044c 5) \u0432 \u043a\u043e\u0434\u0435 1.27 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u043e\u0439 <code>min(128, \u0432\u0441\u0435 \u0447\u0442\u043e \u0435\u0441\u0442\u044c, \u0440\u0430\u0437\u043c\u0435\u0440\/GOMAXPROCS+1)<\/code> (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L7351\" rel=\"noopener nofollow\"><code>proc.go:7351<\/code><\/a>): \u0432\u043e\u0437\u044c\u043c\u0438 \u0441\u0432\u043e\u044e \u0434\u043e\u043b\u044e, \u043e\u0441\u0442\u0430\u0432\u044c \u0434\u0440\u0443\u0433\u0438\u043c. \u041f\u0440\u0430\u0432\u0438\u043b\u043e 61-\u0433\u043e \u0442\u0438\u043a\u0430 \u0437\u043d\u0430\u043a\u043e\u043c\u043e \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u043d\u043e \u0441 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0433\u0434\u0435: \u0442\u0438\u043a \u0440\u0430\u0441\u0442\u0435\u0442 \u043d\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0435. \u0413\u043e\u0440\u0443\u0442\u0438\u043d\u0430, \u0432\u0437\u044f\u0442\u0430\u044f \u0438\u0437 \u0441\u043b\u043e\u0442\u0430 runnext (\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u043b\u043e\u0442 P \u043d\u0430 \u043e\u0434\u043d\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0440\u0430\u0437\u0431\u0443\u0436\u0435\u043d\u043d\u0443\u044e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438), \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043a\u0432\u0430\u043d\u0442 \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u0430 \u0438 \u0442\u0438\u043a \u043d\u0435 \u0434\u0432\u0438\u0433\u0430\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u00ab\u043f\u0435\u0440\u0435\u0434\u0430\u043b \u0432 \u043a\u0430\u043d\u0430\u043b, \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u043b, \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u00bb \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u043e\u0434\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0438 sysmon \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0435\u0442 \u0435\u0435 \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043a\u0430\u043a \u043e\u0434\u043d\u0443 \u0434\u043e\u043b\u0433\u0443\u044e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443.<\/p>\n<p>\u0412\u043e\u0440\u043e\u0432\u0441\u0442\u0432\u043e (\u0441\u0442\u0443\u043f\u0435\u043d\u044c 7) \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u0435\u0435, \u0447\u0435\u043c \u0442\u043e \u00ab\u0443\u043a\u0440\u0430\u0434\u0438 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0443 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u043e\u0442\u0434\u0435\u043b\u0430\u043b\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0412\u043e\u0440 \u0434\u0435\u043b\u0430\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u043f\u043e \u0447\u0443\u0436\u0438\u043c P \u0432 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 (\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043d\u0430 \u0432\u0437\u0430\u0438\u043c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u043b\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0439\u0442\u0438 \u0432\u0441\u0435\u0445 \u0440\u043e\u0432\u043d\u043e \u043f\u043e \u0440\u0430\u0437\u0443 \u0438 \u043d\u0435 \u0442\u043e\u043b\u043f\u0438\u0442\u044c\u0441\u044f \u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e P, <a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L3843\" rel=\"noopener nofollow\"><code>proc.go:3843<\/code><\/a>). \u0411\u0435\u0440\u0435\u0442 <code>n - n\/2<\/code> \u0433\u043e\u0440\u0443\u0442\u0438\u043d (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L7718\" rel=\"noopener nofollow\"><code>proc.go:7718<\/code><\/a>): \u043d\u0435 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443, \u0430 \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b, \u0447\u0442\u043e\u0431\u044b \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0443 \u0441\u043f\u044f\u0449\u0435\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430 \u0442\u043e\u0436\u0435 \u0443\u0435\u0437\u0436\u0430\u043b\u0430. \u0416\u0435\u0440\u0442\u0432\u0430 \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u043e \u043a\u0440\u0430\u0436\u0435 \u043d\u0435 \u0443\u0437\u043d\u0430\u0435\u0442: \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043a\u0430\u043a \u043a\u043e\u043b\u044c\u0446\u043e \u0441 \u0434\u0432\u0443\u043c\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430\u043c\u0438, \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u0445\u0432\u043e\u0441\u0442, \u0432\u043e\u0440 \u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u0433\u043e\u043b\u043e\u0432\u0443 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u00ab\u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c\u00bb, \u0430 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u0434\u0432\u0443\u0445 \u0432\u043e\u0440\u043e\u0432 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043e\u0434\u043d\u043e\u043c\u0443. \u0410 \u0447\u0443\u0436\u043e\u0439 \u0441\u043b\u043e\u0442 runnext \u0442\u0440\u043e\u0433\u0430\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c, \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u0435, \u0438 \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u0432\u043e\u0440 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0436\u0438\u0434\u0430\u0435\u0442 3 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b: \u0432\u0434\u0440\u0443\u0433 \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0441\u0430\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442 \u0441\u0432\u043e\u044e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u0441 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0439 \u043f\u0440\u044f\u043c\u043e\u0442\u043e\u0439 (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L7734-L7735\" rel=\"noopener nofollow\"><code>proc.go:7734<\/code><\/a>):<\/p>\n<blockquote>\n<p>A sync chan send\/recv takes ~50ns as of time of writing, so 3us gives ~50x overshoot.<\/p>\n<\/blockquote>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d1e\/abe\/728\/d1eabe7282d56a553f8de7c3565f7443.png\" alt=\"\u0412\u043e\u0440\u043e\u0432\u0441\u0442\u0432\u043e \u0431\u0435\u0437 \u0437\u0430\u043c\u043a\u043e\u0432: \u043a\u043e\u043b\u044c\u0446\u043e \u0441 \u0434\u0432\u0443\u043c\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430\u043c\u0438\" width=\"1170\" height=\"767\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/d1e\/abe\/728\/d1eabe7282d56a553f8de7c3565f7443.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d1e\/abe\/728\/d1eabe7282d56a553f8de7c3565f7443.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u043e\u0440\u043e\u0432\u0441\u0442\u0432\u043e \u0431\u0435\u0437 \u0437\u0430\u043c\u043a\u043e\u0432: \u043a\u043e\u043b\u044c\u0446\u043e \u0441 \u0434\u0432\u0443\u043c\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430\u043c\u0438<\/figcaption><\/div>\n<\/figure>\n<h4>Spinning: \u043d\u0435 \u0441\u043f\u0438\u0442, \u043d\u043e \u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/h4>\n<p>\u041e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0437\u0430\u0433\u0430\u0434\u043a\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430: \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u044b. \u0417\u0430\u0441\u043d\u0443\u0442\u044c? \u041f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0438\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430, \u0438 \u0435\u0441\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430, \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u043f\u043e\u043b\u043d\u0430. \u041d\u0435 \u0441\u043f\u0430\u0442\u044c? \u0416\u0435\u0447\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432\u043f\u0443\u0441\u0442\u0443\u044e. \u042d\u0442\u043e\u043c\u0443 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0443 \u0432 \u0448\u0430\u043f\u043a\u0435 <code>proc.go<\/code> \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d \u0441\u0430\u043c\u044b\u0439 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0444\u0430\u0439\u043b\u0430, \u00abWorker thread parking\/unparking\u00bb (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L37-L40\" rel=\"noopener nofollow\"><code>proc.go:37<\/code><\/a>), \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u0442\u0440\u0435\u0445 \u043e\u0442\u0432\u0435\u0440\u0433\u043d\u0443\u0442\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432:<\/p>\n<blockquote>\n<p>We need to balance between keeping enough running worker threads to utilize available hardware parallelism and parking excessive running worker threads to conserve CPU resources and power.<\/p>\n<\/blockquote>\n<p>\u0411\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u00ab\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043d\u044f\u0442\u044c \u0436\u0435\u043b\u0435\u0437\u043e\u00bb \u0438 \u00ab\u043f\u0430\u0440\u043a\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0431\u0435\u0440\u0435\u0447\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438 \u044d\u043d\u0435\u0440\u0433\u0438\u044e\u00bb. \u041e\u0442\u0432\u0435\u0442 Go \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f spinning. \u041f\u043e\u0442\u043e\u043a, \u043d\u0435 \u043d\u0430\u0448\u0435\u0434\u0448\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0437\u0430\u0445\u043e\u0434\u0430, \u043d\u0435 \u0437\u0430\u0441\u044b\u043f\u0430\u0435\u0442, \u0430 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f: \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0447\u0443\u0436\u0438\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0442\u0430\u0439\u043c\u0435\u0440\u044b, \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 netpoll. \u041e\u043d \u0436\u0436\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440, \u043d\u043e \u0437\u0430\u0442\u043e \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u0438\u0442 \u043d\u043e\u0432\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e, \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0434\u0432\u0430. \u041f\u0435\u0440\u0432\u043e\u0435: \u0441\u043f\u0438\u043d\u043d\u0435\u0440\u043e\u0432 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u0437\u0430\u043d\u044f\u0442\u044b\u0445 P, \u0438\u043d\u0430\u0447\u0435 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 \u0441 GOMAXPROCS=64 \u0438 \u043e\u0434\u043d\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u043e\u0439 63 \u043f\u043e\u0442\u043e\u043a\u0430 \u043a\u0440\u0443\u0442\u0438\u043b\u0438\u0441\u044c \u0431\u044b \u0432\u0445\u043e\u043b\u043e\u0441\u0442\u0443\u044e. \u0412\u0442\u043e\u0440\u043e\u0435: \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u0435\u0436\u0443\u0440\u0441\u0442\u0432\u0430. \u041a\u043e\u0433\u0434\u0430 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430, \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0431\u0443\u0434\u0438\u0442 \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043d\u0438 \u043e\u0434\u0438\u043d \u0441\u043f\u0438\u043d\u043d\u0435\u0440 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435 \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f (\u0442\u043e\u0442 \u0438 \u0442\u0430\u043a \u043d\u0430\u0439\u0434\u0435\u0442). \u0410 \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0431\u0435\u0437 \u0434\u0435\u0436\u0443\u0440\u043d\u043e\u0433\u043e, \u0441\u043f\u0438\u043d\u043d\u0435\u0440, \u043d\u0430\u0448\u0435\u0434\u0448\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0443, \u043e\u0431\u044f\u0437\u0430\u043d \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0441\u043c\u0435\u043d\u0443.<\/p>\n<p>\u0414\u0435\u0436\u0443\u0440\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u0432\u0430\u0435\u0442\u0441\u044f; \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u043f\u043e\u0441\u0442 \u043d\u0435 \u0431\u0440\u043e\u0441\u0430\u044e\u0442 \u043f\u0443\u0441\u0442\u044b\u043c \u0438 \u043d\u0435 \u043f\u043b\u043e\u0434\u044f\u0442 \u043b\u0438\u0448\u043d\u0438\u0445. \u0422\u0430\u043a \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u043d\u0435 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 \u0438 \u043d\u0435 \u0436\u0436\u0435\u0442 CPU \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u00ab\u043a\u0440\u0443\u0442\u0438\u043b\u0441\u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u0441\u043d\u0443\u0442\u044c\u00bb \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u043e\u043f\u0430\u0441\u043d\u044b\u043c \u043c\u0435\u0441\u0442\u043e\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430: \u043c\u0435\u0436\u0434\u0443 \u00ab\u0440\u0435\u0448\u0438\u043b\u00bb \u0438 \u00ab\u0437\u0430\u0441\u043d\u0443\u043b\u00bb \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443, \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043f\u0438\u043d\u043d\u0435\u0440\u0430 \u0438 \u043d\u0438\u043a\u043e\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0438\u0442\u044c. \u0420\u0430\u0431\u043e\u0442\u0430 \u043b\u0435\u0436\u0438\u0442, \u0432\u0441\u0435 \u0441\u043f\u044f\u0442. \u041f\u0440\u043e\u0442\u0438\u0432 \u044d\u0442\u043e\u0439 \u0433\u043e\u043d\u043a\u0438 \u0432 \u043a\u043e\u0434\u0435 \u0432\u044b\u0441\u0442\u0440\u043e\u0435\u043d \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0441 \u0431\u0430\u0440\u044c\u0435\u0440\u0430\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0432\u0441\u0435\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u00abDelicate dance\u00bb (\u0434\u0435\u043b\u0438\u043a\u0430\u0442\u043d\u044b\u0439 \u0442\u0430\u043d\u0435\u0446, <a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L3637-L3660\" rel=\"noopener nofollow\"><code>proc.go:3637<\/code><\/a>). \u0426\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0430 \u043f\u0440\u044f\u043c\u043e: \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0434\u0435\u0434\u043b\u043e\u043a\u0430. \u0415\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0447\u0435\u0448\u044c \u043f\u043e\u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0440\u0435\u0434\u043a\u0438\u0439 \u043a\u0443\u0441\u043e\u043a \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0438\u0438, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043e\u0442 \u043d\u0435\u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u044f, \u043d\u0430\u0447\u043d\u0438 \u0441 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f. \u042f \u043f\u0440\u043e\u0448\u0435\u043b \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043d\u0446\u0443 \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c <a href=\"https:\/\/t.me\/bascodeCh\/127\" rel=\"noopener nofollow\">\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0441\u0442\u0435<\/a>. \u0427\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0441\u043d\u0443\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u043f\u0443\u0441\u043a \u043b\u044e\u0431\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u0432\u0435\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430.<\/p>\n<h4>\u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0443\u043c: schedtrace<\/h4>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u0435\u0449\u0430\u043d\u043d\u043e\u0435. <code>GODEBUG=schedtrace=200<\/code> \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 sysmon \u0440\u0430\u0437 \u0432 200 \u043c\u0441 \u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u0434\u0435\u043c\u043e <a href=\"https:\/\/github.com\/dsbasko\/sandbox-gorutines\/tree\/main\/sched\" rel=\"noopener nofollow\"><code>sched<\/code><\/a>: \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043f\u043e \u0441\u043e\u0440\u043e\u043a \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 P (\u043d\u0430 \u044d\u0442\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 1280), \u043a\u0430\u0436\u0434\u0430\u044f \u0434\u043e\u043b\u0433\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u043f\u0438\u0442.<\/p>\n<pre><code class=\"bash\">go build -o \/tmp\/schedlab .\/schedGODEBUG=schedtrace=200 \/tmp\/schedlab<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>SCHED 201ms: gomaxprocs=32 idleprocs=0 threads=33 spinningthreads=0  needspinning=1 idlethreads=0 runqueue=674  [ 206 14 4 6 9 9 6 6 7 5 5 10 8 8 13 10 12 12 11 19 22 21 18 20 17 17 16 15 15 4 15 14 ]  schedticks=[ 14 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 13 ]<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>(\u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u0437\u0434\u0435\u0441\u044c \u043e\u043d\u0430 \u0440\u0430\u0437\u0431\u0438\u0442\u0430 \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435)<\/p>\n<p>\u0427\u0438\u0442\u0430\u0435\u043c \u043f\u043e \u043f\u043e\u043b\u044f\u043c, \u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u043d\u0430\u043a\u043e\u043c\u043e:<\/p>\n<ul>\n<li>\n<p><code>gomaxprocs=32<\/code>: \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u0434\u0432\u0430 P<\/p>\n<\/li>\n<li>\n<p><code>idleprocs=0<\/code>: \u0432\u0441\u0435 \u0437\u0430\u043d\u044f\u0442\u044b, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440<\/p>\n<\/li>\n<li>\n<p><code>threads=33<\/code>: \u043d\u0430 \u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c P, \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u0442\u0440\u0435\u0442\u0438\u0439 \u044d\u0442\u043e sysmon; \u0432\u044b\u0440\u0430\u0441\u0442\u0438 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0441\u0438\u043b\u044c\u043d\u043e, \u043c\u044b \u0431\u044b \u0437\u0430\u043f\u043e\u0434\u043e\u0437\u0440\u0438\u043b\u0438 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0432 syscall<\/p>\n<\/li>\n<li>\n<p><code>spinningthreads=0<\/code> \u0438 <code>needspinning=1<\/code>: \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0434\u0435\u0436\u0443\u0440\u043d\u044b\u0445 \u043d\u0435\u0442, \u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0443\u0436\u0435 \u0437\u0430\u043a\u0430\u0437\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e<\/p>\n<\/li>\n<li>\n<p><code>runqueue=674<\/code>: \u0434\u043b\u0438\u043d\u0430 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438<\/p>\n<\/li>\n<li>\n<p>\u0432 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445: \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u0438 \u0434\u0432\u0443\u0445 P; \u0441\u043d\u0438\u043c\u043e\u043a \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439 \u0438 \u043d\u0435\u0440\u043e\u0432\u043d\u044b\u0439 (\u043f\u0435\u0440\u0432\u043e\u043c\u0443 P \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043f\u0430\u043b\u0430 \u043f\u0430\u0447\u043a\u0430 \u043d\u0430 206 \u0433\u043e\u0440\u0443\u0442\u0438\u043d), \u0432\u043e\u0440\u043e\u0432\u0441\u0442\u0432\u043e \u0432\u044b\u0440\u043e\u0432\u043d\u044f\u0435\u0442<\/p>\n<\/li>\n<li>\n<p><code>schedticks<\/code>: \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e P, \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439, \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e 61 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u0442 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430, \u0438 \u0432 \u043d\u0435\u0439 \u0432\u0438\u0434\u043d\u0430 \u0432\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u044c: P \u0441 \u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044f\u043c\u0438, \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0430\u0441\u043d\u0438\u043a, \u0441\u043f\u0438\u043d\u043d\u0435\u0440\u044b, \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u043e\u0432\u0435\u0440\u0445. \u0414\u043e\u0431\u0430\u0432\u044c <code>scheddetail=1<\/code>, \u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e G, M \u0438 P \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e, \u0441\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u041e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u043e.<\/p>\n<h3>GC \u0438 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b: \u0441\u0442\u043e\u043f-\u043a\u0440\u0430\u043d, \u043d\u0430\u043b\u043e\u0433 \u0438 \u0431\u0435\u0441\u0441\u043c\u0435\u0440\u0442\u043d\u044b\u0435 \u0443\u0442\u0435\u0447\u043a\u0438<\/h3>\n<p>\u0421\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430 \u0437\u0430\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0435\u0439 \u0441\u0435\u0440\u0438\u0438, \u043d\u043e \u0442\u0440\u0438 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0441 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438 \u0434\u043e\u0441\u043a\u0430\u0436\u0443\u0442 \u043d\u0430\u0448 \u0441\u044e\u0436\u0435\u0442. \u041f\u0435\u0440\u0432\u043e\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u0438\u0441\u0442\u043e\u0440\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u044f\u043d\u0435\u0442\u0441\u044f \u0441 Go 1.2.<\/p>\n<h4>\u0417\u0430\u0447\u0435\u043c \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0443 \u0442\u0432\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440<\/h4>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0446\u0438\u043a\u043b \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u0432\u0430\u0436\u0434\u044b \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043c\u0438\u0440: \u043a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u043f\u0430\u0443\u0437\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u0432 \u043a\u043e\u043d\u0446\u0435. \u041a\u0430\u043a \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u00ab\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043c\u0438\u0440\u00bb? \u041f\u0435\u0440\u0435\u043a\u043b\u0438\u0447\u043a\u043e\u0439. \u0424\u0443\u043d\u043a\u0446\u0438\u044f stopTheWorld (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L1545\" rel=\"noopener nofollow\"><code>proc.go:1545<\/code><\/a>) \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u00ab\u0441\u043a\u043e\u043b\u044c\u043a\u043e P \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f\u00bb, \u0440\u0430\u0441\u0441\u044b\u043b\u0430\u0435\u0442 \u0432\u0441\u0435\u043c \u0431\u0435\u0433\u0443\u0449\u0438\u043c \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u0438 \u0436\u0434\u0435\u0442. \u0417\u0430\u043f\u0440\u043e\u0441 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u044c\u0431\u043e\u0439, \u0430 \u043d\u0435 \u043f\u0440\u0438\u043a\u0430\u0437\u043e\u043c: \u0444\u0443\u043d\u043a\u0446\u0438\u044f preemptall \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u0430 \u00abpurely best-effort\u00bb (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L6890-L6892\" rel=\"noopener nofollow\"><code>proc.go:6890<\/code><\/a>). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0446\u0438\u043a\u043b\u043e\u043c: \u043f\u043e\u0441\u043f\u0430\u0442\u044c 100 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434, \u0440\u0430\u0437\u043e\u0441\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u044c\u0431\u044b \u0435\u0449\u0435 \u0440\u0430\u0437, \u0438 \u0442\u0430\u043a \u043f\u043e\u043a\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043d\u0435 \u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043e \u043d\u0443\u043b\u044f (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/proc.go#L1705-L1711\" rel=\"noopener nofollow\"><code>proc.go:1705<\/code><\/a>).<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0438 \u044d\u0442\u043e \u0441 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439. \u0414\u043e Go 1.14 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0441 \u0446\u0438\u043a\u043b\u043e\u043c <code>for { i++ }<\/code> \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0441\u044c\u0431\u044b \u0432\u0435\u0447\u043d\u043e, \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u043b \u0434\u043e \u043d\u0443\u043b\u044f \u043d\u0438\u043a\u043e\u0433\u0434\u0430, \u0438 STW \u0432\u0438\u0441\u0435\u043b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0441\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439: \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e \u0434\u0435\u043c\u043e <a href=\"https:\/\/github.com\/dsbasko\/sandbox-gorutines\/tree\/main\/preempt\" rel=\"noopener nofollow\"><code>preempt<\/code><\/a> \u0441 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430\u043c\u0438. \u0412\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u0432 Go \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435 \u0440\u0430\u0434\u0438 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0441\u0442\u0438, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0436\u0435 \u043d\u0430\u0447\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0442\u043e\u043d\u044c\u0448\u0435. \u041c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043f\u0430\u0443\u0437\u0430\u043c\u0438 \u043c\u0438\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0430 \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c, \u0438 \u0441\u0442\u0435\u043a\u0438 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043e\u043d \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043f\u043e \u043e\u0434\u043d\u043e\u0439: \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u0447\u0435\u0440\u0435\u0437 suspendG (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/preempt.go#L106\" rel=\"noopener nofollow\"><code>preempt.go:106<\/code><\/a>, \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u043e\u0432\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u0435), \u043f\u043e\u0432\u0435\u0441\u0438\u043b \u043d\u0430 \u0441\u0442\u0430\u0442\u0443\u0441 \u0431\u0438\u0442 \u00ab\u0441\u0442\u0435\u043a \u0437\u0430\u043d\u044f\u0442 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c\u00bb, \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b, \u043e\u0442\u043f\u0443\u0441\u0442\u0438\u043b. \u041c\u0438\u0440 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u043d\u043e \u0442\u0432\u043e\u044e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0430\u0442\u044c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442.<\/p>\n<h4>\u041d\u0430\u043b\u043e\u0433 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0430\u0443\u0437\u044b<\/h4>\n<p>\u0410 \u0432\u043e\u0442 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0445\u0443\u0436\u0435, \u0438 \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432\u0441\u0435\u0439 \u0441\u0432\u044f\u0437\u043a\u0438. \u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0435\u0441\u0442\u044c \u0441\u0447\u0435\u0442 <code>gcAssistBytes<\/code>. \u041f\u043e\u043a\u0430 \u0438\u0434\u0435\u0442 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0430, \u043a\u0430\u0436\u0434\u044b\u0439 <code>make<\/code> \u0438 <code>append<\/code> \u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441 \u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u041a\u043e\u0433\u0434\u0430 \u0441\u0447\u0435\u0442 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u043c\u0438\u043d\u0443\u0441, \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u0441\u0440\u0430\u0437\u0443. \u0415\u0435 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430, \u0438 \u043e\u043d\u0430 \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u0447\u0443\u0436\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044f \u0434\u043e\u043b\u0433: \u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c, \u043c\u0438\u043d\u0438\u043c\u0443\u043c 64 \u041a\u0411 \u0441\u043a\u0430\u043d-\u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430 \u0440\u0430\u0437 (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/mgcpacer.go#L53-L56\" rel=\"noopener nofollow\"><code>mgcpacer.go:56<\/code><\/a>), \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u0435\u0440\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0435\u043b\u043e\u0447\u0438.<\/p>\n<p>\u041d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e mark assist, \u0438 \u0432\u043e\u0442 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u044f\u0437\u044b\u043a \u0441\u0438\u043c\u043f\u0442\u043e\u043c\u043e\u0432: \u0442\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 \u0432\u043e \u0432\u0440\u0435\u043c\u044f GC \u043d\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u00ab\u043f\u0430\u0443\u0437\u0430\u00bb, \u043f\u0430\u0443\u0437\u044b \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435. \u0422\u043e\u0440\u043c\u043e\u0437\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0435\u0435 <code>append<\/code> \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b \u0435\u0435 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c. \u041b\u043e\u0433\u0438\u043a\u0430 \u0436\u0435\u0441\u0442\u043a\u0430\u044f, \u043d\u043e \u0447\u0435\u0441\u0442\u043d\u0430\u044f: \u0435\u0441\u043b\u0438 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0448\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0440\u043a\u0435\u0440\u044b \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u044e\u0442, \u043a\u0443\u0447\u0430 \u0440\u0430\u0441\u0442\u0435\u0442 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e; \u043d\u0430\u043b\u043e\u0433 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u043e\u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439. \u0424\u043e\u043d\u043e\u0432\u044b\u043c \u0432\u043e\u0440\u043a\u0435\u0440\u0430\u043c, \u043a \u0441\u043b\u043e\u0432\u0443, \u0437\u0430\u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 0.25 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445, <a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/mgcpacer.go#L39\" rel=\"noopener nofollow\"><code>mgcpacer.go:39<\/code><\/a>), \u0438 \u0432\u043e\u0440\u043a\u0435\u0440 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u0441\u0442\u043e\u0438\u0442 \u0432 \u043b\u0435\u0441\u0442\u043d\u0438\u0446\u0435 findRunnable \u0432\u044b\u0448\u0435 \u0442\u0432\u043e\u0435\u0439 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438: \u0432\u043e\u0442 \u043a\u0442\u043e \u0432\u043a\u043b\u0438\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0442\u0432\u043e\u0438\u043c\u0438 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438 \u043d\u0430 \u0441\u0442\u0443\u043f\u0435\u043d\u0438 2.<\/p>\n<p>\u0423\u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0431\u0430 \u043d\u0430\u043b\u043e\u0433\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439: <code>GODEBUG=gctrace=1<\/code> \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443, \u0433\u0434\u0435 CPU-\u0432\u0440\u0435\u043c\u044f \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u043e \u043d\u0430 \u0442\u0440\u0438 \u0441\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0445, \u0438 \u043f\u0435\u0440\u0432\u043e\u0435 \u0438\u0437 \u043d\u0438\u0445 assist, \u0434\u043e\u043b\u044f, \u0432\u044b\u0431\u0438\u0442\u0430\u044f \u0438\u0437 \u0442\u0432\u043e\u0438\u0445 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0433\u043e\u0440\u0443\u0442\u0438\u043d. \u0410 <code>GODEBUG=gcstoptheworld=1<\/code> \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044f \u043a\u0430\u0436\u0434\u0443\u044e \u0432 \u043f\u043e\u043b\u043d\u0443\u044e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u043c\u0438\u0440\u0430: \u043c\u0430\u0448\u0438\u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043c\u0438\u0440 \u0431\u0435\u0437 \u0432\u0441\u0435\u0439 \u044d\u0442\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0438.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fde\/3a1\/33f\/fde3a133fe2eed748c5826d957e9d222.png\" alt=\"\u041d\u0430\u043b\u043e\u0433 \u043d\u0430 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438: mark assist\" width=\"1170\" height=\"773\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/fde\/3a1\/33f\/fde3a133fe2eed748c5826d957e9d222.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fde\/3a1\/33f\/fde3a133fe2eed748c5826d957e9d222.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041d\u0430\u043b\u043e\u0433 \u043d\u0430 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438: mark assist<\/figcaption><\/div>\n<\/figure>\n<h4>\u0423\u0442\u0435\u0447\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 GC \u043d\u0435 \u0447\u0438\u043d\u0438\u0442<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u043d\u0442\u0443\u0438\u0446\u0438\u044e \u00ab\u0432 Go \u0435\u0441\u0442\u044c GC, \u0437\u043d\u0430\u0447\u0438\u0442 \u0443\u0442\u0435\u0447\u0435\u043a \u043d\u0435\u0442\u00bb. \u0421\u0431\u043e\u0440\u0449\u0438\u043a \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u0442\u0435\u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043a\u043e\u0440\u043d\u0435\u043c \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 (\u0432 \u043a\u043e\u0434\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043e: \u00abregular GC \u2014 scan every goroutine\u00bb, <a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/mgcmark.go#L159-L161\" rel=\"noopener nofollow\"><code>mgcmark.go:159<\/code><\/a>). \u0413\u043e\u0440\u0443\u0442\u0438\u043d\u0430, \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0432\u0438\u0441\u0448\u0430\u044f \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435, \u0434\u043b\u044f GC \u043d\u0435\u043e\u0442\u043b\u0438\u0447\u0438\u043c\u0430 \u043e\u0442 \u0442\u043e\u0439, \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u043d\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u043a\u0443\u043d\u0434\u0443: \u0435\u0435 \u0441\u0442\u0435\u043a, \u0435\u0435 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f, \u0435\u0435 \u0431\u0443\u0444\u0435\u0440\u044b \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0436\u0438\u0432\u044b\u043c\u0438. \u0423\u0442\u0435\u0447\u043a\u0443 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043d\u0435 \u0447\u0438\u043d\u0438\u0442 \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0438\u0437 \u0432\u0441\u0435\u0445: \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0441\u0442\u043e\u0438\u0442 \u043d\u0435 \u043f\u043e\u0434 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c, \u0430 \u043d\u0430\u0434 \u043d\u0438\u043c, \u043e\u043d\u0430 \u0441\u0430\u043c\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043a\u043e\u0440\u043d\u0435\u0439. \u041a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u0431\u044b\u0442\u0430\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0438\u043d\u0438\u043c\u0443\u043c 2 \u041a\u0411 \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430, \u0438 \u0447\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0433\u043b\u0430\u0432\u0430: \u0443 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043e\u0442\u0432\u0435\u0442.<\/p>\n<h3>\u0421\u0432\u0435\u0436\u0435\u0435: Go 1.22-1.27<\/h3>\n<p>\u0424\u0438\u043d\u0438\u0448\u043d\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f: \u0447\u0442\u043e \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430 \u0442\u0435\u0431\u044f \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0440\u0435\u043b\u0438\u0437\u0430\u0445. \u041f\u043e\u0434\u0431\u043e\u0440 \u043f\u0440\u0438\u0441\u0442\u0440\u0430\u0441\u0442\u043d\u044b\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0442\u0440\u043e\u0433\u0430\u0435\u0442.<\/p>\n<h4>1.22: \u0431\u0430\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u043d\u0438\u043b\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0437\u044b\u043a\u0430<\/h4>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u043e\u0431\u0435\u0449\u0430\u043b \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0441\u0430\u043c\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u043e\u0432\u043e\u043c\u0443 \u0431\u0430\u0433\u0443 \u0432 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 Go. \u0412\u043e\u0442 \u043e\u043d:<\/p>\n<pre><code class=\"go\">for i := 0; i &lt; 3; i++ {go func() {fmt.Println(i)}()}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u043e Go 1.22 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0435\u0447\u0430\u0442\u0430\u043b <code>3 3 3<\/code>. \u0412\u0441\u0435 \u0442\u0440\u0438 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f \u043b\u043e\u0432\u0438\u043b\u0438 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>i<\/code> (\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u0442, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043d\u0435\u0447\u0435\u0433\u043e, \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435 \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0443), \u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0446\u0430 \u0446\u0438\u043a\u043b\u0430, \u043a\u043e\u0433\u0434\u0430 <code>i<\/code> \u0443\u0436\u0435 \u0440\u0430\u0432\u043d\u044f\u043b\u0430\u0441\u044c \u0442\u0440\u0435\u043c. \u041f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f \u0433\u043e\u0444\u0435\u0440\u043e\u0432 \u0437\u0430\u0443\u0447\u0438\u0432\u0430\u043b\u0438 \u0437\u0430\u043a\u043b\u0438\u043d\u0430\u043d\u0438\u044f <code>i := i<\/code> \u0438 <code>go func(i int) {...}(i)<\/code>.<\/p>\n<p>\u0412 Go 1.22 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u044f\u0437\u044b\u043a\u0430: \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0446\u0438\u043a\u043b\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e. \u0422\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 <code>0 1 2<\/code> \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0437\u0430\u043a\u043b\u0438\u043d\u0430\u043d\u0438\u044f \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. \u041e\u0434\u043d\u0430 \u043b\u043e\u0432\u0443\u0448\u043a\u0430 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c: \u043d\u043e\u0432\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439 <code>go 1.22<\/code> (\u0438\u043b\u0438 \u0432\u044b\u0448\u0435) \u0432 \u0444\u0430\u0439\u043b\u0435 <code>go.mod<\/code>, \u0430 \u043d\u0435 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u0448\u044c \u0441\u0442\u0430\u0440\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u043e\u0432\u044b\u043c Go, \u0438 \u0431\u0430\u0433 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u0448\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443.<\/p>\n<h4>1.24-1.25: \u0442\u0435\u0441\u0442\u044b \u0431\u0435\u0437 time.Sleep \u0438 WaitGroup \u0431\u0435\u0437 \u0431\u043e\u0439\u043b\u0435\u0440\u043f\u043b\u0435\u0439\u0442\u0430<\/h4>\n<p><code>testing\/synctest<\/code> (\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0432 1.24, \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0432 1.25) \u0437\u0430\u043a\u0440\u044b\u043b \u0432\u0435\u0447\u043d\u0443\u044e \u0431\u043e\u043b\u044c: \u0442\u0435\u0441\u0442\u044b \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0443\u0432\u0435\u0448\u0430\u043d\u043d\u044b\u0435 <code>time.Sleep(100 * time.Millisecond)<\/code>, \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435 \u0438 \u043c\u0438\u0433\u0430\u044e\u0449\u0438\u0435. \u0422\u0435\u0441\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u00ab\u043f\u0443\u0437\u044b\u0440\u0435\u00bb \u0441 \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u043c\u0438 \u0447\u0430\u0441\u0430\u043c\u0438, \u0441\u0442\u0430\u0440\u0442\u0443\u044e\u0449\u0438\u043c\u0438 \u0432 \u043f\u043e\u043b\u043d\u043e\u0447\u044c 2000-01-01. \u0412\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043f\u0443\u0437\u044b\u0440\u044f durably blocked: \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0442\u0430\u043a, \u0447\u0442\u043e \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u043b\u0438\u0448\u044c \u0434\u0440\u0443\u0433\u0430\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u043f\u0443\u0437\u044b\u0440\u044f. \u0422\u043e\u0433\u0434\u0430 \u0447\u0430\u0441\u044b \u043f\u0440\u044b\u0433\u0430\u044e\u0442 \u0441\u0440\u0430\u0437\u0443 \u043a \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u044f. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0446\u0435\u043d\u0443 \u0442\u0435\u0441\u0442\u0430, \u0432\u0438\u0434\u043d\u043e \u043d\u0430 \u043f\u0430\u0440\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0441 \u0441\u0435\u043a\u0443\u043d\u0434\u043d\u044b\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c (\u0434\u0435\u043c\u043e <a href=\"https:\/\/github.com\/dsbasko\/sandbox-gorutines\/tree\/main\/synctest_bubble\" rel=\"noopener nofollow\"><code>synctest_bubble<\/code><\/a>):<\/p>\n<pre><code>--- PASS: TestRealClock (1.00s)    \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f: 1.000233495s--- PASS: TestFakeClock (0.00s)    \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f: 27.821\u00b5s<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0435\u043a\u0443\u043d\u0434\u0430 \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0432\u043e\u0441\u044c\u043c\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434, \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u0448\u0435\u0441\u0442\u044c \u0442\u044b\u0441\u044f\u0447 \u0440\u0430\u0437. \u0421\u0443\u0442\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0443\u0437\u044b\u0440\u044f \u043e\u0431\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 4 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e: \u0434\u043b\u0438\u043d\u0430 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u0441\u0442\u0430 \u0432\u043e\u043e\u0431\u0449\u0435. \u0410 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u0432\u0440\u0435\u043c\u044f \u043d\u0438\u043a\u043e\u0433\u043e \u043d\u0435 \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442, synctest \u043f\u0430\u043d\u0438\u043a\u0443\u0435\u0442: \u044d\u0442\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0434\u0435\u0434\u043b\u043e\u043a. \u041f\u0443\u0437\u044b\u0440\u044c \u043d\u0435 \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043d\u0430\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439, \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0437\u043d\u0430\u0435\u0442 \u043e \u043d\u0435\u043c \u0432 \u0441\u0430\u043c\u043e\u043c \u0441\u0435\u0440\u0434\u0446\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430: \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u0447\u0438\u043d \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f, \u0442\u0430\u043a \u0432\u043e\u0442, \u0434\u043b\u044f \u043f\u0443\u0437\u044b\u0440\u0435\u0439 \u0442\u0430\u043c \u0437\u0430\u0432\u0435\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435, \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u043e\u0439 \u00ab(durable)\u00bb (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/runtime2.go#L1266-L1269\" rel=\"noopener nofollow\"><code>runtime2.go:1266<\/code><\/a>).<\/p>\n<p><code>sync.WaitGroup.Go<\/code> (1.25) \u0441\u0436\u0430\u043b \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u0442\u0440\u043e\u0439\u043a\u0443 <code>wg.Add(1)<\/code> \/ <code>go func()<\/code> \/ <code>defer wg.Done()<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u043e\u0432\u0438\u0447\u043a\u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u043f\u0443\u0442\u0430\u043b\u0438 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f Add. \u0412 1.25 \u0432\u0435\u0441\u044c \u043c\u0435\u0442\u043e\u0434 \u0441\u043e\u0441\u0442\u043e\u044f\u043b \u0438\u0437 \u0441\u0435\u043c\u0438 \u0441\u0442\u0440\u043e\u043a, \u0430 \u0432 1.26 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b\u0438, \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0430\u043d\u0438\u043a\u0438 (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/sync\/waitgroup.go#L236-L250\" rel=\"noopener nofollow\"><code>sync\/waitgroup.go:236<\/code><\/a>): \u0435\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0430\u043d\u0438\u043a\u0443\u0435\u0442, Done \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0418\u043d\u0430\u0447\u0435 Wait \u0432 main \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0431\u044b, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u0432\u044b\u0439\u0442\u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u0430\u043d\u0438\u043a\u0430 \u0434\u043e\u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442\u0441\u044f, \u0438 \u0443\u043f\u0430\u0432\u0448\u0438\u0439 \u0442\u0435\u0441\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u0431\u044b \u0437\u0435\u043b\u0435\u043d\u044b\u043c.<\/p>\n<h4>1.25: GOMAXPROCS \u043d\u0430\u0443\u0447\u0438\u043b\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440<\/h4>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445, \u043a\u0442\u043e \u043a\u0430\u0442\u0430\u0435\u0442 Go \u0432 Kubernetes. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0433\u0440\u0430\u0431\u043b\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u0442\u0430\u043a: \u043d\u043e\u0434\u0430 \u0441 64 \u044f\u0434\u0440\u0430\u043c\u0438, \u043b\u0438\u043c\u0438\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 2 CPU, GOMAXPROCS \u043f\u043e \u0441\u0442\u0430\u0440\u0438\u043d\u043a\u0435 \u0440\u0430\u0432\u0435\u043d 64, \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u0432 64 \u043f\u043e\u0442\u043e\u043a\u0430, \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432\u044b\u043b\u0435\u0442\u0430\u0435\u0442 \u0437\u0430 \u043a\u0432\u043e\u0442\u0443, \u0438 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u0435\u0440\u0438\u043e\u0434\u0430. CPU-\u0442\u0440\u043e\u0442\u0442\u043b\u0438\u043d\u0433 \u043d\u0430 \u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043b\u0435\u0447\u0438\u043b\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 uber-go\/automaxprocs.<\/p>\n<p>\u0421 Go 1.25 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0447\u0438\u0442\u0430\u0435\u0442 cgroup \u0441\u0430\u043c: GOMAXPROCS = \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0438\u0437 \u0447\u0438\u0441\u043b\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 CPU \u0438 \u043b\u0438\u043c\u0438\u0442\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043f\u0440\u0438\u0447\u0435\u043c \u0434\u0440\u043e\u0431\u043d\u0430\u044f \u043a\u0432\u043e\u0442\u0430 \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0432\u0435\u0440\u0445, \u0430 \u043d\u0438\u0436\u0435 \u0434\u0432\u0443\u0445 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u043d\u0435 \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f (\u043f\u043e\u0434 \u0441 limit 500m \u043f\u043e\u043b\u0443\u0447\u0438\u0442 GOMAXPROCS=2, \u0437\u0430\u043f\u0430\u0441 \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e). \u0411\u043e\u043b\u044c\u0448\u0435 \u0442\u043e\u0433\u043e, sysmon \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043b\u0438\u043c\u0438\u0442 \u043d\u0430 \u043b\u0435\u0442\u0443: \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438 \u043a\u0432\u043e\u0442\u0443 \u0436\u0438\u0432\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443, GOMAXPROCS \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430.<\/p>\n<p>\u041f\u043e\u0442\u0440\u043e\u0433\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437 \u0434\u043e\u043a\u0435\u0440\u0430, \u043e\u0434\u043d\u0438\u043c systemd-\u0441\u043a\u043e\u0443\u043f\u043e\u043c. \u0414\u0435\u043c\u043e <a href=\"https:\/\/github.com\/dsbasko\/sandbox-gorutines\/tree\/main\/cgroup_gomaxprocs\" rel=\"noopener nofollow\"><code>cgroup_gomaxprocs<\/code><\/a> \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0442\u0440\u0438 \u0447\u0438\u0441\u043b\u0430: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f\u0434\u0435\u0440 \u0432\u0438\u0434\u0438\u0442 \u0440\u0430\u043d\u0442\u0430\u0439\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e P \u043e\u043d \u0437\u0430\u0432\u0435\u043b \u0438 \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u0432 <code>cpu.max<\/code> \u0435\u0433\u043e cgroup.<\/p>\n<pre><code class=\"bash\">go build -o \/tmp\/gmp .\/cgroup_gomaxprocssystemd-run --user --scope -q -p CPUQuota=250% \/tmp\/gmp<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>NumCPU      = 32GOMAXPROCS  = 3cpu.max     = 250000 100000<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0432\u0435 \u0441 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043e\u0439 \u043a\u0432\u043e\u0442\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0432 \u0442\u0440\u0438 P: \u0434\u0440\u043e\u0431\u044c \u043e\u043a\u0440\u0443\u0433\u043b\u0438\u043b\u0430\u0441\u044c \u0432\u0432\u0435\u0440\u0445. \u0410 <code>NumCPU<\/code> \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0447\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c\u044e \u0434\u0432\u0443\u043c\u044f, \u043e\u043d \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u044f\u0434\u0440\u0430 \u043c\u0430\u0448\u0438\u043d\u044b, \u0430 \u043d\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430.<\/p>\n<p>\u041a\u0430\u043a \u0438 \u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0446\u0438\u043a\u043b\u0430, \u0443 \u043d\u043e\u0432\u0438\u043d\u043a\u0438 \u0435\u0441\u0442\u044c \u043b\u043e\u0432\u0443\u0448\u043a\u0430 \u0441 go.mod: \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0441 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439 <code>go 1.25<\/code> \u0438 \u0432\u044b\u0448\u0435, \u0441\u0442\u0430\u0440\u044b\u0439 go.mod \u0436\u0438\u0432\u0435\u0442 \u043f\u043e-\u0441\u0442\u0430\u0440\u043e\u043c\u0443. \u041e\u0442\u0441\u044e\u0434\u0430 \u0434\u0432\u0430 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 automaxprocs \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e go.mod \u0434\u043e\u0440\u043e\u0441 \u0434\u043e 1.25. \u0418 \u0441\u0442\u0430\u0440\u044b\u0439 \u0441\u043e\u0432\u0435\u0442 \u00ab\u043f\u043e\u0441\u0442\u0430\u0432\u044c runtime.GOMAXPROCS(runtime.NumCPU()) \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 main\u00bb \u0441\u0442\u0430\u043b \u0432\u0440\u0435\u0434\u043d\u044b\u043c: \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u0440\u0443\u0447\u043d\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0441\u0442\u0430\u0432\u0438\u0442 \u0444\u043b\u0430\u0433 \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u0441\u044e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u043a\u0443 \u043d\u0430\u0441\u043e\u0432\u0441\u0435\u043c, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u043b\u0435\u0436\u0435\u043d\u0438\u0435 \u0437\u0430 cgroup.<\/p>\n<h4>1.26: \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u00ab\u0447\u0435\u043c\u00bb, \u0430 \u043d\u0435 \u00ab\u0441\u043a\u043e\u043b\u044c\u043a\u043e\u00bb<\/h4>\n<p><code>runtime.NumGoroutine()<\/code> \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043e\u0434\u043d\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u0432\u0441\u0435 \u043b\u0438 \u0445\u043e\u0440\u043e\u0448\u043e. \u0412 1.26 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 <code>\/sched\/goroutines\/*<\/code>, \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0414\u0435\u043c\u043e <a href=\"https:\/\/github.com\/dsbasko\/sandbox-gorutines\/tree\/main\/sched_metrics\" rel=\"noopener nofollow\"><code>sched_metrics<\/code><\/a>: 100 \u0441\u043f\u044f\u0449\u0438\u0445 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043f\u043b\u044e\u0441 \u0441\u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0435\u0440\u0435\u043c \u0432\u0434\u0432\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u044f\u0434\u0435\u0440 (\u043d\u0430 32 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u044d\u0442\u043e 64):<\/p>\n<pre><code>GOMAXPROCS = 32, \u0441\u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0445 \u0433\u043e\u0440\u0443\u0442\u0438\u043d = 64, \u0441\u043f\u044f\u0449\u0438\u0445 = 100\/sched\/goroutines\/running:goroutines       = 32\/sched\/goroutines\/runnable:goroutines      = 33\/sched\/goroutines\/waiting:goroutines       = 105\/sched\/goroutines\/not-in-go:goroutines     = 0\/sched\/goroutines-created:goroutines       = 170\/sched\/threads\/total:threads               = 33<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e: \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f 32 (\u0440\u043e\u0432\u043d\u043e GOMAXPROCS, \u0431\u043e\u043b\u044c\u0448\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u043b\u044c\u0437\u044f), \u0435\u0449\u0435 33 \u0433\u043e\u0442\u043e\u0432\u044b \u0438 \u0436\u0434\u0443\u0442 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, 105 \u0441\u043f\u044f\u0442: \u0441\u0442\u043e \u043d\u0430\u0448\u0438\u0445 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 \u043f\u043b\u044e\u0441 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430. <code>runnable<\/code> &#8212; \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0437\u0434\u0435\u0441\u044c: \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0443\u043b\u044f, \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 NumGoroutine \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u043a\u0430\u0436\u0435\u0442. \u041c\u043e\u043d\u043e\u0442\u043e\u043d\u043d\u043e \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u0439 <code>waiting<\/code> &#8212; \u0434\u0430\u0442\u0447\u0438\u043a \u0443\u0442\u0435\u0447\u043a\u0438. \u0410 <code>not-in-go<\/code> &#8212; \u0442\u0435 \u0441\u0430\u043c\u044b\u0435 \u0437\u0430\u0441\u0442\u0440\u044f\u0432\u0448\u0438\u0435 \u0432 syscall \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<h4>1.26-1.27: \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0437\u0430\u043c\u0435\u0447\u0430\u0435\u0442 \u043c\u0435\u0440\u0442\u0432\u044b\u0445<\/h4>\n<p>\u0418 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043a\u043a\u043e\u0440\u0434 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438: \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0443\u0442\u0435\u0447\u0435\u043a \u0433\u043e\u0440\u0443\u0442\u0438\u043d (\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0432 1.26, \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0432 1.27, \u0432\u043a\u043b\u0430\u0434 Vlad Saioc \u0438\u0437 Uber). \u0418\u0434\u0435\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0432\u044b\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0443 GC, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438 \u0433\u043b\u0430\u0432\u043e\u0439 \u0432\u044b\u0448\u0435. \u041e\u0431\u044b\u0447\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u043e\u0440\u043d\u044f\u043c\u0438 \u0432\u0441\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b. \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u0430 \u0431\u0435\u0440\u0435\u0442 \u0432 \u043a\u043e\u0440\u043d\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c\u044b\u0435: \u0442\u0435, \u0447\u0442\u043e \u0431\u0435\u0433\u0443\u0442 \u0438\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0431\u0435\u0436\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u043f\u043e \u0438\u0442\u043e\u0433\u0430\u043c \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u043a\u0430\u043d\u0430\u043b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0438\u0441\u0438\u0442 \u0441\u043f\u044f\u0449\u0430\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430, \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c \u043d\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u0436\u0438\u0432\u043e\u0439, \u0437\u043d\u0430\u0447\u0438\u0442, \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u043a\u043e\u043c\u0443, \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0432\u0435\u0447\u043d\u043e, \u0443\u0442\u0435\u0447\u043a\u0430 \u0434\u043e\u043a\u0430\u0437\u0430\u043d\u0430. \u0422\u0430\u043a\u0430\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441 <code>_Gleaked<\/code> (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/runtime2.go#L94-L95\" rel=\"noopener nofollow\"><code>runtime2.go:94<\/code><\/a>) \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u044c.<\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043d\u0430 \u043f\u0430\u0440\u0435 \u0434\u0435\u043c\u043e \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \u0412 1.27 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 GOEXPERIMENT \u043d\u0435 \u043d\u0443\u0436\u0435\u043d: \u0441\u043e\u0431\u0438\u0440\u0430\u044e \u043e\u0431\u044b\u0447\u043d\u044b\u043c <code>go build<\/code> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u0441 <code>GOMAXPROCS=1<\/code> \u0434\u043b\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"bash\">go build -o \/tmp\/leak1 .\/leak_detectedGOMAXPROCS=1 \/tmp\/leak1<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0434\u0435\u043c\u043e, <a href=\"https:\/\/github.com\/dsbasko\/sandbox-gorutines\/tree\/main\/leak_detected\" rel=\"noopener nofollow\"><code>leak_detected<\/code><\/a>: \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443-\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u043e\u0448\u0438\u0431\u043a\u0435 \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u0430:<\/p>\n<pre><code>goroutineleak profile: total 11 @ 0x47d82a 0x41421c 0x413e17 0x4de954 0x483561#0x4de953main.earlyReturn.func1+0x33leak_detected\/main.go:12<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0439\u043c\u0430\u043d, \u0441 \u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f. \u0412\u0442\u043e\u0440\u043e\u0435 \u0434\u0435\u043c\u043e, <a href=\"https:\/\/github.com\/dsbasko\/sandbox-gorutines\/tree\/main\/leak_missed\" rel=\"noopener nofollow\"><code>leak_missed<\/code><\/a>, \u043f\u043e\u0447\u0442\u0438 \u0442\u0430\u043a\u043e\u0435 \u0436\u0435: \u043f\u044f\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u0435\u0439, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043e \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0447\u0435\u0442\u044b\u0440\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0437\u0430\u0432\u0438\u0441\u043b\u0438 \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430:<\/p>\n<pre><code>\u0436\u0438\u0432\u044b\u0445 \u0433\u043e\u0440\u0443\u0442\u0438\u043d: 5goroutineleak profile: total 0<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u043e\u043b\u044c. \u0410 \u0441\u0442\u0440\u043e\u043a\u0430 <code>\u0436\u0438\u0432\u044b\u0445 \u0433\u043e\u0440\u0443\u0442\u0438\u043d: 5<\/code> \u044d\u0442\u043e main \u043f\u043b\u044e\u0441 \u0447\u0435\u0442\u044b\u0440\u0435 \u0447\u0435\u0441\u0442\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0448\u0438\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u044f. Release notes \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043c\u044f\u0433\u043a\u043e: \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0443\u0442\u0435\u0447\u043a\u0443, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432 \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c \u0438\u0437 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043b\u0438 \u0438\u0437 \u0436\u0438\u0432\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b. \u0417\u0434\u0435\u0441\u044c \u043e\u043d \u043f\u0440\u043e\u043c\u0430\u0445\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u043f\u043e\u0447\u0442\u0438 \u0443\u0447\u0435\u0431\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0442\u043e\u0447\u043d\u0443\u044e \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442: \u0441\u0447\u0438\u0442\u0430\u0439 \u0441\u043b\u0435\u043f\u044b\u0435 \u0437\u043e\u043d\u044b \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438. \u0412\u044b\u0432\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438: \u043d\u0430\u0445\u043e\u0434\u043a\u0430 \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u0430 \u044d\u0442\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u0443\u0442\u0435\u0447\u043a\u0430, \u0430 \u043d\u043e\u043b\u044c \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0435 \u043d\u0435 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e; \u043f\u0440\u043e\u0444\u0438\u043b\u044c <code>\/debug\/pprof\/goroutine?debug=2<\/code> \u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0430 <code>waiting<\/code> \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u0432\u0430\u044e\u0442\u0441\u044f. \u0418 \u0443\u0447\u0442\u0438 \u0446\u0435\u043d\u0443: \u043a\u0430\u0436\u0434\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u044f <code>goroutineleak<\/code> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u043c\u0443\u0441\u043e\u0440\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3d1\/666\/426\/3d1666426d9c91f0f62d182afd45b2a1.png\" alt=\"\u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0443\u0442\u0435\u0447\u0435\u043a: \u0441\u0431\u043e\u0440\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430 \u043d\u0430\u0438\u0437\u043d\u0430\u043d\u043a\u0443\" width=\"1170\" height=\"770\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/3d1\/666\/426\/3d1666426d9c91f0f62d182afd45b2a1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3d1\/666\/426\/3d1666426d9c91f0f62d182afd45b2a1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0443\u0442\u0435\u0447\u0435\u043a: \u0441\u0431\u043e\u0440\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430 \u043d\u0430\u0438\u0437\u043d\u0430\u043d\u043a\u0443<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0435\u0449\u0435 \u0434\u0432\u0430 \u043f\u0443\u043d\u043a\u0442\u0430. Green Tea, \u043d\u043e\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438 GC (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441 1.26), \u0441\u043d\u0438\u0437\u0438\u043b \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 10-40%: \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430, \u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u043d\u0430\u043b\u043e\u0433\u0430 \u043d\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b. \u0410 \u043f\u043e\u0434 <code>iter.Pull<\/code> (\u0432 \u044f\u0437\u044b\u043a\u0435 \u0441 1.23) \u0436\u0438\u0432\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c coro, \u043f\u0440\u0438\u0435\u0445\u0430\u0432\u0448\u0438\u0439 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0435\u0449\u0435 \u0432 1.22, \u00abextra concurrency without extra parallelism\u00bb (<a href=\"https:\/\/github.com\/golang\/go\/blob\/go1.27.0\/src\/runtime\/coro.go#L12-L18\" rel=\"noopener nofollow\"><code>coro.go:12<\/code><\/a>): \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u0432 \u043e\u0431\u0445\u043e\u0434 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430; \u0432 \u043a\u043e\u0434\u0435 \u0435\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442 \u0441 \u043a\u0430\u043d\u0430\u043b\u043e\u043c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043e\u0434\u043d\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430. \u0412\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 Go, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u0430\u043b\u043e \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442.<\/p>\n<h3>\u0424\u0438\u043d\u0430\u043b: \u0441\u0435\u043c\u043d\u0430\u0434\u0446\u0430\u0442\u044b\u0439 \u0433\u043e\u0434 \u043f\u043e\u0434 \u0434\u0432\u0443\u043c\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438<\/h3>\n<p>\u041f\u0440\u043e\u0439\u0434\u0435\u043c \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u043e\u0434\u043d\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u0448\u0438\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438 \u0442\u0440\u0438 \u0447\u0430\u0441\u0442\u0438. <code>go f()<\/code> \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0437\u043e\u0432 newproc; \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 g \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0443\u043b\u0430 \u043c\u0435\u0440\u0442\u0432\u044b\u0445, \u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043a \u0438\u0437 \u043a\u0443\u0447\u0438 \u0438 \u043c\u0435\u0441\u0442\u043e \u0432 \u0441\u043b\u043e\u0442\u0435 runnext. \u041f\u043e\u0442\u043e\u043a, \u043a\u0440\u0443\u0442\u044f\u0449\u0438\u0439 schedule, \u0434\u043e\u0441\u0442\u0430\u0435\u0442 \u0435\u0435 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, execute \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0435 \u043a \u043f\u043e\u0442\u043e\u043a\u0443, gogo \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438\u0437 gobuf. \u041e\u043d\u0430 \u0431\u0435\u0436\u0438\u0442, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 (gopark, \u043f\u043e\u0442\u043e\u043a \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0431\u0435\u0440\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e) \u0438\u043b\u0438 \u043d\u0435 \u0434\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f (sysmon, 10 \u043c\u0441, SIGURG). \u0416\u0434\u0435\u0442 \u043e\u043d\u0430 \u0431\u0435\u0437 \u043f\u043e\u0442\u043e\u043a\u0430: \u0441\u043e\u043a\u0435\u0442 (\u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 epoll) \u0438\u043b\u0438 \u0442\u0430\u0439\u043c\u0435\u0440 (\u0432 \u043a\u0443\u0447\u0435 \u0441\u0432\u043e\u0435\u0433\u043e P). \u0414\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0432, \u043e\u043d\u0430 \u00ab\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f\u00bb \u0432 goexit, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u043b, \u0438 \u043b\u043e\u0436\u0438\u0442\u0441\u044f \u0432 \u043f\u0443\u043b \u0436\u0434\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e go f().<\/p>\n<p>\u0421\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u0441 2009 \u0433\u043e\u0434\u0430 \u043d\u0438 \u0440\u0430\u0437\u0443. \u0412\u0441\u0435 \u043f\u043e\u0434 \u043d\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b\u0438 \u0442\u0440\u0438\u0436\u0434\u044b.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/de0\/d8d\/cc6\/de0d8dcc6a8333666f755dac6a49f32d.png\" alt=\"\u0424\u0438\u043d\u0430\u043b \u0441\u0435\u0440\u0438\u0438: \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b\" width=\"1170\" height=\"589\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/de0\/d8d\/cc6\/de0d8dcc6a8333666f755dac6a49f32d.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/de0\/d8d\/cc6\/de0d8dcc6a8333666f755dac6a49f32d.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0424\u0438\u043d\u0430\u043b \u0441\u0435\u0440\u0438\u0438: \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043e\u0431\u0435\u0440\u0435\u043c \u0438 \u043c\u0438\u0444\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0440\u0438\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0430 \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041d\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u043a\u0430\u0436\u0443\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0410 \u0432 proc.go<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u00ab\u0413\u043e\u0440\u0443\u0442\u0438\u043d\u0430 &#8212; \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u0438\u0439 \u043f\u043e\u0442\u043e\u043a\u00bb<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 g \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u043c \u0432 \u043a\u0443\u0447\u0435; \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0435\u0435 \u043b\u044e\u0431\u043e\u0439 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 M<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u00ab\u041f\u0435\u0440\u0435\u0434 go func() \u0432 \u0446\u0438\u043a\u043b\u0435 \u043d\u0443\u0436\u043d\u043e i := i\u00bb<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421 1.22 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u0432\u043e\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 (\u0441\u043b\u0435\u0434\u0438 \u0437\u0430 go.mod)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u00ab\u0412 main \u043d\u0430\u0434\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c GOMAXPROCS(NumCPU())\u00bb<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0440\u0435\u0434\u043d\u043e \u0441 1.25: \u0440\u0443\u0447\u043d\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 cgroup<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u00ab\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a Go \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439\u00bb<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421 1.14 \u0434\u0432\u0430 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430: \u0444\u043b\u0430\u0433 \u0432 \u043f\u0440\u043e\u043b\u043e\u0433\u0435 \u043f\u043b\u044e\u0441 \u0441\u0438\u0433\u043d\u0430\u043b SIGURG<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u00ab\u0412 Go \u0432\u0435\u0441\u044c I\/O \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439\u00bb<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0435\u0442\u044c \u0447\u0435\u0440\u0435\u0437 netpoll, \u0444\u0430\u0439\u043b\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u043e\u0442\u043e\u043a \u0446\u0435\u043b\u0438\u043a\u043e\u043c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u00abGC \u0435\u0441\u0442\u044c, \u0437\u043d\u0430\u0447\u0438\u0442 \u0443\u0442\u0435\u0447\u0435\u043a \u043d\u0435\u0442\u00bb<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u0442\u0435\u043a\u0448\u0430\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 &#8212; \u0441\u0430\u043c\u0430 \u043a\u043e\u0440\u0435\u043d\u044c GC, \u0435\u0435 \u043d\u0435 \u0441\u043e\u0431\u0435\u0440\u0443\u0442 \u043d\u0438\u043a\u043e\u0433\u0434\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0418 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u043c\u0435\u0435\u0448\u044c \u0447\u0438\u0442\u0430\u0442\u044c: <code>runtime.NumGoroutine()<\/code> \u043a\u0430\u043a \u043f\u0435\u0440\u0432\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a; \u043c\u0435\u0442\u0440\u0438\u043a\u0438 <code>\/sched\/goroutines\/*<\/code> \u043a\u0430\u043a \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c; <code>\/debug\/pprof\/goroutine?debug=2<\/code> \u0441\u043e \u0441\u0442\u0435\u043a\u0430\u043c\u0438 \u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f; <code>GODEBUG=schedtrace=200<\/code> \u043a\u0430\u043a \u043e\u043a\u043d\u043e \u0432 GMP; <code>GODEBUG=gctrace=1<\/code> \u043a\u0430\u043a \u0441\u0447\u0435\u0442 \u0437\u0430 \u0441\u0431\u043e\u0440\u043a\u0443 \u043c\u0443\u0441\u043e\u0440\u0430. \u041f\u043b\u044e\u0441 \u0434\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0435\u0440\u0438\u044f \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b\u0430, \u043d\u043e \u0431\u0435\u0437 \u043d\u0438\u0445 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0435\u043f\u043e\u043b\u043e\u043d: <code>go tool trace<\/code> \u0440\u0438\u0441\u0443\u0435\u0442 \u043b\u0435\u043d\u0442\u0443 \u00ab\u043a\u0430\u043a\u0430\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c P \u0432 \u043a\u0430\u043a\u0443\u044e \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u0443\u00bb, \u0430 <code>go test -race<\/code> \u043b\u043e\u0432\u0438\u0442 \u0433\u043e\u043d\u043a\u0438 \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c.<\/p>\n<p>\u041a\u0443\u0434\u0430 \u043a\u043e\u043f\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435, \u0435\u0441\u043b\u0438 \u0437\u0430\u0446\u0435\u043f\u0438\u043b\u043e. \u0422\u0440\u0438 \u0434\u0438\u0437\u0430\u0439\u043d-\u0434\u043e\u043a\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c: <a href=\"https:\/\/golang.org\/s\/go11sched\" rel=\"noopener nofollow\">go11sched<\/a> \u0412\u044c\u044e\u043a\u043e\u0432\u0430 \u043f\u0440\u043e GMP, <a href=\"https:\/\/golang.org\/s\/contigstacks\" rel=\"noopener nofollow\">contigstacks<\/a> \u043f\u0440\u043e \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u044e\u0449\u0438\u0435 \u0441\u0442\u0435\u043a\u0438, <a href=\"https:\/\/docs.google.com\/document\/d\/1At2Ls5_fhJQ59kDK2DFVhFu3g5mATSXqqV5QrxinasI\/edit\" rel=\"noopener nofollow\">go15gomaxprocs<\/a> \u041a\u043e\u043a\u0441\u0430. \u0414\u0432\u0430 \u0434\u043e\u043a\u043b\u0430\u0434\u0430: \u0412\u044c\u044e\u043a\u043e\u0432 \u043d\u0430 Hydra 2019 \u043f\u0440\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u0440\u0443\u043a \u0438 \u041e\u0441\u0442\u0438\u043d \u041a\u043b\u0435\u043c\u0435\u043d\u0442\u0441 \u043d\u0430 GopherCon 2020 \u043f\u0440\u043e \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c. \u0418 <a href=\"https:\/\/nghiant3223.github.io\/2025\/04\/15\/go-scheduler.html\" rel=\"noopener nofollow\">deep dive nghiant3223<\/a>, \u0441\u0430\u043c\u044b\u0439 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0438\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0438\u0436\u0435. \u0410 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0443 \u0442\u0435\u0431\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c: \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 \u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043a\u043d\u0438\u0433\u0430, \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u044b \u0437\u043d\u0430\u0435\u0448\u044c \u0441 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c.<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u044b \u0441\u0442\u0430\u043b \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u043a\u0438. \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0441\u044f \u043d\u0430 <a href=\"https:\/\/t.me\/bascodeCh\" rel=\"noopener nofollow\">tg\u2019\u0448\u043a\u0443<\/a>.<\/p>\n<\/div>\n<p>\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\/1077498\/\">https:\/\/habr.com\/ru\/articles\/1077498\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0424\u0438\u043d\u0430\u043b \u0441\u0435\u0440\u0438\u0438 \u043f\u0440\u043e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c Go. \u0417\u0434\u0435\u0441\u044c \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0443\u044e\u0442\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430 G\/M\/P: \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b, \u0441\u0435\u0442\u044c, \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430. \u041f\u043b\u044e\u0441 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434 GODEBUG=schedtrace \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043b\u043e\u0433, \u0438 \u0432\u0441\u0435 \u0441\u0432\u0435\u0436\u0435\u0435 \u0438\u0437 Go 1.22-1.27: \u0440\u0430\u043d\u0442\u0430\u0439\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0447\u0430\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430.\u041f\u043b\u0430\u043d \u0441\u0435\u0440\u0438\u0438:\u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0438 \u041e\u0421 \u043d\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438 \u043a\u0430\u043a Go \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b GMP.\u041f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u044e\u0449\u0438\u0439 \u0441\u0442\u0435\u043a, \u0441\u0438\u0433\u043d\u0430\u043b SIGURG \u0438 \u0436\u0438\u0437\u043d\u044c \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b.syscall, netpoll, \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0438 \u0441\u0432\u0435\u0436\u0438\u0439 Go.\u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u0440\u0438\u0448\u0435\u043b \u0441\u0440\u0430\u0437\u0443 \u0441\u044e\u0434\u0430. \u0413\u043e\u0440\u0443\u0442\u0438\u043d\u0430: \u0434\u0435\u0448\u0435\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u043c \u0432 \u043a\u0443\u0447\u0435, \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u041e\u0421 (M), \u0432\u0437\u044f\u0432\u0448\u0438\u0439 \u043f\u0440\u0430\u0432\u043e P, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u043e\u0432\u043d\u043e GOMAXPROCS. \u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0435 \u0438\u043b\u0438 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u0435 \u0441\u0442\u043e\u0438\u0442 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b: \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u043f\u0430\u0440\u043a\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043a \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0431\u0435\u0440\u0435\u0442 \u0434\u0440\u0443\u0433\u0443\u044e. \u0417\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0441\u043b\u0435\u0434\u0438\u0442 sysmon, \u043f\u043e\u0442\u043e\u043a-\u043d\u0430\u0434\u0437\u0438\u0440\u0430\u0442\u0435\u043b\u044c \u0432\u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u043b GMP: \u043e\u043d \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0435\u0442 \u0436\u0430\u0434\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u043c SIGURG \u0438 \u043e\u0442\u0431\u0438\u0440\u0430\u0435\u0442 P \u0443 \u0437\u0430\u0441\u0442\u0440\u044f\u0432\u0448\u0438\u0445.\u0411\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0443\u0442\u0438 \u0441\u0435\u0440\u0438\u044f \u0448\u043b\u0430 \u043f\u043e \u0442\u0430\u0439\u043c\u043b\u0430\u0439\u043d\u0443 \u0440\u0435\u043b\u0438\u0437\u043e\u0432, \u043d\u043e \u00ab\u043f\u043e\u043b\u043d\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430\u00bb \u0432 \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442: netpoll \u043f\u0440\u0438\u0435\u0445\u0430\u043b \u0432 1.1, \u0442\u0430\u0439\u043c\u0435\u0440\u044b \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0438 \u043d\u0430 P \u0432 1.14, \u043c\u043e\u0434\u0435\u043b\u044c syscall \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b\u0438 \u0432 1.26. \u0414\u0430\u043b\u044c\u0448\u0435 \u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e (Go 1.27), \u0430 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u044f\u043a\u043e\u0440\u044f\u043c\u0438 \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445.TL;DR \u0434\u043b\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0445: \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 syscall \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u0435\u043d, \u0434\u043e\u043b\u0433\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u00absysmon \u043e\u0442\u0431\u0438\u0440\u0430\u0435\u0442 P, \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0440\u0430\u0441\u0442\u0438\u0442 \u043f\u043e\u0442\u043e\u043a\u0438\u00bb \u0441 \u043f\u043e\u0442\u043e\u043b\u043a\u043e\u043c \u0432 10 000. \u0421\u0435\u0442\u044c \u0436\u0434\u0435\u0442 \u0431\u0435\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 (netpoll), \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0438\u0449\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043b\u0435\u0441\u0442\u043d\u0438\u0446\u0435\u0439 \u043e\u0442 \u0434\u0435\u0448\u0435\u0432\u043e\u0433\u043e \u043a \u0434\u043e\u0440\u043e\u0433\u043e\u043c\u0443, \u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043b\u0438\u0431\u043e \u043a\u0440\u0443\u0442\u044f\u0442\u0441\u044f (spinning), \u043b\u0438\u0431\u043e \u0441\u043f\u044f\u0442. GC \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430 \u0441\u0447\u0435\u0442 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u0438 \u0431\u0435\u0440\u0435\u0442 \u0441 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043d\u0430\u043b\u043e\u0433. \u0421 1.25 GOMAXPROCS \u0447\u0438\u0442\u0430\u0435\u0442 \u043b\u0438\u043c\u0438\u0442\u044b \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0441 1.27 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0443\u043c\u0435\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0443\u0442\u0435\u043a\u0448\u0438\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b.\u0420\u0430\u043c\u043a\u0430 \u0444\u0438\u043d\u0430\u043b\u0430: \u043d\u0435 \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u044f, \u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e Go 1.27\u0417\u0430\u043c\u0435\u0440\u044b, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0441 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b: Intel Core i9-14900KF, linux\/amd64, 32 \u043f\u043e\u0442\u043e\u043a\u0430, Go 1.27.0. \u041a\u043e\u0434 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 dsbasko\/sandbox-gorutines: \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0442\u0430\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0434\u0435\u043c\u043e \u0432 \u0442\u0435\u043a\u0441\u0442\u0435. \u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u0446\u0438\u0442\u0430\u0442\u044b \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u0441\u0442\u043e\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0444\u0430\u0439\u043b \u0438 \u0441\u0442\u0440\u043e\u043a\u0443, \u0438 \u0432\u0435\u0434\u0435\u0442 \u043e\u043d\u0430 \u043d\u0430 \u0442\u0435\u0433 go1.27.0, \u0430 \u043d\u0435 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u0432\u0435\u0442\u043a\u0443. \u0412\u043d\u0443\u0442\u0440\u0438 \u0442\u0435\u0433\u0430 \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b.\u0413\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u044f\u0434\u0440\u043e\u0412\u043e\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0437\u0430\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439. \u0414\u0432\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b: \u043e\u0434\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 10 000 \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0445 \u0438\u0437 10 000 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439, \u0432\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 10 000 \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0445 10 000 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u0434\u0438\u0441\u043a\u0430. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u041e\u0421 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043a\u0430\u0436\u0434\u0430\u044f? \u041e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e? \u041f\u0440\u0438\u043a\u0438\u043d\u044c, \u043e\u0442\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043a \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0433\u043b\u0430\u0432\u044b.\u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u0435\u043d\u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435. \u0413\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0437\u043e\u0432\u0435\u0442 \u044f\u0434\u0440\u043e (\u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c, \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u043e\u0442\u043a\u0440\u044b\u0442\u044c), \u0438 \u043d\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0435\u0435 \u043f\u043e\u0442\u043e\u043a \u043f\u043e\u0442\u0435\u0440\u044f\u043d \u0434\u043b\u044f Go: \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u0434 \u044f\u0434\u0440\u0430, \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u0444\u043b\u0430\u0433\u0438 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0432 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u0442. \u0424\u0443\u043d\u043a\u0446\u0438\u044f entersyscall \u043f\u0435\u0440\u0435\u0434 \u0443\u0445\u043e\u0434\u043e\u043c \u0434\u0435\u043b\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0443\u043c: \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443 \u0441\u0442\u0430\u0442\u0443\u0441\u043e\u043c _Gsyscall. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043d\u0430\u0434 \u0432\u0445\u043e\u0434\u043e\u043c \u0432 syscall \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043a\u043e\u0440\u043e\u0442\u043a\u043e (proc.go:4618):The goroutine g is about to enter a system call. Record that it\u2019s not using the cpu anymore.\u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0447\u0442\u043e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440. \u0417\u0430\u043c\u0435\u0442\u044c, \u0447\u0435\u0433\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442: P \u043d\u0438\u043a\u043e\u043c\u0443 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f, \u043e\u043d \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0442\u043e\u043a\u0435. \u0420\u0430\u0441\u0447\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0437\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 P \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0443 (\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u0434 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043c\u043e\u043a, \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442\u044c \u043a\u043e\u0433\u043e-\u0442\u043e) \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u043e\u0438\u0442\u044c \u0434\u043e\u0440\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430. \u041a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 syscall \u0432 Go \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u0435\u043d: \u0443\u0448\u0435\u043b, \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f, \u043f\u043e\u0431\u0435\u0436\u0430\u043b \u0434\u0430\u043b\u044c\u0448\u0435, \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043c\u043a\u0430 \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0435.\u0414\u043e\u043b\u0433\u0438\u0439 \u0432\u044b\u0437\u043e\u0432: P \u0441\u043f\u0430\u0441\u0430\u044e\u0442, \u043f\u043e\u0442\u043e\u043a \u0431\u0440\u043e\u0441\u0430\u044e\u0442\u0410 \u0435\u0441\u043b\u0438 \u0432\u044b\u0437\u043e\u0432 \u0437\u0430\u0432\u0438\u0441? \u0414\u0438\u0441\u043a \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f, NFS \u0443\u0448\u0435\u043b \u0432 \u0441\u0435\u0431\u044f, \u0442\u0440\u0443\u0431\u0430 \u043f\u0443\u0441\u0442\u0430. \u041f\u043e\u0442\u043e\u043a \u0441\u0438\u0434\u0438\u0442 \u0432 \u044f\u0434\u0440\u0435, P \u043f\u0440\u0438 \u043d\u0435\u043c, \u0438 \u044d\u0442\u043e\u0442 P \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0438\u043a\u043e\u0433\u043e: \u043e\u0434\u043d\u0430 \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f \u0432\u0441\u0435\u0445 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b (\u043f\u0440\u0438 GOMAXPROCS=32) \u0437\u0430\u043c\u043e\u0440\u043e\u0436\u0435\u043d\u0430. \u0421\u0430\u043c \u043f\u043e\u0442\u043e\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0435 \u0440\u0435\u0448\u0438\u0442, \u043e\u043d \u0441\u043f\u0438\u0442 \u0432 \u044f\u0434\u0440\u0435. \u0420\u0435\u0448\u0430\u0435\u0442 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043f\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 sysmon: \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f retake \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 P \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0432\u0438\u0441\u0448\u0438\u0445. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u043a\u043e\u0434\u0435 \u0447\u0435\u0441\u0442\u0435\u043d \u043d\u0430\u0441\u0447\u0435\u0442 \u043f\u043e\u0440\u043e\u0433\u0430 (proc.go:6743):Retake the P if it\u2019s there for more than 1 sysmon tick (at least 20us).\u041e\u0442\u043e\u0431\u0440\u0430\u0442\u044c P, \u0435\u0441\u043b\u0438 \u0442\u043e\u0442 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0434\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0438\u043a\u0430 sysmon, \u043c\u0438\u043d\u0438\u043c\u0443\u043c 20 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434. \u00ab\u041c\u0438\u043d\u0438\u043c\u0443\u043c\u00bb \u0437\u0434\u0435\u0441\u044c \u0432\u0430\u0436\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e: sysmon \u0441\u043f\u0438\u0442 \u043e\u0442 20 \u043c\u043a\u0441 \u0434\u043e 10 \u043c\u0441, \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u043b\u0430\u0432\u0430\u0435\u0442. \u0418 \u0435\u0441\u0442\u044c \u043b\u044c\u0433\u043e\u0442\u0430: \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u044d\u0442\u043e\u0433\u043e P \u043f\u0443\u0441\u0442\u0430, \u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0438 \u0442\u0430\u043a \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u0440\u0443\u043a (\u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u044e\u0449\u0438\u0435 P \u0438\u043b\u0438 \u043f\u043e\u0442\u043e\u043a\u0438 \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u0440\u0430\u0431\u043e\u0442\u044b), \u0435\u0433\u043e \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u044e\u0442 \u043f\u0435\u0440\u0432\u044b\u0435 10 \u043c\u0441: \u0441\u043f\u0435\u0448\u0438\u0442\u044c \u043d\u0435\u043a\u0443\u0434\u0430.\u0414\u0430\u043b\u044c\u0448\u0435 \u0432 \u0434\u0435\u043b\u043e \u0432\u0441\u0442\u0443\u043f\u0430\u0435\u0442 handoffp: \u043e\u0442\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 P \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0443. \u041a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0435\u0435 \u0442\u0435\u043b\u0430 (proc.go:3147): \u043e\u043d\u0430 \u043e\u0431\u044f\u0437\u0430\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0432 \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0433\u0434\u0435 \u0443 \u044d\u0442\u043e\u0433\u043e P \u043d\u0430\u0448\u043b\u0430\u0441\u044c \u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430. \u0417\u0434\u0435\u0441\u044c, \u043a\u0441\u0442\u0430\u0442\u0438, \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0437\u0430\u0447\u0435\u043c \u0432 \u0441\u0445\u0435\u043c\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0443\u043a\u0432\u0430 P. \u041e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a \u043f\u043e\u0442\u043e\u043a\u0443: \u043f\u043e\u0442\u043e\u043a\u0438 \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u044e\u0442 \u0432 \u044f\u0434\u0440\u0435 \u0438 \u043f\u043b\u043e\u0434\u044f\u0442\u0441\u044f, \u0430 \u043f\u0440\u0430\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c Go-\u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043e\u0431\u043e\u0440\u043e\u0442\u0435. P \u0438 \u0435\u0441\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442 \u0438\u0437 \u0440\u0443\u043a \u0432 \u0440\u0443\u043a\u0438.\u0410 \u043d\u0430\u0448 \u0437\u0430\u0441\u0442\u0440\u044f\u0432\u0448\u0438\u0439 \u043f\u043e\u0442\u043e\u043a? \u0415\u0433\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442, \u043e\u043d \u0434\u043e\u0441\u0438\u0436\u0438\u0432\u0430\u0435\u0442 \u0432 \u044f\u0434\u0440\u0435. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f, exitsyscall \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u0442 \u0442\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043f\u043e \u0446\u0435\u043d\u0435: P \u0432\u0441\u0435 \u0435\u0449\u0435 \u043c\u043e\u0439 (\u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0443\u0442\u044c, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0431\u0435\u0436\u0430\u0442\u044c), P \u043e\u0442\u043e\u0431\u0440\u0430\u043b\u0438, \u043d\u043e \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 (\u0432\u0437\u044f\u0442\u044c \u0435\u0433\u043e), \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 \u043d\u0435\u0442 (\u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0435\u0434\u0435\u0442 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043f\u043e\u0442\u043e\u043a \u043f\u0430\u0440\u043a\u0443\u0435\u0442\u0441\u044f).\u0412\u0440\u0435\u0437\u043a\u0430-\u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0447\u0438\u0442\u0430\u043b \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u044b. \u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438 \u0441\u0445\u0435\u043c\u044b \u0440\u0438\u0441\u0443\u044e\u0442 P \u0432 \u043e\u0441\u043e\u0431\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 Psyscall. \u0421 Go 1.26 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043d\u0435\u0442: \u0432 \u043a\u043e\u0434\u0435 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0433\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043c\u0435\u043d\u044c Psyscall_unused \u0441 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e \u00aba now-defunct state\u00bb (runtime2.go:143). \u0422\u0435\u043f\u0435\u0440\u044c P \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c _Prunning, \u0430 \u00ab\u0432 \u0432\u044b\u0437\u043e\u0432\u0435 \u0438\u043b\u0438 \u043d\u0435\u0442\u00bb \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043f\u043e \u0441\u0442\u0430\u0442\u0443\u0441\u0443 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b. \u0421\u0445\u0435\u043c\u044b \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u043e\u0439 \u00abP -&gt; syscall\u00bb \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u043e\u0434\u0435\u043b\u0438.\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432: \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043d\u044b\u0440\u043e\u043a \u0438 \u0434\u043e\u043b\u0433\u043e\u0435 \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u043d\u0438\u0435\u041e\u0442\u043a\u0443\u0434\u0430 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a\u0438 \u0438 \u0433\u0434\u0435 \u0438\u0445 \u043f\u043e\u0442\u043e\u043b\u043e\u043a\u041a\u043e\u043c\u0443 handoffp \u043e\u0442\u0434\u0430\u0435\u0442 P, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0437\u0430\u043d\u044f\u0442\u044b? \u041d\u0438\u043a\u043e\u043c\u0443: \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439. \u0426\u0435\u043f\u043e\u0447\u043a\u0430 startm -&gt; newm -&gt; newosproc \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c clone(2) \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430, \u043f\u0440\u0430\u0432\u0434\u0430, \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0438\u0449\u0435\u0442 \u0441\u043f\u044f\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0432 \u0437\u0430\u043f\u0430\u0441\u0435: \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0432\u0448\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u0443\u043c\u0438\u0440\u0430\u044e\u0442, \u0430 \u043f\u0430\u0440\u043a\u0443\u044e\u0442\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437 \u0434\u043e\u0440\u043e\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b (390 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443 \u043f\u0440\u043e\u0442\u0438\u0432 13 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u0441 \u0443\u0431\u043e\u0440\u043a\u043e\u0439). \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0430\u0441 \u043f\u0443\u0441\u0442, \u0440\u0430\u0441\u0442\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u041e\u0421.\u041e\u0442\u0441\u044e\u0434\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0435\u0445: \u0443 Go-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441 GOMAXPROCS=8 \u0432 htop \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c 40 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430. GOMAXPROCS \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 Go-\u043a\u043e\u0434; \u043f\u043e\u0442\u043e\u043a\u0438, \u0437\u0430\u0441\u0442\u0440\u044f\u0432\u0448\u0438\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u0430\u0445, \u0432 \u043b\u0438\u043c\u0438\u0442 \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0442, \u043e \u0447\u0435\u043c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043f\u0440\u044f\u043c\u043e. \u041a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u0443\u043d\u043e\u0441\u0438\u0442 \u043f\u043e\u0442\u043e\u043a, \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u043c\u043e\u043b\u0447\u0430 \u0437\u0430\u0432\u043e\u0434\u0438\u0442 \u043d\u043e\u0432\u044b\u0435, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043d\u0435 \u0432\u0441\u0442\u0430\u043b\u0438.\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 (\u0434\u0435\u043c\u043e blocking_threads). \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u044e N \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0430\u0434\u0438\u0442\u0441\u044f \u043d\u0430 syscall.Read \u0438\u0437 \u043f\u0443\u0441\u0442\u043e\u0439 \u0442\u0440\u0443\u0431\u044b, \u0438 \u0441\u043c\u043e\u0442\u0440\u044e \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \/sched\/threads\/total:go build -o \/tmp\/blocking_threads .\/blocking_threadsGOMAXPROCS=8 \/tmp\/blocking_threads 40GOMAXPROCS = 8, \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 = 5\u0433\u043e\u0440\u0443\u0442\u0438\u043d \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u043c syscall = 40\u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u041e\u0421 \u0441\u0442\u0430\u043b\u043e             = 43\u0421\u043e\u0440\u043e\u043a \u0437\u0430\u043b\u0438\u043f\u0448\u0438\u0445 \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u0441\u043e\u0440\u043e\u043a \u0442\u0440\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u043f\u0440\u0438 GOMAXPROCS=8. \u0421\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0438 \u0434\u0430\u043b\u044c\u0448\u0435: \u0441\u0442\u043e \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u0434\u0430\u044e\u0442 103 \u043f\u043e\u0442\u043e\u043a\u0430. \u041f\u043e\u0442\u043e\u043b\u043e\u043a \u0437\u0434\u0435\u0441\u044c \u043e\u0434\u0438\u043d, \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 maxmcount = 10 000 (proc.go:876), \u0438 \u0434\u043e \u043d\u0435\u0435 \u043c\u044b \u0435\u0449\u0435 \u0434\u043e\u0439\u0434\u0435\u043c.\u041c\u043e\u043b\u0447\u0430, \u043d\u043e \u043d\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e. \u041f\u043e\u043c\u043d\u0438\u0448\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443-\u043f\u0440\u0435\u0434\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438? sched.maxmcount = 10000, \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0435\u0442 \u0435\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (proc.go:982): \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0444\u043e\u0440\u043a-\u0431\u043e\u043c\u0431\u044b, \u00abmillions of goroutines blocking on system calls, causing the runtime to create millions of threads\u00bb. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043f\u0440\u0435\u0434\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c \u0434\u0435\u043c\u043e thread_exhaustion: \u043b\u0438\u043c\u0438\u0442 \u043e\u043f\u0443\u0449\u0435\u043d \u0434\u043e 12, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0436\u0434\u0430\u0442\u044c, \u0438 50 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u0443\u0445\u043e\u0434\u044f\u0442 \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u0442\u0440\u0443\u0431\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0438\u0448\u0435\u0442:\/\/ thread_exhaustion\/main.go (\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442)debug.SetMaxThreads(12)for i := 0; i &lt; 50; i++ {go func() {buf := make([]byte, 1)syscall.Read(fds[0], buf) \/\/ \u0432 \u0442\u0440\u0443\u0431\u0443 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0438\u0448\u0435\u0442}()}\u043b\u0438\u043c\u0438\u0442 \u043f\u043e\u0442\u043e\u043a\u043e\u0432: 12, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e 50 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u0441 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u043c syscall.Readruntime: program exceeds 12-thread limitfatal error: thread exhaustion\u0412\u043e\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043c\u0430\u0433\u0438\u0438. \u041c\u0438\u043b\u043b\u0438\u043e\u043d \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043d\u0430 \u043a\u0430\u043d\u0430\u043b\u0430\u0445: \u043d\u043e\u0440\u043c\u0430, 2.6 \u0413\u0411 \u043f\u0430\u043c\u044f\u0442\u0438. \u0414\u0435\u0441\u044f\u0442\u044c \u0442\u044b\u0441\u044f\u0447 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0437\u0430\u043b\u0438\u043f\u0448\u0438\u0445 \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u0430\u0445: \u0441\u043c\u0435\u0440\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041b\u0438\u043c\u0438\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b, \u0430 \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u043e\u0434 \u043d\u0438\u043c\u0438.\u041f\u043e\u0442\u043e\u043a\u0438 \u0440\u0430\u0441\u0442\u0443\u0442 \u043f\u043e\u0434 \u0437\u0430\u0441\u0442\u0440\u044f\u0432\u0448\u0438\u043c\u0438 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438\u0421\u0435\u0442\u044c: \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0431\u0435\u0437 \u043f\u043e\u0442\u043e\u043a\u0430\u0422\u0435\u043f\u0435\u0440\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u043e\u043a\u0443\u0441 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430. \u041f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u0432\u044b\u0448\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 10 000 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0443\u043c\u0435\u0440\u0435\u0442\u044c \u043e\u0442 thread exhaustion, \u0432\u0435\u0434\u044c \u043a\u0430\u0436\u0434\u043e\u0435 conn.Read() \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432. \u041d\u0435 \u0443\u043c\u0438\u0440\u0430\u0435\u0442, \u0438 \u0432\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443.\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u043e\u043a\u0435\u0442 \u0432 Go \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u043c (\u043d\u0430 Linux \u044d\u0442\u043e \u0444\u043b\u0430\u0433 SOCK_NONBLOCK \u043f\u0440\u044f\u043c\u043e \u0432 \u0432\u044b\u0437\u043e\u0432\u0435 socket, \u043d\u0430 macOS \u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c), \u0438 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0442\u0443\u0442 \u0436\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u043f\u043e\u043b\u043b\u0435\u0440\u0435 (epoll \u043d\u0430 Linux, kqueue \u043d\u0430 macOS), \u0442\u043e\u043c \u0441\u0430\u043c\u043e\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0435 \u00ab\u044f\u0434\u0440\u043e, \u0441\u043a\u0430\u0436\u0438, \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u043e\u043a\u0435\u0442\u043e\u0432 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0435\u00bb. \u041a\u043e\u0433\u0434\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0437 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u0441\u043e\u043a\u0435\u0442\u0430, \u0432\u044b\u0437\u043e\u0432 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 EAGAIN (\u00ab\u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0442, \u043f\u0440\u0438\u0445\u043e\u0434\u0438 \u043f\u043e\u0437\u0436\u0435\u00bb), \u043f\u043e\u0442\u043e\u043a \u043d\u0435 \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u0435\u0442 \u043d\u0438 \u043d\u0430 \u0442\u0430\u043a\u0442. \u0420\u0430\u043d\u0442\u0430\u0439\u043c \u043b\u043e\u0432\u0438\u0442 EAGAIN \u0438 \u043f\u0430\u0440\u043a\u0443\u0435\u0442 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c gopark \u0441 \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 IO wait. \u0412\u0441\u0435: \u0436\u0434\u0443\u0449\u0435\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 epoll \u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u043f\u044f\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b g. \u041d\u0438 \u043f\u043e\u0442\u043e\u043a\u0430, \u043d\u0438 P.\u041a\u0442\u043e \u0440\u0430\u0437\u0431\u0443\u0434\u0438\u0442? \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u00ab\u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u0435\u0442\u0438\u00bb \u0432 Go \u043d\u0435\u0442, \u0438 \u044d\u0442\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043b\u043e\u043c\u0430\u0435\u0442 \u0438\u043d\u0442\u0443\u0438\u0446\u0438\u044e. \u041e\u043f\u0440\u043e\u0441 \u044f\u0434\u0440\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d \u0432 \u0446\u0438\u043a\u043b \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b: \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0442\u043e\u043a, \u0438\u0449\u0443\u0449\u0438\u0439 \u0441\u0435\u0431\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443, \u043c\u0435\u0436\u0434\u0443 \u0434\u0435\u043b\u043e\u043c \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 netpoll \u00ab\u0430 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432 \u043b\u0438 \u043a\u0442\u043e \u0438\u0437 \u0441\u043e\u043a\u0435\u0442\u043e\u0432\u00bb (\u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d \u00abThis netpoll is only an optimization before we resort to stealing\u00bb, proc.go:3502). \u0415\u0441\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u043e\u0434\u0440\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u0441\u044b\u043f\u0430\u0435\u0442 \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 netpoll \u0438 \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u0435\u0442\u0438. \u0410 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0437\u0430\u043d\u044f\u0442\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0432 \u043f\u043e\u0438\u0441\u043a \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u0445\u043e\u0434\u0438\u0442, \u0441\u0442\u0440\u0430\u0445\u0443\u0435\u0442 sysmon: \u043e\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0441\u0435\u0442\u044c \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b\u0438 \u043d\u0435 \u043f\u043e\u0437\u0436\u0435 10 \u043c\u0441 \u043d\u0430\u0437\u0430\u0434.\u0424\u0430\u0439\u043b \u043d\u0435 \u0441\u043e\u043a\u0435\u0442\u0418 \u0432\u043e\u0442 \u0440\u0430\u0437\u0432\u044f\u0437\u043a\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u0430-\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f. \u0421 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0444\u043e\u043a\u0443\u0441 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. os.OpenFile \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u0432 \u043f\u043e\u043b\u043b\u0435\u0440\u0435, \u043d\u043e epoll \u043d\u0430 Linux \u043d\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0434\u0438\u0441\u043a\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0449\u0438 \u0441\u0432\u043e\u0438\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 (os\/file_unix.go:212):An error here indicates a failure to register with the netpoll system. That can happen for a file descriptor that is not supported by epoll\/kqueue; for example, disk files on Linux systems.\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u0430\u0434\u0430\u0435\u0442, \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0436\u0438\u043c, \u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u0441 \u0434\u0438\u0441\u043a\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c: \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043d\u044f\u0442 \u0434\u043e&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-493165","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/493165","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=493165"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/493165\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=493165"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=493165"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=493165"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}