{"id":502776,"date":"2026-11-11T16:57:25","date_gmt":"2026-11-11T13:57:25","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=502776"},"modified":"2026-11-11T16:57:25","modified_gmt":"2026-11-11T13:57:25","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=502776","title":{"rendered":"\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 Swift"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0417\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b iOS-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u044f \u043d\u0435 \u0440\u0430\u0437 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u0442\u0435 \u0438\u043b\u0438 \u0438\u043d\u044b\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0432\u044b\u0431\u043e\u0440\u0443 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <code>os_unfair_lock<\/code>. \u0415\u0441\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u0439 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0442\u043e \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435\u0441\u044c \u043a read-write lock \u0438\u043b\u0438 concurrent queue \u0441 barrier-\u0437\u0430\u043f\u0438\u0441\u044c\u044e. \u0410 \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0447\u044c \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u043e Swift Concurrency, \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c, \u0447\u0442\u043e actors \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430\u043c.<\/p>\n<p>\u041c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0437\u0430\u0434\u0430\u0447\u0430\u0445, \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043d\u0430 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0418 \u0437\u0430\u043e\u0434\u043d\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p>\u041e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0442\u0430\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/www.vadimbulavin.com\/benchmarking-locking-apis\/\" rel=\"noopener nofollow\">\u0412\u0430\u0434\u0438\u043c\u0430 \u0411\u0443\u043b\u0430\u0432\u0438\u043d\u0430<\/a> \u0438 <a href=\"https:\/\/trycombine.com\/posts\/performance-actor-queue-lock-benchmark\/\" rel=\"noopener nofollow\">\u041c\u0430\u0440\u0438\u043d\u0430 \u0422\u043e\u0434\u043e\u0440\u043e\u0432\u0430<\/a>. \u041e\u043d\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u043a\u0430\u043a \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445. \u041d\u043e \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u043e\u0432\u044b\u0435 API, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 <code>Synchronization.Mutex<\/code> \u0438 <code>Atomic<\/code>. \u041c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u043e\u0440 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432, \u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0432 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 open source \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445: SDWebImage, Alamofire, Apollo iOS, Nuke, Firebase \u0438 Pocket Casts. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0437\u0430\u0449\u0438\u0449\u0430\u044e\u0442 \u043a\u0435\u0448 \u0438 \u0445\u0440\u0430\u043d\u044f\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\" rel=\"noopener nofollow\">\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<p>\u0412\u0441\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u0432 Release-\u0441\u0431\u043e\u0440\u043a\u0430\u0445 \u043d\u0430 \u0434\u0432\u0443\u0445 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445: iPhone 11 Pro Max \u0438 iPhone 15 Pro Max.<\/p>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043c\u044b \u0440\u0435\u0448\u0430\u0435\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c \u0438 \u043a\u0430\u043a\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u044d\u0442\u0438 \u0432\u044b\u0432\u043e\u0434\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0438 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e <code>Mutex<\/code>, \u0433\u0434\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>Atomic<\/code> \u0438 \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 actors.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0443: \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439. \u042d\u0442\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0438 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0432\u044b\u0448\u043b\u043e. \u0415\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0430\u043b\u043e, \u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0434\u0440\u044f\u0434 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d, \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043a <a href=\"#conclusion\" rel=\"noopener nofollow\">\u0438\u0442\u043e\u0433\u0443<\/a>. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u043c\u043e\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p><strong>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"#measurement-method\" rel=\"noopener nofollow\">\u041a\u0430\u043a \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#base-comparison\" rel=\"noopener nofollow\">\u0411\u0430\u0437\u043e\u0432\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435: \u0447\u0442\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u044c, \u0441\u0447\u0435\u0442\u0447\u0438\u043a<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#shared-dictionary\" rel=\"noopener nofollow\">\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u043b\u043e\u0432\u0430\u0440\u044e<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#feature-flag\" rel=\"noopener nofollow\">\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c feature flag<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#read-write-lock\" rel=\"noopener nofollow\">\u041c\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u0439, \u043c\u0430\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439: \u043d\u0443\u0436\u0435\u043d \u043b\u0438 read-write lock?<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#actors\" rel=\"noopener nofollow\">\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 actors \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435?<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#image-cache\" rel=\"noopener nofollow\">\u041a\u0435\u0448 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#priority-inversion\" rel=\"noopener nofollow\">\u0418\u043d\u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432: \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0435\u0442 \u0444\u043e\u043d\u043e\u0432\u044b\u0439<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#creation-cost\" rel=\"noopener nofollow\">\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0440\u0430\u0441\u0445\u043e\u0434 \u043f\u0430\u043c\u044f\u0442\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#conclusion\" rel=\"noopener nofollow\">\u0418\u0442\u043e\u0433<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"measurement-method\" id=\"measurement-method\"><\/a><\/p>\n<h2>\u041a\u0430\u043a \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0412\u0435\u0440\u0441\u0438\u0438 iOS \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0435\u0440\u0441\u0438\u044f iOS<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">iPhone 15 Pro Max<\/p>\n<\/td>\n<td>\n<p align=\"left\">26.6.2<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">iPhone 11 Pro Max<\/p>\n<\/td>\n<td>\n<p align=\"left\">26.6<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0432 Xcode 27.1 \u0441\u043e Swift 6.4.0, \u0432 Release-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u0443\u0434\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 iPhone 15 Pro Max, \u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043d\u0430 iPhone 11 Pro Max \u043e\u0442\u043c\u0435\u0447\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435 \u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0442\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u043c \u043e\u0434\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u0418\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043d\u0430\u0434 \u043d\u0438\u043c.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u0441\u0442 \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437. \u0417\u0430 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u0441\u0447\u0435\u0442 \u0448\u0435\u043b \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b\u043e \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0412\u0441\u0435\u0433\u043e \u043d\u0430 \u0434\u0432\u0443\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c 1 366 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432.<\/p>\n<h3>\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e<\/h3>\n<p>\u0414\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u044f \u0438\u0437\u043c\u0435\u0440\u044f\u043b \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0439 \u0441\u0435\u0440\u0438\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u0435\u043b\u0438\u043b \u0435\u0433\u043e \u043d\u0430 \u0447\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u0412\u043e\u0442 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0441\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u043c:<\/p>\n<pre><code class=\"swift\">import Synchronizationlet counter = Mutex&lt;Int&gt;(0)let iterations = 1_000_000let clock = ContinuousClock()let elapsed = clock.measure {    for _ in 0..&lt;iterations {        counter.withLock { value in            value += 1        }    }}let timePerOperation = elapsed \/ iterations<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p>\u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u0441\u044f \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0440\u0430\u0437. \u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043c\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443, \u0438\u0437\u043c\u0435\u043d\u044f\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0434\u0435\u043b\u0438\u043c \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0446\u0438\u043a\u043b \u0437\u0430\u043d\u044f\u043b 2 \u043c\u0441, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 2 \u043d\u0441 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e.<\/p>\n<p>\u0417\u0430 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044f \u0438\u0437\u043c\u0435\u0440\u044f\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u0445 \u0441\u0435\u0440\u0438\u0439. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0440\u0430\u043b \u043c\u0435\u0434\u0438\u0430\u043d\u0443 \u043f\u043e \u0441\u0435\u0440\u0438\u044f\u043c, \u0437\u0430\u0442\u0435\u043c \u043c\u0435\u0434\u0438\u0430\u043d\u0443 \u043f\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0438.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u044f\u0442\u044c \u0441\u0435\u0440\u0438\u0439 \u0434\u0430\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b 1,9; 2,0; 2,1; 2,2 \u0438 5,0 \u043d\u0441 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u0435\u0434\u0438\u0430\u043d\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435, 2,1 \u043d\u0441. \u041e\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u0427\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432<\/h3>\n<p>\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u044f \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u043c\u0435\u0440\u044f\u043b \u043e\u0431\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0434\u0435\u043b\u0438\u043b \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0442\u0435\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u0438\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u0430 \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0432\u0438\u0434\u043d\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0443\u0441\u043f\u0435\u0432\u0430\u044e\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u043f\u043e \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0438 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0448\u043b\u043e \u043f\u043e\u043b\u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 4 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0437\u0430 0,5 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0442\u043e \u0435\u0441\u0442\u044c 8 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>\u0414\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u044f \u0438\u0437\u043c\u0435\u0440\u044f\u043b \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0435\u0435 \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438:<\/p>\n<ul>\n<li>\n<p><strong>p50, \u0438\u043b\u0438 \u043c\u0435\u0434\u0438\u0430\u043d\u0430:<\/strong> \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>p99:<\/strong> \u043e\u043a\u043e\u043b\u043e 99% \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0438\u0441\u044c \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 p99 \u0432 20 \u043c\u043a\u0441 \u0438\u0437 \u0441\u0442\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 99 \u0443\u043b\u043e\u0436\u0438\u043b\u0438\u0441\u044c \u0432 20 \u043c\u043a\u0441, \u0430 \u043e\u0434\u0438\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u044f \u0441\u0447\u0438\u0442\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0430 \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0431\u0440\u0430\u043b \u043c\u0435\u0434\u0438\u0430\u043d\u0443 \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\/blob\/main\/docs\/results.md\" rel=\"noopener nofollow\">\u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439<\/a> \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\/releases\/tag\/benchmark-results-2026-11-07\" rel=\"noopener nofollow\">\u0421\u044b\u0440\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/a> \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p><a class=\"anchor\" name=\"base-comparison\" id=\"base-comparison\"><\/a><\/p>\n<h2>\u0411\u0430\u0437\u043e\u0432\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435: \u0447\u0442\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u044c, \u0441\u0447\u0435\u0442\u0447\u0438\u043a<\/h2>\n<p>\u041d\u0430\u0447\u043d\u0443 \u0441 \u0442\u043e\u0433\u043e \u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438 \u0412\u0430\u0434\u0438\u043c \u0411\u0443\u043b\u0430\u0432\u0438\u043d \u0438 \u041c\u0430\u0440\u0438\u043d \u0422\u043e\u0434\u043e\u0440\u043e\u0432: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0430\u0434 \u043e\u0431\u0449\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c, \u0435\u0441\u043b\u0438 \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u0435\u0435 \u0442\u0435\u043c \u0438\u043b\u0438 \u0438\u043d\u044b\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438? \u041e\u0431\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u0434\u0435\u0441\u044c \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u041d\u0430\u0434 \u043d\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e:<\/p>\n<ul>\n<li>\n<p><strong>\u0447\u0442\u0435\u043d\u0438\u0435:<\/strong> \u043f\u043e\u0442\u043e\u043a \u0447\u0438\u0442\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442;<\/p>\n<\/li>\n<li>\n<p><strong>\u0437\u0430\u043f\u0438\u0441\u044c:<\/strong> \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p><strong>\u0441\u0447\u0435\u0442\u0447\u0438\u043a:<\/strong> \u043f\u043e\u0442\u043e\u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 actor \u043e\u0434\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 <code>Task<\/code>. \u0414\u0430\u043b\u044c\u0448\u0435 \u044f \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0436\u0438\u043c \u00ab\u0431\u0435\u0437 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u0438\u00bb. \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442: \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0435\u0435 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442, \u0438 \u0436\u0434\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f.<\/p>\n<p>\u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0438\u043d\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u0447\u0438\u0442\u0430\u0435\u0442.<\/p>\n<h3>\u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043f\u043e\u0434 <code>Mutex<\/code> \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435. \u0414\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0449\u0438\u0442\u044b. \u0412\u043e\u0442 \u0442\u0430 \u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0434\u043b\u044f \u0442\u0440\u0435\u0445 \u0438\u0437 \u043d\u0438\u0445. \u0421 <code>Atomic<\/code> \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439:<\/p>\n<pre><code class=\"swift\">let counter = Atomic&lt;Int&gt;(0)counter.wrappingAdd(1, ordering: .acquiringAndReleasing)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421 serial queue \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>sync<\/code>:<\/p>\n<pre><code class=\"swift\">let queue = DispatchQueue(label: \"counter\")var value = 0queue.sync {    value += 1}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421 actor \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0441 <code>await<\/code> \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438:<\/p>\n<pre><code class=\"swift\">actor Counter {    private var value = 0    func increment() -&gt; Int {        value += 1        return value    }}let counter = Counter()let newValue = await counter.increment()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0423 actor \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u0446\u0438\u043a\u043b \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0446\u0438\u043a\u043b, \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u043e\u043c\u0443 \u0432\u044b\u0437\u043e\u0432\u0443 \u0441 <code>await<\/code> \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>\u0412\u0441\u0435\u0433\u043e \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 20 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u043a\u043e\u0434 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\/tree\/main\/Experiments\/BaseComparison\" rel=\"noopener nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h3>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u0435\u0437 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u0438<\/h3>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 <code>Atomic<\/code>. \u041d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443: \u0447\u0435\u043c \u043a\u043e\u0440\u043e\u0447\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/5e\/dc\/b4\/5edcb4d634388d1ff65fbe1cb6a58086.png\" alt=\"\u0412\u0440\u0435\u043c\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u0438 Atomic. Mutex, OSAllocatedUnfairLock, os_unfair_lock \u0438 Atomic \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u043e 1,9 \u043d\u0441, DispatchSemaphore 3,7 \u043d\u0441, pthread_mutex 4,6 \u043d\u0441, pthread_rwlock 6,0 \u043d\u0441, NSLock 6,4 \u043d\u0441, OSAllocatedUnfairLock \u0441 adaptiveSpin 8,5 \u043d\u0441, objc_sync 10,9 \u043d\u0441, NSRecursiveLock 12,7 \u043d\u0441.\" title=\"\u041e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a, iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"1863\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/5e\/dc\/b4\/5edcb4d634388d1ff65fbe1cb6a58086.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/5e\/dc\/b4\/5edcb4d634388d1ff65fbe1cb6a58086.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a, iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>Actor \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0433\u0440\u0430\u0444\u0438\u043a \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f: \u0438\u0445 \u0432\u0440\u0435\u043c\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0440\u044f\u0434\u043e\u043c \u0441 <code>Mutex<\/code>.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/c5\/8b\/31\/c58b311511b811ee838c0d6a91a5c569.png\" alt=\"\u0412\u0440\u0435\u043c\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443: Mutex 1,9 \u043d\u0441, actor 62,8 \u043d\u0441, serial DispatchQueue 88,2 \u043d\u0441, concurrent queue \u0441 async barrier 110,4 \u043d\u0441, concurrent queue \u0441 sync barrier 209,6 \u043d\u0441.\" title=\"\u041e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u0438\u043b\u0438 \u043e\u0434\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 `Task`, iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"1035\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/c5\/8b\/31\/c58b311511b811ee838c0d6a91a5c569.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/c5\/8b\/31\/c58b311511b811ee838c0d6a91a5c569.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u0438\u043b\u0438 \u043e\u0434\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 <code>Task<\/code>, iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0438 \u0437\u0430\u043f\u0438\u0441\u044c\u044e:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u0435\u043d\u0438\u0435, \u043d\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u0430\u043f\u0438\u0441\u044c, \u043d\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0447\u0435\u0442\u0447\u0438\u043a, \u043d\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0447\u0435\u0442\u0447\u0438\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e <code>Mutex<\/code><\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,85<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,85<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,0\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,0\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>os_unfair_lock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,85<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,0\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">4,59<\/p>\n<\/td>\n<td>\n<p align=\"left\">4,60<\/p>\n<\/td>\n<td>\n<p align=\"left\">4,62<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,5\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">6,36<\/p>\n<\/td>\n<td>\n<p align=\"left\">6,36<\/p>\n<\/td>\n<td>\n<p align=\"left\">6,36<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,4\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code> \u0441 <code>.adaptiveSpin<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">8,48<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,22<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,49<\/p>\n<\/td>\n<td>\n<p align=\"left\">4,6\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Atomic<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0,27<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,27<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,88<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,0\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">actor<\/p>\n<\/td>\n<td>\n<p align=\"left\">62,64<\/p>\n<\/td>\n<td>\n<p align=\"left\">62,03<\/p>\n<\/td>\n<td>\n<p align=\"left\">62,77<\/p>\n<\/td>\n<td>\n<p align=\"left\">34\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Serial <code>DispatchQueue<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">199,42<\/p>\n<\/td>\n<td>\n<p align=\"left\">107,47<\/p>\n<\/td>\n<td>\n<p align=\"left\">88,23<\/p>\n<\/td>\n<td>\n<p align=\"left\">48\u00d7<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<details class=\"spoiler\">\n<summary>\u0412\u0441\u0435 20 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u0435\u043d\u0438\u0435, \u043d\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u0430\u043f\u0438\u0441\u044c, \u043d\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0447\u0435\u0442\u0447\u0438\u043a, \u043d\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,85<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,85<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>os_unfair_lock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,85<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>DispatchSemaphore<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">3,72<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,72<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,74<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">4,59<\/p>\n<\/td>\n<td>\n<p align=\"left\">4,60<\/p>\n<\/td>\n<td>\n<p align=\"left\">4,62<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_rwlock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">6,14<\/p>\n<\/td>\n<td>\n<p align=\"left\">6,07<\/p>\n<\/td>\n<td>\n<p align=\"left\">6,00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">6,36<\/p>\n<\/td>\n<td>\n<p align=\"left\">6,36<\/p>\n<\/td>\n<td>\n<p align=\"left\">6,36<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code> \u0441 <code>.adaptiveSpin<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">8,48<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,22<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,49<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>objc_sync_enter<\/code> \/ <code>objc_sync_exit<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">10,88<\/p>\n<\/td>\n<td>\n<p align=\"left\">10,87<\/p>\n<\/td>\n<td>\n<p align=\"left\">10,87<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSRecursiveLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">12,72<\/p>\n<\/td>\n<td>\n<p align=\"left\">12,72<\/p>\n<\/td>\n<td>\n<p align=\"left\">12,72<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Atomic<\/code>, acquiring\/releasing<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,265<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,265<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,88<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Atomic<\/code>, relaxed<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,265<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,265<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,88<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ManagedAtomic<\/code>, acquiring\/releasing<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,795<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,795<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ManagedAtomic<\/code>, relaxed<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,795<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,795<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,88<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">actor<\/p>\n<\/td>\n<td>\n<p align=\"left\">62,64<\/p>\n<\/td>\n<td>\n<p align=\"left\">62,03<\/p>\n<\/td>\n<td>\n<p align=\"left\">62,77<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>@MainActor<\/code> \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">5 770<\/p>\n<\/td>\n<td>\n<p align=\"left\">5 769<\/p>\n<\/td>\n<td>\n<p align=\"left\">5 731<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Serial <code>DispatchQueue<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">199,42<\/p>\n<\/td>\n<td>\n<p align=\"left\">107,47<\/p>\n<\/td>\n<td>\n<p align=\"left\">88,23<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Concurrent queue, \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 <code>sync(flags: .barrier)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">204,76<\/p>\n<\/td>\n<td>\n<p align=\"left\">210,56<\/p>\n<\/td>\n<td>\n<p align=\"left\">209,61<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Concurrent queue, \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 <code>async(flags: .barrier)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">204,94<\/p>\n<\/td>\n<td>\n<p align=\"left\">115,66<\/p>\n<\/td>\n<td>\n<p align=\"left\">110,42<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u0435\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,265<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,265<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,83<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 \u00ab\u0411\u0435\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438\u00bb \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0430\u043c \u0446\u0438\u043a\u043b \u0441 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u043a \u043f\u0430\u043c\u044f\u0442\u0438. \u041e\u043d\u0430 \u0438\u0437\u043c\u0435\u0440\u044f\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0438 \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0414\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0447\u0435\u0440\u0435\u0437 <code>async(flags: .barrier)<\/code> \u0432 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0445\u043e\u0434\u0438\u0442 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435, \u043f\u043e\u043a\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0432\u0441\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041a <code>@MainActor<\/code> \u044f \u0432\u0435\u0440\u043d\u0443\u0441\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e actors.<\/p>\n<\/div>\n<\/details>\n<p><code><strong>Mutex<\/strong><\/code><strong>, <\/strong><code><strong>OSAllocatedUnfairLock<\/strong><\/code><strong> \u0438 <\/strong><code><strong>os_unfair_lock<\/strong><\/code><strong> \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/strong> \u0423 \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u0445 \u043e\u043a\u043e\u043b\u043e 1,86 \u043d\u0441 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0437\u043d\u0430\u043a\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u042d\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e: \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 Apple <code>Mutex<\/code> \u0438 <code>OSAllocatedUnfairLock<\/code> \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 <code>os_unfair_lock<\/code>. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0440\u0430\u0434\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>os_unfair_lock<\/code> \u0441 \u0440\u0443\u0447\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 <code>lock()<\/code> \u0438 <code>unlock()<\/code>. <code>Mutex<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a \u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<p><code><strong>pthread_mutex<\/strong><\/code><strong> \u0438 <\/strong><code><strong>NSLock<\/strong><\/code><strong> \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u043d\u043e \u0441\u0447\u0435\u0442 \u0438\u0434\u0435\u0442 \u043d\u0430 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/strong> \u0423 <code>pthread_mutex<\/code> 4,6 \u043d\u0441 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u0443 <code>NSLock<\/code> 6,4 \u043d\u0441. \u042d\u0442\u043e \u0432 2,5 \u0438 \u0432 3,4 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0443 <code>Mutex<\/code>. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u043b\u0430\u0445 <code>NSLock<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 4,5 \u043d\u0441 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 10 000 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0432\u0441\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 45 \u043c\u043a\u0441 \u0437\u0430 \u044d\u0442\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f 3,4\u00d7 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043c\u0435\u043d\u044b <code>NSLock<\/code> \u043d\u0430 <code>Mutex<\/code> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<p><code><strong>Atomic<\/strong><\/code><strong> \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u0441\u0435\u0445 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0438 \u0438 \u0437\u0430\u043f\u0438\u0441\u0438, \u0430 \u043d\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435 \u0440\u0430\u0432\u0435\u043d <\/strong><code><strong>Mutex<\/strong><\/code><strong>.<\/strong> \u0427\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 0,27 \u043d\u0441, \u044d\u0442\u043e \u0432 \u0441\u0435\u043c\u044c \u0440\u0430\u0437 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 <code>Mutex<\/code>. \u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 1,88 \u043d\u0441, \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439. \u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439, \u0438 \u043e\u043d\u0430 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043e\u0440\u043e\u0436\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p><strong>Actor \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0434\u043e\u0440\u043e\u0436\u0435 \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437.<\/strong> \u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a actor \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 63 \u043d\u0441 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u0442\u0440\u0435\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u042d\u0442\u043e \u0432 34 \u0440\u0430\u0437\u0430 \u0434\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043f\u043e\u0434 <code>Mutex<\/code>. \u0423 serial queue \u043e\u0442 88 \u0434\u043e 199 \u043d\u0441 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0434\u0435\u0441\u044c \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u0430\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0446\u0435\u043d\u0443 \u0441\u0430\u043c\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a actor \u0438\u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/p>\n<p>\u0423 \u041c\u0430\u0440\u0438\u043d\u0430 \u0422\u043e\u0434\u043e\u0440\u043e\u0432\u0430 actor \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 serial queue, \u0443 \u043c\u0435\u043d\u044f \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0432 \u0442\u043e\u043c, \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f actor. \u0412 \u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0435 \u0437\u0430\u0434\u0430\u0447\u0430 <code>Task<\/code> \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 SwiftUI \u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044e <code>MainActor<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0441 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0430 actor \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u0412 \u043c\u043e\u0435\u043c \u0442\u0435\u0441\u0442\u0435 \u043a actor \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a actor \u0441 <code>MainActor<\/code>, \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e actors.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443. \u0427\u0442\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 serial queue \u0437\u0430\u043d\u044f\u043b\u043e 199 \u043d\u0441, \u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 88 \u043d\u0441, \u0445\u043e\u0442\u044f \u043e\u0431\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>queue.sync<\/code>.<\/p>\n<h3>\u0414\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a. \u0417\u0434\u0435\u0441\u044c \u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e \u0447\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/fd\/96\/ea\/fd96ea0b04c38aaa9a147ff7d4883c81.png\" alt=\"\u0427\u0438\u0441\u043b\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0439 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u0440\u0438 \u043e\u0434\u043d\u043e\u043c \u0438 \u0434\u0432\u0443\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445. Mutex: 539 \u0438 102 \u043c\u043b\u043d, OSAllocatedUnfairLock: 539 \u0438 99 \u043c\u043b\u043d, pthread_mutex: 216 \u0438 22 \u043c\u043b\u043d, NSLock: 157 \u0438 15 \u043c\u043b\u043d, Atomic: 532 \u0438 310 \u043c\u043b\u043d.\" title=\"iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c. \u0427\u0435\u043c \u0434\u043b\u0438\u043d\u043d\u0435\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.\" width=\"2400\" height=\"1860\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/fd\/96\/ea\/fd96ea0b04c38aaa9a147ff7d4883c81.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/fd\/96\/ea\/fd96ea0b04c38aaa9a147ff7d4883c81.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c. \u0427\u0435\u043c \u0434\u043b\u0438\u043d\u043d\u0435\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/figcaption><\/div>\n<\/figure>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a, \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439\/\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0414\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u0430, \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439\/\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">539<\/p>\n<\/td>\n<td>\n<p align=\"left\">102<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">539<\/p>\n<\/td>\n<td>\n<p align=\"left\">99<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">216<\/p>\n<\/td>\n<td>\n<p align=\"left\">22<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">157<\/p>\n<\/td>\n<td>\n<p align=\"left\">15<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Atomic<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">532<\/p>\n<\/td>\n<td>\n<p align=\"left\">310<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u0434\u0430\u0435\u0442 \u0443 \u0432\u0441\u0435\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432: \u0443 <code>Mutex<\/code> \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u043f\u044f\u0442\u044c \u0440\u0430\u0437, \u0443 <code>Atomic<\/code> \u0432 1,7 \u0440\u0430\u0437\u0430. \u041f\u0440\u0438 \u0434\u0432\u0443\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 <code>Atomic<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u0442\u0440\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0447\u0435\u043c <code>Mutex<\/code>, \u0445\u043e\u0442\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0440\u0430\u0432\u043d\u044b.<\/p>\n<p>\u0412 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0436\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441 \u0448\u0435\u0441\u0442\u044c\u044e \u0438 \u0434\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c\u044e \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438, \u043e\u043d\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\/tree\/main\/Experiments\/BaseComparison\" rel=\"noopener nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h3>iPhone 11 Pro Max<\/h3>\n<p>\u041d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u043e\u0431\u0449\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0442\u0430 \u0436\u0435. <code>Mutex<\/code>, <code>OSAllocatedUnfairLock<\/code> \u0438 <code>os_unfair_lock<\/code> \u0441\u043d\u043e\u0432\u0430 \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043e\u043a\u043e\u043b\u043e 9,5 \u043d\u0441. Actor \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 65 \u043d\u0441, serial queue \u043d\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435 199 \u043d\u0441.<\/p>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u0439 \u0442\u0440\u0438:<\/p>\n<ul>\n<li>\n<p><code>NSLock<\/code> \u0438 <code>pthread_mutex<\/code> \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043e\u0442\u0441\u0442\u0430\u044e\u0442 \u043e\u0442 <code>Mutex<\/code>: 10,6 \u0438 10,3 \u043d\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 9,5 \u043d\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f <code>Atomic<\/code> \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0434\u0435\u0441\u044c \u0432\u0430\u0436\u0435\u043d. \u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0441 acquiring\/releasing \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 8,3 \u043d\u0441, \u0430 \u0441 relaxed 2,3 \u043d\u0441.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0434\u0432\u0443\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439. <code>NSLock<\/code> \u0438 <code>pthread_mutex<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 52 \u0438 55 \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0430 <code>Mutex<\/code> 21 \u043c\u043b\u043d. \u041d\u0430 iPhone 15 Pro Max \u0431\u044b\u043b\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442: 102 \u043c\u043b\u043d \u0443 <code>Mutex<\/code> \u043f\u0440\u043e\u0442\u0438\u0432 15 \u0438 22 \u043c\u043b\u043d.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0412\u044b\u0432\u043e\u0434<\/h3>\n<p>\u0414\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u043e\u0431\u0449\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 <code>Mutex<\/code>. \u041e\u043d \u0442\u0430\u043a \u0436\u0435 \u0431\u044b\u0441\u0442\u0440, \u043a\u0430\u043a <code>os_unfair_lock<\/code>, \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0443\u0447\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>lock()<\/code> \u0438 <code>unlock()<\/code>.<\/p>\n<p><code>Atomic<\/code> \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0439 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438: \u0447\u0442\u0435\u043d\u0438\u0435, \u0437\u0430\u043c\u0435\u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d \u043d\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 <code>Mutex<\/code> \u0431\u0435\u0437 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u0438 \u0438 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0442 \u0434\u0432\u0430 \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<p>\u041e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a actor \u0438\u043b\u0438 \u043a \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0440\u0430\u0434\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u0440\u043e\u0448\u0435\u0447\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0440\u043e\u0433\u043e: \u0442\u0430\u043a\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u0437\u0430\u0445\u0432\u0430\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<p>\u041d\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u043b\u0435\u0436\u0438\u0442 \u043d\u0435 \u043e\u0434\u043d\u043e \u0447\u0438\u0441\u043b\u043e. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u043e\u0431\u0449\u0438\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c.<\/p>\n<p><a class=\"anchor\" name=\"shared-dictionary\" id=\"shared-dictionary\"><\/a><\/p>\n<h2>\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u043b\u043e\u0432\u0430\u0440\u044e<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043b\u0435\u0436\u0438\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0443 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c. \u0418\u043d\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u0440\u0430\u0437\u0443.<\/p>\n<p>\u0422\u0430\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0435\u0442\u044c\u044e \u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u041f\u0440\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u044f \u043e\u043f\u0438\u0440\u0430\u043b\u0441\u044f \u043d\u0430 <a href=\"https:\/\/github.com\/SDWebImage\/SDWebImage\/blob\/master\/SDWebImage\/Core\/SDWebImageManager.m\" rel=\"noopener nofollow\"><code>runningOperations<\/code> \u0432 SDWebImage<\/a> \u0438 <a href=\"https:\/\/github.com\/Alamofire\/Alamofire\/blob\/master\/Source\/Core\/RequestTaskMap.swift\" rel=\"noopener nofollow\"><code>RequestTaskMap<\/code> \u0432 Alamofire<\/a>. \u0417\u0434\u0435\u0441\u044c \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e\u0445\u043e\u0436\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0435 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f.<\/p>\n<p>\u0412 \u0442\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u0440\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u044b\u0439, \u0430 \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438. \u041e\u0434\u0438\u043d \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u044b\u0445 1024 \u0441\u0432\u043e\u0438\u0445 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u0442 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c.<\/p>\n<p>\u042f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430:<\/p>\n<ul>\n<li>\n<p><strong>\u0441 \u043f\u0430\u0443\u0437\u0430\u043c\u0438:<\/strong> \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u0441\u044b\u043f\u0430\u0435\u0442 \u043d\u0430 50 \u043c\u043a\u0441;<\/p>\n<\/li>\n<li>\n<p><strong>\u0431\u0435\u0437 \u043f\u0430\u0443\u0437:<\/strong> \u043f\u043e\u0442\u043e\u043a\u0438 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043a \u0441\u043b\u043e\u0432\u0430\u0440\u044e \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0438\u043b\u0438 \u0432\u043e\u0441\u0435\u043c\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u0412\u043e\u0441\u044c\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u043c \u0443\u0436\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0448\u0435\u0441\u0442\u0438 \u044f\u0434\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430.<\/p>\n<p>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0437\u0434\u0435\u0441\u044c \u0434\u0432\u0430. \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u0438\u0442\u0441\u044f \u043e\u0434\u0438\u043d <code>add<\/code> \u0438\u043b\u0438 <code>remove<\/code> \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438, \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u044f \u043f\u0440\u0438\u0432\u043e\u0436\u0443 p50 \u0438 p99. \u0427\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u0430\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u043f\u0430\u0443\u0437\u044b.<\/p>\n<h3>\u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0437\u0430\u0449\u0438\u0449\u0435\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>Mutex<\/code>:<\/p>\n<pre><code class=\"swift\">final class MutexRegistry {    private let downloads = Mutex&lt;[Int: Download]&gt;([:])    func add(_ download: Download, id: Int) {        downloads.withLock { downloads in            downloads[id] = download        }    }    func remove(id: Int) -&gt; Download? {        downloads.withLock { downloads in            downloads.removeValue(forKey: id)        }    }    func cancelAll() -&gt; Int {        downloads.withLock { downloads in            let count = downloads.count            for download in downloads.values {                download.cancel()            }            downloads.removeAll(keepingCapacity: true)            return count        }    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0434\u0435\u0441\u044f\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432: \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0438 serial queue. \u041e\u0434\u0438\u043d \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u044f\u0441\u043d\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. <code>OSAllocatedUnfairLock<\/code> \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441 \u0444\u043b\u0430\u0433\u043e\u043c <code>.adaptiveSpin<\/code>, \u043e\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0441 iOS 18:<\/p>\n<pre><code class=\"swift\">downloads.withLock(flags: .adaptiveSpin) { downloads in    downloads[id] = download}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421 \u044d\u0442\u0438\u043c \u0444\u043b\u0430\u0433\u043e\u043c \u043f\u043e\u0442\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c, \u043d\u0435 \u0437\u0430\u0441\u044b\u043f\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043d \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0436\u0434\u0435\u0442 \u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435, \u043f\u043e\u043a\u0430 \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0434\u0440\u0435. \u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u044b\u043b \u0432 4,6 \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e. \u0417\u0434\u0435\u0441\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0440\u0443\u0433\u043e\u0439.<\/p>\n<p>\u041a\u043e\u0434 \u0432\u0441\u0435\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\/tree\/main\/Experiments\/RequestRegistry\" rel=\"noopener nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h3>\u0421 \u043f\u0430\u0443\u0437\u0430\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f\u043c\u0438<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0442\u043e\u043a\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u043f\u0430\u0443\u0437\u044b, \u0432\u044b\u0431\u043e\u0440 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043e\u0431\u0449\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041f\u0440\u0438 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0432\u0441\u0435 \u0434\u0435\u0441\u044f\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043e\u0442 57,3 \u0434\u043e 57,8 \u0442\u044b\u0441\u044f\u0447\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 1%. \u041f\u0440\u0438 \u0432\u043e\u0441\u044c\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0442\u0430 \u0436\u0435: \u043e\u0442 110,1 \u0434\u043e 110,8 \u0442\u044b\u0441\u044f\u0447\u0438.<\/p>\n<p>\u0412\u0440\u0435\u043c\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f. \u0423 <code>Mutex<\/code> p99 \u043f\u0440\u0438 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0440\u0430\u0432\u0435\u043d 0,125 \u043c\u043a\u0441, \u0443 serial queue 3,75 \u043c\u043a\u0441, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 30 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435. \u041d\u043e \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u043d\u044f\u0442\u044b \u043f\u0430\u0443\u0437\u0430\u043c\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0432\u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043e\u0431\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044d\u0442\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442.<\/p>\n<h3>\u0411\u0435\u0437 \u043f\u0430\u0443\u0437<\/h3>\n<p>\u0411\u0435\u0437 \u043f\u0430\u0443\u0437 \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0442 \u0437\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443, \u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0439. \u0414\u0430\u043b\u044c\u0448\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u043b\u044f \u0432\u043e\u0441\u044c\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0447\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443: \u0447\u0435\u043c \u0434\u043b\u0438\u043d\u043d\u0435\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/48\/a7\/2e\/48a72eefda3e73f7d0be297535d24979.png\" alt=\"\u0427\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u0435\u043c \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u0440\u0438 \u0432\u043e\u0441\u044c\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0431\u0435\u0437 \u043f\u0430\u0443\u0437. OSAllocatedUnfairLock \u0441 adaptiveSpin 1,12 \u043c\u043b\u043d, OSAllocatedUnfairLock 1,08 \u043c\u043b\u043d, Mutex 1,06 \u043c\u043b\u043d, os_unfair_lock 1,04 \u043c\u043b\u043d, objc_sync 0,99 \u043c\u043b\u043d, NSRecursiveLock 0,91 \u043c\u043b\u043d, NSLock 0,89 \u043c\u043b\u043d, pthread_mutex 0,89 \u043c\u043b\u043d, DispatchSemaphore 0,20 \u043c\u043b\u043d, serial DispatchQueue 0,18 \u043c\u043b\u043d.\" title=\"\u0412\u043e\u0441\u0435\u043c\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0431\u0435\u0437 \u043f\u0430\u0443\u0437, iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"1725\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/48\/a7\/2e\/48a72eefda3e73f7d0be297535d24979.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/48\/a7\/2e\/48a72eefda3e73f7d0be297535d24979.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u043e\u0441\u0435\u043c\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0431\u0435\u0437 \u043f\u0430\u0443\u0437, iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u0427\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430\u0434\u043e\u043b\u0433\u043e \u0437\u0430\u0441\u0442\u0440\u0435\u0432\u0430\u0435\u0442 \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438. \u042d\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u043f\u043e p99 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u0437\u043e\u0432\u0430, \u0438 \u0437\u0434\u0435\u0441\u044c \u0443\u0436\u0435 \u0447\u0435\u043c \u043a\u043e\u0440\u043e\u0447\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/f7\/4b\/d2\/f74bd2b0a88c7761418c6a16b52272ce.png\" alt=\"p99 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u0438 \u0432\u043e\u0441\u044c\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0431\u0435\u0437 \u043f\u0430\u0443\u0437. OSAllocatedUnfairLock \u0441 adaptiveSpin 2,1 \u043c\u043a\u0441, Mutex 19,1 \u043c\u043a\u0441, OSAllocatedUnfairLock 22,5 \u043c\u043a\u0441, DispatchSemaphore 47,3 \u043c\u043a\u0441, NSRecursiveLock 50,4 \u043c\u043a\u0441, pthread_mutex 51,7 \u043c\u043a\u0441, NSLock 51,8 \u043c\u043a\u0441, serial DispatchQueue 64,1 \u043c\u043a\u0441, os_unfair_lock 67,0 \u043c\u043a\u0441, objc_sync 68,6 \u043c\u043a\u0441.\" title=\"\u0412\u043e\u0441\u0435\u043c\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0431\u0435\u0437 \u043f\u0430\u0443\u0437, iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"1725\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/f7\/4b\/d2\/f74bd2b0a88c7761418c6a16b52272ce.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/f7\/4b\/d2\/f74bd2b0a88c7761418c6a16b52272ce.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u043e\u0441\u0435\u043c\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0431\u0435\u0437 \u043f\u0430\u0443\u0437, iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043c\u0435\u0434\u0438\u0430\u043d\u043e\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u0437\u043e\u0432\u0430:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">p50 \u0432\u044b\u0437\u043e\u0432\u0430, \u043c\u043a\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">p99 \u0432\u044b\u0437\u043e\u0432\u0430, \u043c\u043a\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439\/\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code> \u0441 <code>.adaptiveSpin<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0,42<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,08<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,12<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0,29<\/p>\n<\/td>\n<td>\n<p align=\"left\">22,54<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,08<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0,29<\/p>\n<\/td>\n<td>\n<p align=\"left\">19,06<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,06<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>os_unfair_lock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0,38<\/p>\n<\/td>\n<td>\n<p align=\"left\">67,02<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,04<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>objc_sync_enter<\/code> \/ <code>objc_sync_exit<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0,50<\/p>\n<\/td>\n<td>\n<p align=\"left\">68,61<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,99<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSRecursiveLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0,33<\/p>\n<\/td>\n<td>\n<p align=\"left\">50,43<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,91<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0,33<\/p>\n<\/td>\n<td>\n<p align=\"left\">51,79<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,89<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0,38<\/p>\n<\/td>\n<td>\n<p align=\"left\">51,69<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,89<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>DispatchSemaphore<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">38,46<\/p>\n<\/td>\n<td>\n<p align=\"left\">47,27<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,20<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Serial <code>DispatchQueue<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">40,06<\/p>\n<\/td>\n<td>\n<p align=\"left\">64,10<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,18<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Serial queue \u0438 <\/strong><code><strong>DispatchSemaphore<\/strong><\/code><strong> \u043e\u0442\u0441\u0442\u0430\u044e\u0442 \u0432 \u043f\u044f\u0442\u044c-\u0448\u0435\u0441\u0442\u044c \u0440\u0430\u0437.<\/strong> \u041e\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 0,18 \u0438 0,20 \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u0440\u043e\u0442\u0438\u0432 1,06 \u043c\u043b\u043d \u0443 <code>Mutex<\/code>. \u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u0438\u0442\u0441\u044f 40 \u043c\u043a\u0441, \u0430 \u043f\u043e\u0434 <code>Mutex<\/code> 0,29 \u043c\u043a\u0441.<\/p>\n<p><code><strong>NSLock<\/strong><\/code><strong> \u0438 <\/strong><code><strong>pthread_mutex<\/strong><\/code><strong> \u0443\u0441\u0442\u0443\u043f\u0430\u044e\u0442 <\/strong><code><strong>Mutex<\/strong><\/code><strong> \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 15%.<\/strong> \u0423 \u043e\u0431\u043e\u0438\u0445 0,89 \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0430 p99 \u0440\u0430\u0432\u0435\u043d 52 \u043c\u043a\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 19 \u043c\u043a\u0441 \u0443 <code>Mutex<\/code>.<\/p>\n<p><code><strong>os_unfair_lock<\/strong><\/code><strong> \u0441\u043d\u043e\u0432\u0430 \u043d\u0435 \u0434\u0430\u043b \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u0430.<\/strong> \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0443 \u043d\u0435\u0433\u043e \u043f\u043e\u0447\u0442\u0438 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 <code>Mutex<\/code>, \u0430 p99 \u0432 \u0442\u0440\u0438 \u0441 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043e\u0439 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435: 67 \u043f\u0440\u043e\u0442\u0438\u0432 19 \u043c\u043a\u0441.<\/p>\n<p><strong>\u0424\u043b\u0430\u0433 <\/strong><code><strong>.adaptiveSpin<\/strong><\/code><strong> \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0434\u043a\u0438\u0435 \u0434\u043e\u043b\u0433\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b.<\/strong> \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 <code>Mutex<\/code> p99 \u0443\u043f\u0430\u043b \u0441 19 \u0434\u043e 2 \u043c\u043a\u0441. \u0427\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0432\u044b\u0440\u043e\u0441\u043b\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 6%. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0441\u0442\u0430\u043b \u0434\u043e\u043b\u044c\u0448\u0435: p50 \u0432\u044b\u0440\u043e\u0441 \u0441 0,29 \u0434\u043e 0,42 \u043c\u043a\u0441. \u041f\u0440\u0438 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0445\u043e\u0436\u0438\u0439: p99 \u0441\u043d\u0438\u0437\u0438\u043b\u0441\u044f \u0441 6 \u0434\u043e 1,6 \u043c\u043a\u0441.<\/p>\n<p>\u041e\u0431\u0449\u0430\u044f \u043e\u0442\u043c\u0435\u043d\u0430 \u043f\u0440\u0438 \u0432\u043e\u0441\u044c\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 25 \u043c\u043a\u0441 \u0441 <code>Mutex<\/code>, 14 \u043c\u043a\u0441 \u0441 <code>.adaptiveSpin<\/code> \u0438 42 \u043c\u043a\u0441 \u0441 serial queue.<\/p>\n<h3>iPhone 11 Pro Max<\/h3>\n<p>\u041d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0442\u0430 \u0436\u0435. \u0421 \u043f\u0430\u0443\u0437\u0430\u043c\u0438 \u0432\u0441\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043e\u0442 55,5 \u0434\u043e 56,5 \u0442\u044b\u0441\u044f\u0447\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u0440\u0438 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445. \u0411\u0435\u0437 \u043f\u0430\u0443\u0437 \u043f\u0440\u0438 \u0432\u043e\u0441\u044c\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 serial queue \u043e\u0442\u0441\u0442\u0430\u0435\u0442 \u043e\u0442 <code>Mutex<\/code> \u0432 \u043f\u044f\u0442\u044c \u0440\u0430\u0437: 0,14 \u043f\u0440\u043e\u0442\u0438\u0432 0,74 \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0424\u043b\u0430\u0433 <code>.adaptiveSpin<\/code> \u0441\u043d\u0438\u0436\u0430\u0435\u0442 p99 \u0441 48 \u0434\u043e 2,9 \u043c\u043a\u0441 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 5% \u043a \u0447\u0438\u0441\u043b\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434<\/h3>\n<p><code>Mutex<\/code> \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0438 \u0434\u043b\u044f \u0441\u043b\u043e\u0432\u0430\u0440\u044f. \u0421\u0440\u0435\u0434\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u043e\u043d \u0431\u044b\u043b \u0432 \u0447\u0438\u0441\u043b\u0435 \u043b\u0443\u0447\u0448\u0438\u0445 \u0438 \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0438 \u043f\u043e p99.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043a \u0441\u043b\u043e\u0432\u0430\u0440\u044e \u043f\u043e\u0442\u043e\u043a\u0438 \u0437\u0430\u043d\u044f\u0442\u044b \u0434\u0440\u0443\u0433\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043e\u0431\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438\u0434\u0443\u0442 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e, serial queue \u0438 <code>DispatchSemaphore<\/code> \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430\u043c. \u0410 \u0444\u043b\u0430\u0433 <code>.adaptiveSpin<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0438\u0433\u0440\u0430\u043b \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435, \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b \u0440\u0435\u0434\u043a\u0438\u0435 \u0434\u043e\u043b\u0433\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0432 \u0434\u0435\u0432\u044f\u0442\u044c \u0440\u0430\u0437. \u0415\u0433\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432.<\/p>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043d\u043e\u0432\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0435: \u043e\u0434\u0438\u043d \u0444\u043b\u0430\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0430\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u044e\u0442 \u0438 \u0440\u0435\u0434\u043a\u043e \u043c\u0435\u043d\u044f\u044e\u0442.<\/p>\n<p><a class=\"anchor\" name=\"feature-flag\" id=\"feature-flag\"><\/a><\/p>\n<h2>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c feature flag<\/h2>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c feature flag, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442, \u043a\u0430\u043a\u0443\u044e \u0432\u0435\u0442\u043a\u0443 \u043a\u043e\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c. \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0440\u0435\u0436\u0435. \u0415\u0441\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u043b\u0430\u0433\u0443 \u043d\u0443\u0436\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u041f\u043e\u0445\u043e\u0436\u0438\u0435 \u0444\u043b\u0430\u0433\u0438 \u0435\u0441\u0442\u044c \u043f\u043e\u0447\u0442\u0438 \u0432 \u043b\u044e\u0431\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u0418\u0437 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e: \u0432 <a href=\"https:\/\/github.com\/Automattic\/pocket-casts-ios\/pull\/5186\" rel=\"noopener nofollow\">Pocket Casts<\/a> \u0440\u0430\u043d\u044c\u0448\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u043e\u0439 \u0444\u043b\u0430\u0433 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e serial queue \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u043b <code>sync<\/code> \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0447\u0442\u0435\u043d\u0438\u0438, \u043f\u043e\u0442\u043e\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439. \u0412 <a href=\"https:\/\/github.com\/SDWebImage\/SDWebImage\/blob\/master\/SDWebImage\/Core\/SDWebImageManager.m\" rel=\"noopener nofollow\">SDWebImage<\/a> \u0444\u043b\u0430\u0433 <code>isCancelled<\/code> \u0437\u0430\u0449\u0438\u0449\u0435\u043d \u0447\u0435\u0440\u0435\u0437 <code>@synchronized<\/code>.<\/p>\n<p>\u0412 \u0442\u0435\u0441\u0442\u0435 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u0447\u0438\u0442\u0430\u0435\u0442 \u0444\u043b\u0430\u0433, \u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0437 \u0432 10 \u043c\u0441. \u042f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e \u0432\u0440\u0435\u043c\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0427\u0442\u0435\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u0430 \u043f\u043e\u0434 <code>Mutex<\/code>:<\/p>\n<pre><code class=\"swift\">let isFeatureEnabled = Mutex&lt;Bool&gt;(false)let enabled = isFeatureEnabled.withLock { value in    value}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0422\u043e \u0436\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 <code>Atomic<\/code>:<\/p>\n<pre><code class=\"swift\">let isFeatureEnabled = Atomic&lt;Bool&gt;(false)let enabled = isFeatureEnabled.load(ordering: .acquiring)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 17 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0438\u0445 \u043a\u043e\u0434 \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\/tree\/main\/Experiments\/HotFlag\" rel=\"noopener nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h3>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h3>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 <code>Atomic<\/code> \u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438. \u041d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f: \u0447\u0435\u043c \u043a\u043e\u0440\u043e\u0447\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/5a\/7a\/89\/5a7a891f7f7fd2ae4a76412d5c3f290a.png\" alt=\"\u0412\u0440\u0435\u043c\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0444\u043b\u0430\u0433\u0430 \u0434\u043b\u044f Atomic \u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a. Atomic 0,3 \u043d\u0441, ManagedAtomic 0,8 \u043d\u0441, Mutex, OSAllocatedUnfairLock \u0438 os_unfair_lock \u043f\u043e 1,9 \u043d\u0441, DispatchSemaphore 3,7 \u043d\u0441, pthread_mutex 4,6 \u043d\u0441, pthread_rwlock 6,1 \u043d\u0441, NSLock 6,5 \u043d\u0441, OSAllocatedUnfairLock \u0441 adaptiveSpin 8,9 \u043d\u0441, objc_sync 11,2 \u043d\u0441, NSRecursiveLock 13,2 \u043d\u0441.\" title=\"\u041e\u0434\u0438\u043d \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a, \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043c\u0435\u043d\u044f\u0435\u0442 \u0444\u043b\u0430\u0433 \u0440\u0430\u0437 \u0432 10 \u043c\u0441. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"2001\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/5a\/7a\/89\/5a7a891f7f7fd2ae4a76412d5c3f290a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/5a\/7a\/89\/5a7a891f7f7fd2ae4a76412d5c3f290a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0434\u0438\u043d \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a, \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043c\u0435\u043d\u044f\u0435\u0442 \u0444\u043b\u0430\u0433 \u0440\u0430\u0437 \u0432 10 \u043c\u0441. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0440\u044f\u0434\u043e\u043c \u0441 <code>Atomic<\/code> \u0438 <code>Mutex<\/code>.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/fc\/ef\/b2\/fcefb260a1310896e5b9862a06b9f5e1.png\" alt=\"\u0412\u0440\u0435\u043c\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0444\u043b\u0430\u0433\u0430: Atomic 0,3 \u043d\u0441, Mutex 1,9 \u043d\u0441, serial DispatchQueue 202,8 \u043d\u0441, concurrent queue \u0441 async barrier 207,3 \u043d\u0441, concurrent queue \u0441 sync barrier 207,9 \u043d\u0441.\" title=\"\u041e\u0434\u0438\u043d \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a, \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043c\u0435\u043d\u044f\u0435\u0442 \u0444\u043b\u0430\u0433 \u0440\u0430\u0437 \u0432 10 \u043c\u0441. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"1035\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/fc\/ef\/b2\/fcefb260a1310896e5b9862a06b9f5e1.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/fc\/ef\/b2\/fcefb260a1310896e5b9862a06b9f5e1.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0434\u0438\u043d \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a, \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043c\u0435\u043d\u044f\u0435\u0442 \u0444\u043b\u0430\u0433 \u0440\u0430\u0437 \u0432 10 \u043c\u0441. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u0435\u043d\u0438\u0435, \u043d\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e <code>Mutex<\/code><\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Atomic<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0,32<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,2\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ManagedAtomic<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0,80<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,4\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,0\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,0\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>os_unfair_lock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,0\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>DispatchSemaphore<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">3,74<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,0\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">4,56<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,5\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_rwlock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">6,10<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,3\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">6,47<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,5\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code> \u0441 <code>.adaptiveSpin<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">8,89<\/p>\n<\/td>\n<td>\n<p align=\"left\">4,8\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>objc_sync_enter<\/code> \/ <code>objc_sync_exit<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">11,24<\/p>\n<\/td>\n<td>\n<p align=\"left\">6,0\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSRecursiveLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">13,20<\/p>\n<\/td>\n<td>\n<p align=\"left\">7,1\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Serial <code>DispatchQueue<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">202,78<\/p>\n<\/td>\n<td>\n<p align=\"left\">109\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Concurrent queue, \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 <code>async(flags: .barrier)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">207,31<\/p>\n<\/td>\n<td>\n<p align=\"left\">111\u00d7<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Concurrent queue, \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 <code>sync(flags: .barrier)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">207,85<\/p>\n<\/td>\n<td>\n<p align=\"left\">112\u00d7<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><code><strong>Atomic<\/strong><\/code><strong> \u0447\u0438\u0442\u0430\u0435\u0442 \u0444\u043b\u0430\u0433 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u0441\u0435\u0445.<\/strong> \u041e\u0434\u043d\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 0,32 \u043d\u0441, \u044d\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0432 \u0448\u0435\u0441\u0442\u044c \u0440\u0430\u0437 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 <code>Mutex<\/code>. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u043b. \u0417\u0434\u0435\u0441\u044c \u0435\u0433\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0442\u043e\u043a, \u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e <code>Atomic<\/code> \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u043e\u0441\u044c. <code>ManagedAtomic<\/code> \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 <a href=\"https:\/\/github.com\/apple\/swift-atomics\" rel=\"noopener nofollow\">swift-atomics<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0434\u043e iOS 18, \u0442\u043e\u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a: 0,80 \u043d\u0441.<\/p>\n<p><code><strong>Mutex<\/strong><\/code><strong>, <\/strong><code><strong>OSAllocatedUnfairLock<\/strong><\/code><strong> \u0438 <\/strong><code><strong>os_unfair_lock<\/strong><\/code><strong> \u0440\u0430\u0432\u043d\u044b.<\/strong> \u0423 \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u0445 1,86 \u043d\u0441 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u0443 <code>NSLock<\/code> 6,5 \u043d\u0441.<\/p>\n<p><code><strong>pthread_rwlock<\/strong><\/code><strong> \u043d\u0435 \u0434\u0430\u043b \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u0430.<\/strong> \u0427\u0442\u0435\u043d\u0438\u0435 \u0441 \u043d\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 6,1 \u043d\u0441, \u0432 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430 \u0434\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u043e\u0434 <code>Mutex<\/code>. \u0427\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0434\u0435\u0441\u044c \u043e\u0434\u0438\u043d, \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u043a\u043e\u043c\u0443.<\/p>\n<p><strong>\u0427\u0442\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432 \u0441\u0442\u043e \u0440\u0430\u0437 \u0434\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u043e\u0434 <\/strong><code><strong>Mutex<\/strong><\/code><strong>.<\/strong> \u0421 serial queue \u043e\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 203 \u043d\u0441, \u0441 concurrent queue \u043e\u043a\u043e\u043b\u043e 207 \u043d\u0441.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431, \u044d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0447\u0442\u0435\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u0444\u043b\u0430\u0433 10 000 \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u043d\u0430 \u0432\u0441\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0437\u0430 \u044d\u0442\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0443\u0439\u0434\u0435\u0442 3 \u043c\u043a\u0441 \u0441 <code>Atomic<\/code>, 19 \u043c\u043a\u0441 \u0441 <code>Mutex<\/code> \u0438 2 \u043c\u0441 \u0441 serial queue.<\/p>\n<h3>iPhone 11 Pro Max<\/h3>\n<p>\u041d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0442\u0430 \u0436\u0435: <code>Atomic<\/code> 0,61 \u043d\u0441, <code>Mutex<\/code> 9,1 \u043d\u0441, serial queue 407 \u043d\u0441. \u0414\u043b\u044f <code>Atomic<\/code> \u043d\u0430 \u044d\u0442\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u0432\u0430\u0436\u0435\u043d \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u043c\u044f\u0442\u0438. \u0427\u0442\u0435\u043d\u0438\u0435 \u0441 relaxed \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 0,46 \u043d\u0441, \u043d\u0430 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0441 acquiring. \u041d\u0430 iPhone 15 Pro Max \u043e\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0434\u0430\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0444\u043b\u0430\u0433 \u0447\u0430\u0441\u0442\u043e \u0447\u0438\u0442\u0430\u044e\u0442, \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <code>Atomic<\/code>.<\/p>\n<p><code>Mutex<\/code> \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c: \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0441 <code>Atomic<\/code> \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 1,5 \u043d\u0441 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0440\u0430\u0434\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0444\u043b\u0430\u0433\u0430 \u0434\u043e\u0440\u043e\u0433\u043e. \u0427\u0442\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0435 \u0432 \u0441\u0442\u043e \u0440\u0430\u0437 \u0434\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u043e\u0434 <code>Mutex<\/code>, \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u0445\u0435\u043c\u044b \u043e\u0442\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0432 <a href=\"https:\/\/github.com\/Automattic\/pocket-casts-ios\/pull\/5186\" rel=\"noopener nofollow\">Pocket Casts<\/a>.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e.<\/p>\n<p><a class=\"anchor\" name=\"read-write-lock\" id=\"read-write-lock\"><\/a><\/p>\n<h2>\u041c\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u0439, \u043c\u0430\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439: \u043d\u0443\u0436\u0435\u043d \u043b\u0438 read-write lock?<\/h2>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0447\u0438\u0442\u0430\u044e\u0442, \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c: \u043f\u043e\u043a\u0430 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u0447\u0438\u0442\u0430\u0435\u0442, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0436\u0434\u0443\u0442, \u0445\u043e\u0442\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u041e\u0442\u0441\u044e\u0434\u0430 \u0438 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435: read-write lock \u0438\u043b\u0438 concurrent queue \u0441 barrier. \u0421 \u043d\u0438\u043c\u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u043c\u043e\u0433\u0443\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0430.<\/p>\n<p>\u0422\u0430\u043a \u0434\u0435\u043b\u0430\u044e\u0442 \u0438 \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445. \u0412 <a href=\"https:\/\/github.com\/apollographql\/apollo-ios\/blob\/1.25.7\/Sources\/Apollo\/ApolloStore.swift\" rel=\"noopener nofollow\">Apollo iOS 1.x<\/a> \u043a\u0435\u0448 \u0447\u0438\u0442\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 concurrent queue, \u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 <code>async(flags: .barrier)<\/code>. \u0412 <a href=\"https:\/\/github.com\/apple\/swift-log\/blob\/1.17.0\/Sources\/Logging\/LoggingSystem.swift\" rel=\"noopener nofollow\">swift-log<\/a> \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 <code>LoggingSystem<\/code> \u0447\u0438\u0442\u0430\u044e\u0442 \u043f\u043e\u0434 <code>pthread_rwlock<\/code>.<\/p>\n<p>\u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e feature flag \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0431\u044b\u043b \u043e\u0434\u0438\u043d, \u0438 \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u043a\u043e\u043c\u0443. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0448\u0435\u0441\u0442\u044c. \u041e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0438\u0437 10 000 \u0437\u0430\u043f\u0438\u0441\u0435\u0439: 98% \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0447\u0438\u0442\u0430\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, 2% \u043c\u0435\u043d\u044f\u044e\u0442. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0445\u0432\u0430\u0442\u0438\u0442 \u043b\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b read-write lock \u043e\u0431\u043e\u0433\u043d\u0430\u043b <code>Mutex<\/code>.<\/p>\n<h3>\u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/h3>\n<p>\u042f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043a\u0430\u0436\u0434\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u043b\u0438 \u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u0434\u043d\u0443 \u0437\u0430\u043f\u0438\u0441\u044c. \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0441 \u0433\u0440\u0443\u043f\u043f\u043e\u0439 \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0422\u0430\u043a \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u043b\u0438\u0442\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435, \u0438 \u043f\u043e\u0442\u043e\u043a\u0438 \u0447\u0430\u0449\u0435 \u0447\u0438\u0442\u0430\u044e\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0415\u0441\u043b\u0438 read-write lock \u0438 \u043c\u043e\u0436\u0435\u0442 \u0433\u0434\u0435-\u0442\u043e \u043e\u0431\u043e\u0433\u043d\u0430\u0442\u044c <code>Mutex<\/code>, \u0442\u043e \u0437\u0434\u0435\u0441\u044c.<\/p>\n<p>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u0432\u0430: \u0447\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u043e \u0432\u0441\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u0430\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0438 p99 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>\u0427\u0442\u0435\u043d\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u043f\u043e\u0434 <code>Mutex<\/code>:<\/p>\n<pre><code class=\"swift\">let records = Mutex&lt;[Record]&gt;(initialRecords)let result = records.withLock { records in    records.readGroup(group, size: groupSize)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043f\u0438\u0441\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a \u0436\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043c\u0435\u0441\u0442\u043e <code>readGroup<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>writeGroup<\/code>.<\/p>\n<p>\u0421 <code>pthread_rwlock<\/code> \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443:<\/p>\n<pre><code class=\"swift\">\/\/ \u0427\u0442\u0435\u043d\u0438\u0435: \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432pthread_rwlock_rdlock(lock)let result = records.readGroup(group, size: groupSize)pthread_rwlock_unlock(lock)\/\/ \u0417\u0430\u043f\u0438\u0441\u044c: \u043f\u043e\u0442\u043e\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u0434\u0438\u043dpthread_rwlock_wrlock(lock)records.writeGroup(group, size: groupSize)pthread_rwlock_unlock(lock)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421 concurrent queue \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 <code>sync<\/code>, \u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 <code>sync<\/code> \u0441 \u0444\u043b\u0430\u0433\u043e\u043c <code>.barrier<\/code>:<\/p>\n<pre><code class=\"swift\">let queue = DispatchQueue(label: \"store\", attributes: .concurrent)let result = queue.sync {    records.readGroup(group, size: groupSize)}queue.sync(flags: .barrier) {    records.writeGroup(group, size: groupSize)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0415\u0441\u0442\u044c \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e, \u0433\u0434\u0435 \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>async(flags: .barrier)<\/code>. \u0412 \u043d\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439, \u043a\u043e\u0433\u0434\u0430 \u0431\u043b\u043e\u043a \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u0430 \u043d\u0435 \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0437\u043e\u0432 \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f.<\/p>\n<p>\u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 13 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0438\u0445 \u043a\u043e\u0434 \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\/tree\/main\/Experiments\/TransactionalStore\" rel=\"noopener nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h3>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h3>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0447\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439: \u0447\u0435\u043c \u0434\u043b\u0438\u043d\u043d\u0435\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/81\/32\/82\/8132828163eb56685fd0edfa9838816c.png\" alt=\"\u0427\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u0440\u0438 \u0448\u0435\u0441\u0442\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0438 \u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. OSAllocatedUnfairLock 9,50 \u043c\u043b\u043d, Mutex 9,37 \u043c\u043b\u043d, pthread_mutex 9,29 \u043c\u043b\u043d, os_unfair_lock 8,60 \u043c\u043b\u043d, NSLock 8,05 \u043c\u043b\u043d, NSRecursiveLock 7,14 \u043c\u043b\u043d, OSAllocatedUnfairLock \u0441 adaptiveSpin 5,80 \u043c\u043b\u043d, pthread_rwlock 3,07 \u043c\u043b\u043d, objc_sync 2,89 \u043c\u043b\u043d, concurrent queue \u0441 sync barrier 1,60 \u043c\u043b\u043d, concurrent queue \u0441 async barrier 1,47 \u043c\u043b\u043d, DispatchSemaphore 1,05 \u043c\u043b\u043d, serial DispatchQueue 0,45 \u043c\u043b\u043d.\" title=\"\u0428\u0435\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432, 98% \u0447\u0442\u0435\u043d\u0438\u0439, \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"2139\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/81\/32\/82\/8132828163eb56685fd0edfa9838816c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/81\/32\/82\/8132828163eb56685fd0edfa9838816c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0428\u0435\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432, 98% \u0447\u0442\u0435\u043d\u0438\u0439, \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0430\u043f\u0438\u0441\u0435\u0439 \u0432\u0441\u0435\u0433\u043e 2%, \u043d\u043e \u0438\u043c \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u044b\u043c. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0438 \u0436\u0434\u0443\u0442, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 p99 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u043d\u043e \u043e\u0442\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b. \u0417\u0434\u0435\u0441\u044c \u0447\u0435\u043c \u043a\u043e\u0440\u043e\u0447\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/d6\/63\/4c\/d6634c439a6ced3a24c4d979abc76acd.png\" alt=\"p99 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0440\u0438 \u0448\u0435\u0441\u0442\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u0438 \u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. OSAllocatedUnfairLock \u0441 adaptiveSpin 6,2 \u043c\u043a\u0441, os_unfair_lock 6,4 \u043c\u043a\u0441, Mutex 8,0 \u043c\u043a\u0441, DispatchSemaphore 8,0 \u043c\u043a\u0441, OSAllocatedUnfairLock 8,3 \u043c\u043a\u0441, objc_sync 10,7 \u043c\u043a\u0441, pthread_mutex 14,9 \u043c\u043a\u0441, NSLock 16,5 \u043c\u043a\u0441, NSRecursiveLock 16,9 \u043c\u043a\u0441, pthread_rwlock 21,8 \u043c\u043a\u0441, serial DispatchQueue 27,3 \u043c\u043a\u0441, concurrent queue \u0441 sync barrier 29,6 \u043c\u043a\u0441, concurrent queue \u0441 async barrier 33,7 \u043c\u043a\u0441.\" title=\"\u0428\u0435\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432, 98% \u0447\u0442\u0435\u043d\u0438\u0439, \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"2139\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/d6\/63\/4c\/d6634c439a6ced3a24c4d979abc76acd.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/d6\/63\/4c\/d6634c439a6ced3a24c4d979abc76acd.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0428\u0435\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432, 98% \u0447\u0442\u0435\u043d\u0438\u0439, \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0442\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0447\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u0434\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439\/\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0414\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439\/\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0414\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0435\u0439, p99 \u0437\u0430\u043f\u0438\u0441\u0438, \u043c\u043a\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">34,67<\/p>\n<\/td>\n<td>\n<p align=\"left\">9,50<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,29<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">34,81<\/p>\n<\/td>\n<td>\n<p align=\"left\">9,37<\/p>\n<\/td>\n<td>\n<p align=\"left\">7,96<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">35,10<\/p>\n<\/td>\n<td>\n<p align=\"left\">9,29<\/p>\n<\/td>\n<td>\n<p align=\"left\">14,94<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>os_unfair_lock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">33,35<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,60<\/p>\n<\/td>\n<td>\n<p align=\"left\">6,44<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">22,48<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,05<\/p>\n<\/td>\n<td>\n<p align=\"left\">16,52<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSRecursiveLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">14,62<\/p>\n<\/td>\n<td>\n<p align=\"left\">7,14<\/p>\n<\/td>\n<td>\n<p align=\"left\">16,85<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code> \u0441 <code>.adaptiveSpin<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">10,40<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,80<\/p>\n<\/td>\n<td>\n<p align=\"left\">6,21<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_rwlock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">3,88<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,07<\/p>\n<\/td>\n<td>\n<p align=\"left\">21,77<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>objc_sync_enter<\/code> \/ <code>objc_sync_exit<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">3,12<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,89<\/p>\n<\/td>\n<td>\n<p align=\"left\">10,67<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Concurrent queue, \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 <code>sync(flags: .barrier)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,69<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,60<\/p>\n<\/td>\n<td>\n<p align=\"left\">29,56<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Concurrent queue, \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 <code>async(flags: .barrier)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2,09<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,47<\/p>\n<\/td>\n<td>\n<p align=\"left\">33,69<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>DispatchSemaphore<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,10<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,05<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,02<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Serial <code>DispatchQueue<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0,46<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,45<\/p>\n<\/td>\n<td>\n<p align=\"left\">27,31<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><code><strong>pthread_rwlock<\/strong><\/code><strong> \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a.<\/strong> \u0421 \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 3,07 \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0432 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c <code>Mutex<\/code> \u0441 \u0435\u0433\u043e 9,37 \u043c\u043b\u043d. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0440\u0430\u0437\u0440\u044b\u0432 \u0434\u0435\u0432\u044f\u0442\u0438\u043a\u0440\u0430\u0442\u043d\u044b\u0439: 3,88 \u043f\u0440\u043e\u0442\u0438\u0432 34,81 \u043c\u043b\u043d. \u0427\u0438\u0442\u0430\u044e\u0442 98% \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u043e\u043a\u0443\u043f\u0438\u043b\u0430\u0441\u044c.<\/p>\n<p>\u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0434\u0435\u043b\u043e \u0432 \u0434\u043b\u0438\u043d\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. <code>pthread_rwlock<\/code> \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0434\u043e\u0440\u043e\u0436\u0435: \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e \u0444\u043b\u0430\u0433 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u043d\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u043e 6,1 \u043d\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 1,86 \u043d\u0441 \u043f\u043e\u0434 <code>Mutex<\/code>. \u0427\u0442\u0435\u043d\u0438\u0435 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435: \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u043e\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u044d\u0442\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b.<\/p>\n<p><strong>Concurrent queue \u0441 barrier \u0435\u0449\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435.<\/strong> \u0421 \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438 \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u044d\u0442\u043e 1,60 \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0441 <code>sync(flags: .barrier)<\/code> \u0438 1,47 \u043c\u043b\u043d \u0441 <code>async(flags: .barrier)<\/code>, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0448\u0435\u0441\u0442\u044c \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0443 <code>Mutex<\/code>. \u0417\u0430\u043c\u0435\u043d\u0430 <code>sync<\/code> \u043d\u0430 <code>async<\/code> \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0433\u043e \u0432\u044b\u0438\u0433\u0440\u044b\u0448\u0430 \u043d\u0435 \u0434\u0430\u0435\u0442: \u0441 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e <code>async<\/code> \u0431\u044b\u0441\u0442\u0440\u0435\u0435 (2,09 \u043f\u0440\u043e\u0442\u0438\u0432 1,69 \u043c\u043b\u043d), \u0441 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c\u044e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435.<\/p>\n<p><code><strong>Mutex<\/strong><\/code><strong>, <\/strong><code><strong>OSAllocatedUnfairLock<\/strong><\/code><strong> \u0438 <\/strong><code><strong>pthread_mutex<\/strong><\/code><strong> \u0438\u0434\u0443\u0442 \u0432\u0440\u043e\u0432\u0435\u043d\u044c.<\/strong> \u0421 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c\u044e \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u0443 \u043d\u0438\u0445 \u043e\u0442 9,29 \u0434\u043e 9,50 \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0441 \u043e\u0434\u043d\u043e\u0439 \u043e\u0442 34,67 \u0434\u043e 35,10 \u043c\u043b\u043d. <code>NSLock<\/code> \u043e\u0442\u0441\u0442\u0430\u0435\u0442: 8,05 \u0438 22,48 \u043c\u043b\u043d.<\/p>\n<p><strong>\u0417\u0430\u043f\u0438\u0441\u044c \u0434\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0436\u0434\u0435\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044f\u0445 \u0438 \u043f\u043e\u0434 <\/strong><code><strong>pthread_rwlock<\/strong><\/code><strong>.<\/strong> \u0423 <code>Mutex<\/code> p99 \u0437\u0430\u043f\u0438\u0441\u0438 \u0440\u0430\u0432\u0435\u043d 8,0 \u043c\u043a\u0441, \u0443 <code>pthread_rwlock<\/code> 21,8 \u043c\u043a\u0441, \u0443 concurrent queue 29,6 \u043c\u043a\u0441 \u0441 <code>sync<\/code> \u0438 33,7 \u043c\u043a\u0441 \u0441 <code>async<\/code>. <code>pthread_mutex<\/code> \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0435 \u0443\u0441\u0442\u0443\u043f\u0430\u0435\u0442 <code>Mutex<\/code>, \u043d\u043e p99 \u0437\u0430\u043f\u0438\u0441\u0438 \u0443 \u043d\u0435\u0433\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0434\u0432\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435: 14,9 \u043c\u043a\u0441.<\/p>\n<p><strong>\u0424\u043b\u0430\u0433 <\/strong><code><strong>.adaptiveSpin<\/strong><\/code><strong> \u0437\u0434\u0435\u0441\u044c \u0441\u0435\u0431\u044f \u043d\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043b.<\/strong> \u0412 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043e\u043d \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b p99 \u0432 \u0434\u0435\u0432\u044f\u0442\u044c \u0440\u0430\u0437. \u0417\u0434\u0435\u0441\u044c p99 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441\u043d\u0438\u0437\u0438\u043b\u0441\u044f \u0441 8,3 \u0434\u043e 6,2 \u043c\u043a\u0441, \u0437\u0430\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0443\u043f\u0430\u043b\u043e \u0441 9,50 \u0434\u043e 5,80 \u043c\u043b\u043d.<\/p>\n<h3>iPhone 11 Pro Max<\/h3>\n<p>\u041d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 <code>Mutex<\/code> \u0442\u043e\u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 <code>pthread_rwlock<\/code> \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439, \u043d\u043e \u0440\u0430\u0437\u0440\u044b\u0432 \u043c\u0435\u043d\u044c\u0448\u0435. \u0421 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c\u044e \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 <code>pthread_rwlock<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 3,45 \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u0440\u043e\u0442\u0438\u0432 4,26 \u043c\u043b\u043d \u0443 <code>Mutex<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0442\u0441\u0442\u0430\u0435\u0442 \u043d\u0430 19%, \u0430 \u043d\u0435 \u0432 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430. Concurrent queue \u0441 barrier \u0437\u0434\u0435\u0441\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 <code>Mutex<\/code> \u0432 \u0442\u0440\u0438 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0440\u0430\u0437\u0430. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e <code>pthread_rwlock<\/code> \u043e\u0442\u0441\u0442\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430: 3,99 \u043f\u0440\u043e\u0442\u0438\u0432 15,59 \u043c\u043b\u043d.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434<\/h3>\n<p>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0434\u043e\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u0439 \u0441\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043d\u0435 \u043f\u043e\u0432\u043e\u0434 \u0431\u0440\u0430\u0442\u044c read-write lock \u0438\u043b\u0438 concurrent queue \u0441 barrier. \u041d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 <code>Mutex<\/code> \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043e\u0431\u043e\u0438\u0445.<\/p>\n<p>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 \u0442\u0435\u0441\u0442\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435. \u0415\u0441\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043b\u0433\u043e\u0435, \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0442\u044c \u0432\u044b\u0438\u0433\u0440\u044b\u0448, \u0438 \u044d\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u043a\u043e\u0434\u0435.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u043c actors \u0441 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438.<\/p>\n<p><a class=\"anchor\" name=\"actors\" id=\"actors\"><\/a><\/p>\n<h2>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 actors \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435?<\/h2>\n<p>\u00ab\u0410\u043a\u0442\u043e\u0440\u044b \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435, \u0432\u043e\u0437\u044c\u043c\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443\u00bb. \u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u044d\u0442\u043e\u0442 \u0441\u043e\u0432\u0435\u0442 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442: \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a actor \u0442\u0430\u043c \u0432 34 \u0440\u0430\u0437\u0430 \u0434\u043e\u0440\u043e\u0436\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 <code>Mutex<\/code>. \u041d\u043e \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f: \u043e\u0434\u043d\u0430 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0430 actor \u0432 \u0446\u0438\u043a\u043b\u0435.<\/p>\n<p>\u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043a actor \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u0421 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430, \u0438\u0437 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u0437\u0430\u0434\u0430\u0447 \u0441\u0440\u0430\u0437\u0443, \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430 <code>await<\/code> \u0438\u043b\u0438 \u043f\u043e \u0441\u043e\u0442\u043d\u0435.<\/p>\n<p>\u0418 \u043a\u043e\u0434\u0430 \u0441 actors \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435: \u043d\u0430 \u043d\u0438\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f\u0442 \u0446\u0435\u043b\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0412 <a href=\"https:\/\/github.com\/kean\/Nuke\/releases\/tag\/13.0.0\" rel=\"noopener nofollow\">Nuke 13<\/a> \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e serial queue \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u043d\u0430 global actor <code>ImagePipelineActor<\/code>. \u0412 <a href=\"https:\/\/github.com\/apollographql\/apollo-ios\/blob\/2.5.0\/Sources\/Apollo\/Internal%20Utilities\/AsyncReadWriteLock.swift\" rel=\"noopener nofollow\">Apollo iOS 2.0<\/a> \u043a\u0435\u0448 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 read-write lock, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043a\u0430\u043a actor.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0443 \u0441 \u0432\u043e\u043f\u0440\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430. \u0423 \u041c\u0430\u0440\u0438\u043d\u0430 \u0422\u043e\u0434\u043e\u0440\u043e\u0432\u0430 actor \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 serial queue, \u0443 \u043c\u0435\u043d\u044f \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u042f \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043b, \u0447\u0442\u043e \u0434\u0435\u043b\u043e \u0432 <code>MainActor<\/code>: \u0432 \u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0435 actor \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u0441 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c.<\/p>\n<h3>\u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0421\u0430\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0442\u0435\u043c \u0436\u0435, \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435. \u041c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u043a\u0430\u043a \u043a \u043d\u0435\u043c\u0443 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f.<\/p>\n<pre><code class=\"swift\">actor CounterActor {    private var value = 0    func increment() {        value &amp;+= 1    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438:<\/p>\n<pre><code class=\"swift\">Task.detached {    for _ in 0..&lt;count {        await counter.increment()    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0418\u043b\u0438 \u0441 <code>MainActor<\/code>. \u0426\u0438\u043a\u043b \u0442\u043e\u0442 \u0436\u0435, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e <code>await<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a:<\/p>\n<pre><code class=\"swift\">@MainActorfunc incrementFromMainActor() async {    for _ in 0..&lt;count {        await counter.increment()    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0414\u043b\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0442\u043e\u0442 \u0436\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043f\u043e\u0434 <code>Mutex<\/code>. \u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0438 \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0431\u0435\u0437 <code>await<\/code>:<\/p>\n<pre><code class=\"swift\">let value = Mutex(0)value.withLock { $0 &amp;+= 1 }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041a\u043e\u0434 \u0432\u0441\u0435\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\/tree\/main\/Experiments\/AsyncCode\" rel=\"noopener nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h3>\u041e\u0442\u043a\u0443\u0434\u0430 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a actor<\/h3>\n<p>\u041d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u0434\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f: \u0447\u0435\u043c \u043a\u043e\u0440\u043e\u0447\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/19\/ed\/6b\/19ed6bcf9bb4ee93ad4e4be9859e1fc5.png\" alt=\"\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u0434\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430. Mutex 1,9 \u043d\u0441, actor \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0438\u0437\u043d\u0443\u0442\u0440\u0438 actor 8,8 \u043d\u0441, actor \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 52,6 \u043d\u0441, actor \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0441 MainActor 4891 \u043d\u0441, MainActor \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 5723 \u043d\u0441.\" title=\"\u041e\u0434\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430, \u043e\u0434\u0438\u043d \u0441\u0447\u0435\u0442\u0447\u0438\u043a. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"1035\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/19\/ed\/6b\/19ed6bcf9bb4ee93ad4e4be9859e1fc5.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/19\/ed\/6b\/19ed6bcf9bb4ee93ad4e4be9859e1fc5.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0434\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430, \u043e\u0434\u0438\u043d \u0441\u0447\u0435\u0442\u0447\u0438\u043a. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u0430\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Mutex<\/code>, \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86 \u043d\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Actor, \u043a\u043e\u0434 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,77 \u043d\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Actor, \u0432\u044b\u0437\u043e\u0432 \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">52,61 \u043d\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Actor, \u0432\u044b\u0437\u043e\u0432 \u0441 <code>MainActor<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">4,89 \u043c\u043a\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>MainActor<\/code>, \u0432\u044b\u0437\u043e\u0432 \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,72 \u043c\u043a\u0441<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u043e\u0441\u044c: \u0441 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432 93 \u0440\u0430\u0437\u0430 \u0434\u043e\u0440\u043e\u0436\u0435.<\/strong> \u0424\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0440\u0430\u0442\u0438\u0442 \u043d\u0430 \u043e\u0434\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a actor 52,6 \u043d\u0441. \u041a\u043e\u0434 \u043d\u0430 <code>MainActor<\/code> \u0442\u0440\u0430\u0442\u0438\u0442 4,89 \u043c\u043a\u0441, \u0442\u043e \u0435\u0441\u0442\u044c 4891 \u043d\u0441. \u0421\u0447\u0435\u0442\u0447\u0438\u043a \u0438 actor \u0442\u0435 \u0436\u0435, \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0441\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0430. \u0412 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0445\u043e\u0436\u0438\u0439: \u043a\u043e\u0433\u0434\u0430 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430 <code>MainActor<\/code>, \u043e\u0434\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 5,72 \u043c\u043a\u0441.<\/p>\n<p>\u042d\u0442\u043e\u0433\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0422\u043e\u0434\u043e\u0440\u043e\u0432\u0430. \u0423 serial queue \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0430 \u043e\u0442 88 \u0434\u043e 199 \u043d\u0441. \u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a actor \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0430 \u0441 <code>MainActor<\/code> \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431: \u0441\u0442\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u0441 <code>MainActor<\/code> \u043a actor \u043f\u043e\u0434\u0440\u044f\u0434 \u0437\u0430\u0439\u043c\u0443\u0442 \u043e\u043a\u043e\u043b\u043e 0,5 \u043c\u0441. \u041a\u0430\u0434\u0440 \u043f\u0440\u0438 120 \u0413\u0446 \u0434\u043b\u0438\u0442\u0441\u044f 8,3 \u043c\u0441.<\/p>\n<h3>\u0414\u0435\u043b\u043e \u0432 actor \u0438\u043b\u0438 \u0432 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435?<\/h3>\n<p>\u041d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0442\u0435\u0441\u0442, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c actor \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435. \u0421 <code>MainActor<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0430\u044f <code>async<\/code>-\u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0438 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e, \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0435\u0435 \u0442\u0435\u043b\u043e \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u044b\u0437\u043e\u0432:<\/p>\n<pre><code class=\"swift\">nonisolated func work() async { \u2026 }@concurrentfunc concurrentWork() async { \u2026 }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u0435\u0440\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u0441 \u0434\u0432\u0443\u043c\u044f \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0442\u0440\u0438:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0412\u0430\u0440\u0438\u0430\u043d\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0413\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0430\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u0432\u044b\u0437\u043e\u0432<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>nonisolated async<\/code>, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Xcode 27: Approachable Concurrency \u0438 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044f <code>MainActor<\/code> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,82 \u043d\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>nonisolated async<\/code>, Swift 6 \u0431\u0435\u0437 Approachable Concurrency<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u043d\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,58 \u043c\u043a\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>@concurrent<\/code>, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432 Xcode 27<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u043d\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">5,60 \u043c\u043a\u0441<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><em>iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/em><\/p>\n<p><strong>\u0414\u043e\u0440\u043e\u0433 \u043d\u0435 actor, \u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432.<\/strong> \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0441 <code>@concurrent<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u0432\u043d\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0437\u0430\u043d\u0438\u043c\u0430\u043b 5,60 \u043c\u043a\u0441. \u042d\u0442\u043e \u0434\u0430\u0436\u0435 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a actor \u0441 <code>MainActor<\/code> (4,89 \u043c\u043a\u0441), \u0445\u043e\u0442\u044f \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e actor \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u043e\u043a\u043e\u043b\u043e 5 \u043c\u043a\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0430\u043c\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043d\u0430 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<\/p>\n<p><strong>\u0410 <\/strong><code><strong>nonisolated async<\/strong><\/code><strong> \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435.<\/strong> <code>nonisolated async<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u0430\u044f \u0441 <code>MainActor<\/code>, \u0432\u043e \u0432\u0441\u0435\u0445 \u0432\u044b\u0437\u043e\u0432\u0430\u0445 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u0438 \u0432\u044b\u0437\u043e\u0432 \u0437\u0430\u043d\u044f\u043b 8,8 \u043d\u0441. \u0412 \u0440\u0435\u0436\u0438\u043c\u0435 Swift 6 \u0431\u0435\u0437 Approachable Concurrency \u0442\u0430 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0430\u0441\u044c \u0432\u043d\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430: 5,58 \u043c\u043a\u0441 \u043d\u0430 \u0432\u044b\u0437\u043e\u0432. \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 <a href=\"https:\/\/github.com\/swiftlang\/swift-evolution\/blob\/main\/proposals\/0461-async-function-isolation.md\" rel=\"noopener nofollow\">SE-0461<\/a>.<\/p>\n<p>\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0442\u0430\u043a \u043b\u0443\u0447\u0448\u0435: \u0442\u044f\u0436\u0435\u043b\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0432 \u044d\u0442\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0442\u043e\u0436\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435.<\/p>\n<p>\u0421 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u041d\u043e \u0438 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a actor \u0441\u0442\u043e\u0438\u0442 52,6 \u043d\u0441, \u0432 28 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u0430\u0445\u0432\u0430\u0442 <code>Mutex<\/code>. \u0418 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442. \u0410 \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0447 \u043c\u043d\u043e\u0433\u043e?<\/p>\n<h3>50 \u0437\u0430\u0434\u0430\u0447 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435<\/h3>\n<p>\u041a \u043e\u0434\u043d\u043e\u043c\u0443 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0443 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f 50 \u0437\u0430\u0434\u0430\u0447 <code>Task<\/code>, \u043a\u0430\u0436\u0434\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u0442 1000 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0417\u0434\u0435\u0441\u044c \u044f \u0438\u0437\u043c\u0435\u0440\u044f\u044e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0438 \u0441\u043c\u043e\u0442\u0440\u044e \u043d\u0430 p99.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/b5\/27\/3a\/b5273a3151efed9be0f93c3964c7f8fc.png\" alt=\"p99 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u0438 50 \u0437\u0430\u0434\u0430\u0447\u0430\u0445. OSAllocatedUnfairLock 6,0 \u043c\u043a\u0441, Mutex 6,3 \u043c\u043a\u0441, NSLock 11,4 \u043c\u043a\u0441, actor 24,9 \u043c\u043a\u0441.\" title=\"50 \u0437\u0430\u0434\u0430\u0447 `Task`, \u043f\u043e 1000 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"897\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/b5\/27\/3a\/b5273a3151efed9be0f93c3964c7f8fc.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/b5\/27\/3a\/b5273a3151efed9be0f93c3964c7f8fc.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>50 \u0437\u0430\u0434\u0430\u0447 <code>Task<\/code>, \u043f\u043e 1000 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u041f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0440\u0430\u0437\u0440\u044b\u0432 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f.<\/strong> \u0423 <code>Mutex<\/code> \u0438 <code>OSAllocatedUnfairLock<\/code> p99 \u043e\u043a\u043e\u043b\u043e 6 \u043c\u043a\u0441, \u0443 <code>NSLock<\/code> 11,4 \u043c\u043a\u0441, \u0443 actor 24,9 \u043c\u043a\u0441. \u041e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432: \u0443 actor \u043c\u0435\u0434\u0438\u0430\u043d\u0430 19 \u043c\u043a\u0441, \u0443 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u043c\u0435\u043d\u044c\u0448\u0435 0,1 \u043c\u043a\u0441. \u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c <code>await<\/code> \u0437\u0430\u0434\u0430\u0447\u0430 \u0443\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043c\u0435\u0441\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u0438 \u0436\u0434\u0435\u0442 \u0441\u0432\u043e\u0435\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u041f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043e\u043d\u0430 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0443 \u0441\u0440\u0430\u0437\u0443.<\/p>\n<p>\u0412\u043e \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a actor \u0434\u043e\u0440\u043e\u0436\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438. \u041d\u043e \u043f\u043b\u0430\u0442\u0438\u043c \u043c\u044b \u0437\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435, \u0430 \u043d\u0435 \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e. \u041e\u0442\u0441\u044e\u0434\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430: \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0436\u0435, \u0430 \u0437\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435?<\/p>\n<h3>\u0421\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0437\u0430 \u043e\u0434\u0438\u043d await<\/h3>\n<p>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 128 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u0432. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 <code>await<\/code>, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043e\u0434\u0438\u043d \u0432\u044b\u0437\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439:<\/p>\n<pre><code class=\"swift\">actor CounterGroupActor {    private var counters = [Int](repeating: 0, count: 128)    func incrementOne(at index: Int) {        counters[index % 128] &amp;+= 1    }    func incrementGroup(startingAt start: Int) {        for index in start..&lt;(start + 100) {            counters[index % 128] &amp;+= 1        }    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0421\u043d\u0430\u0440\u0443\u0436\u0438 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a. \u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435 \u0441\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432:<\/p>\n<pre><code class=\"swift\">for index in 0..&lt;100 {    await counters.incrementOne(at: index)}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043e\u0434\u0438\u043d:<\/p>\n<pre><code class=\"swift\">await counters.incrementGroup(startingAt: 0)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0430 \u0436\u0435: \u0441\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0439 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435, \u0430 \u043d\u0435 \u043e\u0434\u043d\u043e \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 100.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/78\/1a\/9a\/781a9a8ebba114daaaaae52311d3332d.png\" alt=\"\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u0434\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435. Actor \u0441 await \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 58,08 \u043d\u0441, actor \u0441\u043e \u0441\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430 \u043e\u0434\u0438\u043d await 1,23 \u043d\u0441, Mutex \u0441\u043e \u0441\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u0434 \u043e\u0434\u043d\u043e\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 0,69 \u043d\u0441.\" title=\"\u041e\u0434\u043d\u0430 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, 128 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u0432. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"759\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/78\/1a\/9a\/781a9a8ebba114daaaaae52311d3332d.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/78\/1a\/9a\/781a9a8ebba114daaaaae52311d3332d.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0434\u043d\u0430 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, 128 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u0432. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u0413\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0430 \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0430 actor \u0432 47 \u0440\u0430\u0437.<\/strong> \u0421 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c <code>await<\/code> \u043e\u0434\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 58,1 \u043d\u0441, \u0432 \u0433\u0440\u0443\u043f\u043f\u0435 \u0438\u0437 \u0441\u0442\u0430 1,23 \u043d\u0441. <code>Mutex<\/code> \u0441 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435: 0,69 \u043d\u0441. \u041d\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043b\u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u0430 \u0431\u0435\u0437 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438 \u0431\u044b\u043b\u0430 \u043e\u043a\u043e\u043b\u043e 50 \u043d\u0441.<\/p>\n<p>\u0413\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430: \u043f\u043e\u043a\u0430 actor \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043d\u0435\u043c\u0443 \u0436\u0434\u0443\u0442.<\/p>\n<h3>iPhone 11 Pro Max<\/h3>\n<p>\u041d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0442\u0430 \u0436\u0435. \u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a actor \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 64,6 \u043d\u0441, \u0441 <code>MainActor<\/code> 6,0 \u043c\u043a\u0441. \u0413\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0430 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 actor \u0432 49 \u0440\u0430\u0437: \u0441 80,2 \u0434\u043e 1,63 \u043d\u0441 \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435. \u041f\u0440\u0438 50 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 p99 \u0443 actor 35,4 \u043c\u043a\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 9,4 \u043c\u043a\u0441 \u0443 <code>Mutex<\/code>. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0434\u043d\u043e: \u0443 <code>NSLock<\/code> p99 \u0437\u0434\u0435\u0441\u044c 33,5 \u043c\u043a\u0441, \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0443 actor.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434<\/h3>\n<p>Actor \u043d\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043d\u0435\u043c\u0443, \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d\u043e \u0438\u0434\u0435\u0442 \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430 \u043e\u0434\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0414\u043e\u0440\u043e\u0436\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0438 \u0444\u043e\u043d\u043e\u0432\u044b\u043c: \u043e\u043a\u043e\u043b\u043e 5 \u043c\u043a\u0441 \u0442\u0443\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0441 actor \u0438\u043b\u0438 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e. \u0415\u0441\u043b\u0438 \u043e\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0446\u0438\u043a\u043b\u0435, \u0438\u0441\u043a\u0430\u0442\u044c \u0441\u0442\u043e\u0438\u0442 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0435\u0433\u043e.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0443\u0436\u0435 \u0436\u0438\u0432\u0435\u0442 \u0432 actor, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043b\u0443\u0447\u0448\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u043c\u0443 \u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c. \u0412 \u0442\u0435\u0441\u0442\u0435 \u044d\u0442\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u043e actor \u0432 47 \u0440\u0430\u0437.<\/p>\n<p>\u0414\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <code>Mutex<\/code> \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u0434\u0435\u0448\u0435\u0432\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c, \u0438 \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0442\u043e\u0436\u0435. \u041e\u0434\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442: \u0432 \u0442\u043e\u043c \u0436\u0435 Nuke 13 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 actor, \u0430 \u043c\u0435\u043b\u043a\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043e \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439.<\/p>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u0435\u0448 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043a\u0440\u043e\u043b\u043b\u0430.<\/p>\n<p><a class=\"anchor\" name=\"image-cache\" id=\"image-cache\"><\/a><\/p>\n<h2>\u041a\u0435\u0448 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0435<\/h2>\n<p>\u00ab\u041d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a\u00bb. \u042d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0437\u043d\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 iOS-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u0418 \u0432\u0441\u0435 \u0436\u0435 \u043a\u0435\u0448 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0447\u0438\u0442\u0430\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430: <code>cellForItemAt<\/code> \u0434\u043e\u0441\u0442\u0430\u0435\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u043a\u0430 \u0444\u043e\u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043a\u043b\u0430\u0434\u0443\u0442 \u0442\u0443\u0434\u0430 \u043d\u043e\u0432\u044b\u0435. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043a\u0440\u043e\u043b\u043b\u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0441\u0430\u043c \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u0436\u0434\u0435\u0442, \u043f\u043e\u043a\u0430 \u0435\u0435 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442 \u0444\u043e\u043d\u043e\u0432\u044b\u0439.<\/p>\n<p>\u0422\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/kean\/Nuke\/blob\/13.2.3\/Sources\/NukeUI\/LazyImageView.swift#L299\" rel=\"noopener nofollow\">Nuke<\/a>: <code>LazyImageView<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u0435\u0448 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0430 \u0441\u0430\u043c \u043a\u0435\u0448 \u0437\u0430\u0449\u0438\u0449\u0435\u043d <code>os_unfair_lock<\/code>. \u0412 <a href=\"https:\/\/github.com\/SDWebImage\/SDWebImage\/blob\/5.21.7\/SDWebImage\/Core\/SDMemoryCache.m#L104\" rel=\"noopener nofollow\">SDWebImage<\/a> \u0447\u0430\u0441\u0442\u044c \u043a\u0435\u0448\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u043e\u0436\u0435 \u043b\u0435\u0436\u0438\u0442 \u043f\u043e\u0434 <code>os_unfair_lock<\/code>.<\/p>\n<p>\u042f \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u043d\u044f\u0442\u044c \u0434\u0432\u0435 \u0432\u0435\u0449\u0438. \u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438? \u0418 \u0432\u0438\u0434\u043d\u043e \u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0435?<\/p>\n<h3>\u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0412 \u0442\u0435\u0441\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 <code>UICollectionView<\/code>: \u0441\u0435\u0442\u043a\u0430 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e <code>CADisplayLink<\/code> \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u0442 \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e. \u041a\u043e\u0433\u0434\u0430 UIKit \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u044f\u0447\u0435\u0439\u043a\u0443, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043d\u0435\u0435 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0438\u0437 \u043a\u0435\u0448\u0430:<\/p>\n<pre><code class=\"swift\">func collectionView(_ collectionView: UICollectionView,                    cellForItemAt indexPath: IndexPath) -&gt; UICollectionViewCell {    let cell = collectionView.dequeueReusableCell(        withReuseIdentifier: \"image\", for: indexPath) as! ImageCell    cell.imageView.image = cache.image(for: key(at: indexPath))?.image    return cell}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041a\u0435\u0448 \u044d\u0442\u043e \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 \u0441 URL \u043b\u0435\u0436\u0438\u0442 \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u0412\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u0434 <code>Mutex<\/code>:<\/p>\n<pre><code class=\"swift\">final class MutexImageCache {    private let images = Mutex&lt;[String: CachedImage]&gt;([:])    func image(for key: String) -&gt; CachedImage? {        images.withLock { $0[key] }    }    func store(_ entry: CachedImage, for key: String) {        images.withLock { $0[key] = entry }    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043a\u0430 \u0438\u0434\u0435\u0442 \u0441\u043a\u0440\u043e\u043b\u043b, \u0447\u0435\u0442\u044b\u0440\u0435 \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430 \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u0435\u0448\u0435. \u041f\u0435\u0440\u0435\u0434 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u043f\u043e\u0442\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0437\u0430\u0441\u044b\u043f\u0430\u0435\u0442 \u043d\u0430 700 \u043c\u0441. \u041a\u0435\u0448 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u0436\u0434\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u0432\u0430. \u0412\u0440\u0435\u043c\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u044d\u0442\u043e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u0430 <code>cache.image(for:)<\/code>, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u043d\u0435\u0433\u043e \u043d\u0435 \u0432\u0445\u043e\u0434\u0438\u0442. \u0410 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0439\u043c\u0430\u0442\u044c hitches, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0433\u0434\u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043d\u0435 \u0443\u0441\u043f\u0435\u0432\u0430\u0435\u0442 \u043a \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c\u0443 \u043a\u0430\u0434\u0440\u0443, \u044f \u0438\u0437\u043c\u0435\u0440\u044f\u043b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 <code>CADisplayLink<\/code>. \u041d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 120 \u0413\u0446 \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u0436\u0434\u044b\u0435 8,3 \u043c\u0441. \u0415\u0441\u043b\u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043d\u044f\u0442 \u0434\u043e\u043b\u044c\u0448\u0435, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u043e\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u0435\u0442, \u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0440\u0430\u0441\u0442\u0435\u0442.<\/p>\n<p>\u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 14 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0438\u0445 \u043a\u043e\u0434 \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\/tree\/main\/Experiments\/MainThreadCache\" rel=\"noopener nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h3>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435<\/h3>\n<p>\u041d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043c\u0435\u0434\u0438\u0430\u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0447\u0442\u0435\u043d\u0438\u044f: \u0447\u0435\u043c \u043a\u043e\u0440\u043e\u0447\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/39\/30\/e8\/3930e8d2edafa2750e27e5432b21d12c.png\" alt=\"\u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u0437 \u043a\u0435\u0448\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043a\u0440\u043e\u043b\u043b\u0430. Mutex 2,02 \u043c\u043a\u0441, OSAllocatedUnfairLock 2,06 \u043c\u043a\u0441, MainActor \u0441 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e 2,10 \u043c\u043a\u0441, os_unfair_lock 2,15 \u043c\u043a\u0441, pthread_rwlock 2,21 \u043c\u043a\u0441, pthread_mutex 2,22 \u043c\u043a\u0441, DispatchSemaphore 2,29 \u043c\u043a\u0441, NSLock 2,42 \u043c\u043a\u0441, objc_sync 2,50 \u043c\u043a\u0441, OSAllocatedUnfairLock \u0441 adaptiveSpin 2,65 \u043c\u043a\u0441, NSRecursiveLock 2,69 \u043c\u043a\u0441, serial DispatchQueue 7,94 \u043c\u043a\u0441, concurrent queue \u0441 sync barrier 8,21 \u043c\u043a\u0441, concurrent queue \u0441 async barrier 8,27 \u043c\u043a\u0441.\" title=\"\u0427\u0435\u0442\u044b\u0440\u0435 \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430, \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u0448\u0435\u0442 \u0432 \u043a\u0435\u0448 \u0440\u0430\u0437 \u0432 700 \u043c\u0441. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"2277\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/39\/30\/e8\/3930e8d2edafa2750e27e5432b21d12c.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/39\/30\/e8\/3930e8d2edafa2750e27e5432b21d12c.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0427\u0435\u0442\u044b\u0440\u0435 \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430, \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u0448\u0435\u0442 \u0432 \u043a\u0435\u0448 \u0440\u0430\u0437 \u0432 700 \u043c\u0441. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 p99:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">p50 \u0447\u0442\u0435\u043d\u0438\u044f, \u043c\u043a\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">p99 \u0447\u0442\u0435\u043d\u0438\u044f, \u043c\u043a\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2,02<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,16<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2,06<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,56<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>MainActor<\/code>, \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e<\/p>\n<\/td>\n<td>\n<p align=\"left\">2,10<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,29<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>os_unfair_lock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2,15<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,62<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_rwlock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2,21<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,48<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2,22<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,41<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>DispatchSemaphore<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2,29<\/p>\n<\/td>\n<td>\n<p align=\"left\">9,21<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2,42<\/p>\n<\/td>\n<td>\n<p align=\"left\">10,02<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>objc_sync_enter<\/code> \/ <code>objc_sync_exit<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2,50<\/p>\n<\/td>\n<td>\n<p align=\"left\">9,00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code> \u0441 <code>.adaptiveSpin<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2,65<\/p>\n<\/td>\n<td>\n<p align=\"left\">9,96<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSRecursiveLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">2,69<\/p>\n<\/td>\n<td>\n<p align=\"left\">9,93<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Serial <code>DispatchQueue<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">7,94<\/p>\n<\/td>\n<td>\n<p align=\"left\">19,25<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Concurrent queue, \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 <code>sync(flags: .barrier)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">8,21<\/p>\n<\/td>\n<td>\n<p align=\"left\">20,21<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Concurrent queue, \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 <code>async(flags: .barrier)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">8,27<\/p>\n<\/td>\n<td>\n<p align=\"left\">19,89<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0427\u0435\u0440\u0435\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0447\u0442\u0435\u043d\u0438\u0435 \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430 \u0434\u043e\u043b\u044c\u0448\u0435.<\/strong> \u041f\u043e\u0434 <code>Mutex<\/code> \u043e\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 2,0 \u043c\u043a\u0441, \u0447\u0435\u0440\u0435\u0437 serial queue 7,9 \u043c\u043a\u0441, \u0447\u0435\u0440\u0435\u0437 concurrent queue \u043e\u043a\u043e\u043b\u043e 8,2 \u043c\u043a\u0441. \u0423 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u043e\u0442 2,1 \u0434\u043e 2,7 \u043c\u043a\u0441.<\/p>\n<p><code><strong>pthread_rwlock<\/strong><\/code><strong> \u0438 <\/strong><code><strong>.adaptiveSpin<\/strong><\/code><strong> \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u043b\u0438.<\/strong> \u0427\u0442\u0435\u043d\u0438\u0435 \u0441 \u043d\u0438\u043c\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 2,21 \u0438 2,65 \u043c\u043a\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 2,02 \u043c\u043a\u0441 \u0443 <code>Mutex<\/code>. \u0424\u043e\u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043f\u0438\u0448\u0443\u0442 \u0440\u0435\u0434\u043a\u043e, \u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0436\u0434\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0447\u0442\u0435\u043d\u0438\u044e \u043e\u043a\u043e\u043b\u043e 6 \u043c\u043a\u0441. \u0417\u0430\u043c\u0435\u0442\u043d\u043e \u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0435?<\/p>\n<h3>\u0412\u0438\u0434\u043d\u043e \u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0435?<\/h3>\n<p>\u041d\u0435\u0442, \u043d\u0435 \u0432\u0438\u0434\u043d\u043e. \u0423 \u0432\u0441\u0435\u0445 14 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 <code>CADisplayLink<\/code> \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435, \u0438 \u043d\u0438 \u043e\u0434\u0438\u043d \u043d\u0435 \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u043b\u0441\u044f \u0434\u0430\u0436\u0435 \u0434\u043e \u043f\u043e\u043b\u0443\u0442\u043e\u0440\u0430 \u043a\u0430\u0434\u0440\u043e\u0432.<\/p>\n<p>\u042d\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e. Hitches \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043d\u044f\u0442 \u0442\u044f\u0436\u0435\u043b\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439: \u0441\u043b\u043e\u0436\u043d\u044b\u0439 UI, \u0432\u0435\u0440\u0441\u0442\u043a\u0430, \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a. \u0427\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u043a\u0435\u0448\u0430 \u043a \u0442\u0430\u043a\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f. \u041e\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0430 \u043a\u0430\u0434\u0440 \u043f\u0440\u0438 120 \u0413\u0446 \u0434\u043b\u0438\u0442\u0441\u044f 8,3 \u043c\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442 \u0432\u044b\u0431\u043e\u0440\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u0440\u043e\u043b\u043b\u0430 \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442.<\/p>\n<h3>\u0410 \u0435\u0441\u043b\u0438 \u043a\u0435\u0448 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a MainActor<\/h3>\n<p>\u0427\u0438\u0442\u0430\u0435\u0442 \u043a\u0435\u0448 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a. \u0417\u043d\u0430\u0447\u0438\u0442, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430: \u043a\u0435\u0448 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a <code>MainActor<\/code>.<\/p>\n<pre><code class=\"swift\">@MainActorfinal class MainActorImageCache {    private var images: [String: CachedImage] = [:]    func image(for key: String) -&gt; CachedImage? {        images[key]    }    func store(_ entry: CachedImage, for key: String) {        images[key] = entry    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a <code>MainActor<\/code> \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u043e 5,7 \u043c\u043a\u0441. \u041d\u043e \u0437\u0434\u0435\u0441\u044c \u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u0430\u043c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a, \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0435\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0427\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 2,10 \u043c\u043a\u0441, \u043f\u043e\u0447\u0442\u0438 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 <code>Mutex<\/code>. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0444\u043e\u043d\u043e\u0432\u044b\u043c \u0437\u0430\u0434\u0430\u0447\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0438\u0448\u0443\u0442 \u0447\u0435\u0440\u0435\u0437 <code>await cache.store(\u2026)<\/code>, \u0430 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432\u0441\u0435\u0433\u043e \u043e\u043a\u043e\u043b\u043e \u0448\u0435\u0441\u0442\u0438 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.<\/p>\n<p>\u0418\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u043d\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u043e. \u0427\u0442\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0435 \u0436\u0435 2 \u043c\u043a\u0441, \u0447\u0442\u043e \u0438 \u043f\u043e\u0434 <code>Mutex<\/code>. \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0430 \u0441\u0430\u043c\u0443 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0438\u0437 \u044d\u0442\u0438\u0445 2 \u043c\u043a\u0441 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u0445\u043e\u0434\u0438\u0442.<\/p>\n<h3>iPhone 11 Pro Max<\/h3>\n<p>\u041d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u044d\u043a\u0440\u0430\u043d \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 60 \u0413\u0446. \u0427\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 <code>Mutex<\/code> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 3,1 \u043c\u043a\u0441, \u0447\u0435\u0440\u0435\u0437 serial queue 13,7 \u043c\u043a\u0441, \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0440\u0430\u0437\u0430 \u0434\u043e\u043b\u044c\u0448\u0435. \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0434\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u0443\u0442\u043e\u0440\u0430 \u043a\u0430\u0434\u0440\u043e\u0432 \u0442\u043e\u0436\u0435 \u043d\u0435\u0442.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434<\/h3>\n<p>\u041a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u00ab\u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a\u00bb. \u041f\u043e\u0434 <code>Mutex<\/code> \u043e\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 2 \u043c\u043a\u0441, \u0430 \u043a\u0430\u0434\u0440 \u0434\u043b\u0438\u0442\u0441\u044f 8,3 \u043c\u0441.<\/p>\n<p>\u041e\u0447\u0435\u0440\u0435\u0434\u044c \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u043d\u043e \u0438 \u044d\u0442\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043f\u0440\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e. \u041c\u0435\u043d\u044f\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 <code>Mutex<\/code> \u0440\u0430\u0434\u0438 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0437\u0430\u0447\u0435\u043c: hitches \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0437-\u0437\u0430 \u0442\u044f\u0436\u0435\u043b\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u0430 \u043d\u0435 \u0438\u0437-\u0437\u0430 \u0432\u044b\u0431\u043e\u0440\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0435\u0448 \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a <code>MainActor<\/code>, \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0440\u0430\u0434\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u043e\u0436\u0435 \u043d\u0435\u0437\u0430\u0447\u0435\u043c.<\/p>\n<p>\u0412\u0441\u0435 \u044d\u0442\u043e \u0432\u0435\u0440\u043d\u043e, \u043f\u043e\u043a\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0434\u0435\u0440\u0436\u0430\u0442 \u043d\u0435\u0434\u043e\u043b\u0433\u043e. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0435\u0435 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0441 \u043d\u0438\u0437\u043a\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c, \u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0435\u0442.<\/p>\n<p><a class=\"anchor\" name=\"priority-inversion\" id=\"priority-inversion\"><\/a><\/p>\n<h2>\u0418\u043d\u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432: \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0435\u0442 \u0444\u043e\u043d\u043e\u0432\u044b\u0439<\/h2>\n<p>\u0422\u044f\u0436\u0435\u043b\u0443\u044e \u0444\u043e\u043d\u043e\u0432\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0441 \u043d\u0438\u0437\u043a\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043d\u0435 \u043c\u0435\u0448\u0430\u043b\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443. \u041d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u043b \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0443\u0436\u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u043c\u0443. \u0422\u0435\u043f\u0435\u0440\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0435\u0442, \u043f\u043e\u043a\u0430 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442. \u0410 \u0444\u043e\u043d\u043e\u0432\u043e\u043c\u0443 \u043d\u0435 \u0434\u0430\u044e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c \u0432\u044b\u0448\u0435. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442: \u0441\u0430\u043c\u044b\u0439 \u0432\u0430\u0436\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0435\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0435\u0432\u0430\u0436\u043d\u043e\u0433\u043e. \u042d\u0442\u043e \u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432.<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0448\u0430\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443: \u043f\u043e\u043a\u0430 \u0432\u0430\u0436\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0435\u0442, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0435\u0433\u043e \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443. \u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0436\u0434\u0435\u0442 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0438 \u043a\u0430\u043a\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u044e\u0442 \u044d\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435.<\/p>\n<h3>\u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/h3>\n<p>\u041e\u0434\u043d\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<ol>\n<li>\n<p>\u0424\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c <code>background<\/code> \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0434 \u043d\u0435\u0439. \u0411\u0435\u0437 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u044d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 5 \u043c\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0428\u0435\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c <code>userInitiated<\/code> \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u0432\u0441\u0435 \u044f\u0434\u0440\u0430 \u043d\u0430 300 \u043c\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0435\u0440\u0435\u0437 1 \u043c\u0441 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e\u0434 \u0442\u043e\u0439 \u0436\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439.<\/p>\n<\/li>\n<\/ol>\n<p>\u042f \u0438\u0437\u043c\u0435\u0440\u044f\u044e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0430\u043b. \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441 <code>Mutex<\/code>:<\/p>\n<pre><code class=\"swift\">let state = Mutex(0)\/\/ \u0424\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a, \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 backgroundstate.withLock { value in    doWork()    \/\/ \u043e\u043a\u043e\u043b\u043e 5 \u043c\u0441 \u0431\u0435\u0437 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438    value = trial}\/\/ \u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a, \u0447\u0435\u0440\u0435\u0437 1 \u043c\u0441let value = state.withLock { $0 }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u043e 100 \u0442\u0430\u043a\u0438\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u043d\u0430 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c. \u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 14 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0438\u0445 \u043a\u043e\u0434 \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\/tree\/main\/Experiments\/PriorityInversion\" rel=\"noopener nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h3>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0436\u0434\u0435\u0442 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a<\/h3>\n<p>\u041d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043c\u0435\u0434\u0438\u0430\u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f: \u0447\u0435\u043c \u043a\u043e\u0440\u043e\u0447\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/d3\/8b\/d4\/d38bd4bae48376d02c894b520b57d708.png\" alt=\"\u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430. objc_sync 12,95 \u043c\u0441, Mutex 12,95 \u043c\u0441, NSLock 12,96 \u043c\u0441, pthread_mutex 12,96 \u043c\u0441, OSAllocatedUnfairLock \u0441 adaptiveSpin 12,97 \u043c\u0441, OSAllocatedUnfairLock 12,97 \u043c\u0441, concurrent queue \u0441 async barrier 13,00 \u043c\u0441, NSRecursiveLock 13,09 \u043c\u0441, os_unfair_lock 13,65 \u043c\u0441, serial DispatchQueue 13,86 \u043c\u0441, concurrent queue \u0441 sync barrier 61,94 \u043c\u0441, DispatchSemaphore 65,63 \u043c\u0441, pthread_rwlock 68,55 \u043c\u0441.\" title=\"\u0424\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c `background`, \u0448\u0435\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c `userInitiated`. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e \u0442\u0440\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"2139\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/d3\/8b\/d4\/d38bd4bae48376d02c894b520b57d708.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/d3\/8b\/d4\/d38bd4bae48376d02c894b520b57d708.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0424\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c <code>background<\/code>, \u0448\u0435\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c <code>userInitiated<\/code>. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e \u0442\u0440\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f, \u043c\u0441<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>objc_sync_enter<\/code> \/ <code>objc_sync_exit<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">12,95<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">12,95<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">12,96<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">12,96<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code> \u0441 <code>.adaptiveSpin<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">12,97<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">12,97<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Concurrent queue, \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 <code>async(flags: .barrier)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">13,00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSRecursiveLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">13,09<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>os_unfair_lock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">13,65<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Serial <code>DispatchQueue<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">13,86<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Concurrent queue, \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 <code>sync(flags: .barrier)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">61,94<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>DispatchSemaphore<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">65,63<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_rwlock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">68,55<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0423 \u0434\u0435\u0441\u044f\u0442\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0438\u0437 \u0442\u0440\u0438\u043d\u0430\u0434\u0446\u0430\u0442\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435, \u043e\u043a\u043e\u043b\u043e 13 \u043c\u0441.<\/strong> \u0423 <code>Mutex<\/code> 12,95 \u043c\u0441, \u0443 <code>NSLock<\/code> 12,96 \u043c\u0441, \u0443 serial queue 13,86 \u043c\u0441.<\/p>\n<p><strong>\u0422\u0440\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0436\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u043f\u044f\u0442\u044c \u0440\u0430\u0437 \u0434\u043e\u043b\u044c\u0448\u0435.<\/strong> \u0421 concurrent queue \u0438 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0447\u0435\u0440\u0435\u0437 <code>sync(flags: .barrier)<\/code> \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0435\u0442 61,9 \u043c\u0441, \u0441 <code>DispatchSemaphore<\/code> 65,6 \u043c\u0441, \u0441 <code>pthread_rwlock<\/code> 68,6 \u043c\u0441.<\/p>\n<p>\u0421 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c <code>utility<\/code> \u0443 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u043e\u0442 \u0436\u0435: \u043e\u043a\u043e\u043b\u043e 13 \u043c\u0441 \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0438 \u043e\u0442 55 \u0434\u043e 60 \u043c\u0441 \u0443 \u0442\u043e\u0439 \u0436\u0435 \u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0442\u0440\u0438<\/h3>\n<p>\u041e\u0442\u0432\u0435\u0442 \u0435\u0441\u0442\u044c \u0443 Apple. \u0412 \u0434\u043e\u043a\u043b\u0430\u0434\u0435 <a href=\"https:\/\/developer.apple.com\/videos\/play\/wwdc2017\/706\/\" rel=\"noopener nofollow\">Modernizing Grand Central Dispatch Usage<\/a> \u0441 WWDC 2017 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0442\u0440\u0438 \u0433\u0440\u0443\u043f\u043f\u044b:<\/p>\n<ul>\n<li>\n<p><strong>\u0421 \u043e\u0434\u043d\u0438\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u043c<\/strong>, \u043a\u0430\u043a serial queue \u0438 <code>os_unfair_lock<\/code>. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443, \u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0442\u043e\u0433\u043e, \u043a\u0442\u043e \u0436\u0434\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u0435\u0437 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430<\/strong>, \u043a\u0430\u043a <code>DispatchSemaphore<\/code>. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0432\u044b\u0437\u043e\u0432\u0435\u0442 <code>signal<\/code>, \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u043d\u0435\u043a\u043e\u043c\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430\u043c\u0438<\/strong>, \u043a\u0430\u043a concurrent queue \u0438 read-write lock. \u041e\u0434\u043d\u043e\u0433\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430 \u043d\u0435\u0442, \u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f \u0442\u0440\u043e\u0439\u043a\u0430 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0433\u0440\u0443\u043f\u043f\u043e\u0439. \u0421 \u044d\u0442\u0438\u043c \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f: \u0432 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443, \u0430 \u0432 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0439 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0438 \u0436\u0434\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430.<\/p>\n<p>\u041e\u0434\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443. \u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 <code>async(flags: .barrier)<\/code> \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435, \u0445\u043e\u0442\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0442\u0430\u043c \u0442\u0430 \u0436\u0435 concurrent queue.<\/p>\n<h3>13 \u043c\u0441 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043c\u043d\u043e\u0433\u043e<\/h3>\n<p>\u0414\u0430\u0436\u0435 \u0432 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0430\u043b 13 \u043c\u0441, \u0445\u043e\u0442\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0432\u0441\u0435\u0433\u043e \u043d\u0430 5 \u043c\u0441, \u043d\u043e \u043f\u043e\u0434 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043e\u043d\u0430 \u0438\u0434\u0435\u0442 \u0434\u043e\u043b\u044c\u0448\u0435. \u041f\u0440\u0438 120 \u0413\u0446 13 \u043c\u0441 \u044d\u0442\u043e \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u043a\u0430\u0434\u0440\u0430, \u0442\u043e \u0435\u0441\u0442\u044c hitch. \u0418 \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0435\u0433\u043e \u043d\u0435 \u0443\u0431\u0440\u0430\u0442\u044c.<\/p>\n<h3>iPhone 11 Pro Max<\/h3>\n<p>\u041d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u0442\u0435 \u0436\u0435 \u0442\u0440\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445, \u043d\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u043d\u044c\u0448\u0435: \u0443 \u043d\u0438\u0445 \u043e\u043a\u043e\u043b\u043e 21,5 \u043c\u0441, \u0443 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0442 12 \u0434\u043e 14,5 \u043c\u0441.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043c\u043e\u0436\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a, \u0441\u0442\u043e\u0438\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432: <code>Mutex<\/code>, <code>OSAllocatedUnfairLock<\/code>, <code>NSLock<\/code> \u0438\u043b\u0438 serial queue. \u0421 \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u043e\u043c, <code>pthread_rwlock<\/code> \u0438 concurrent queue \u0441 <code>sync(flags: .barrier)<\/code> \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0430\u043b \u0432 \u043f\u044f\u0442\u044c \u0440\u0430\u0437 \u0434\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>\u041d\u043e \u0438 \u0441 <code>Mutex<\/code> \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0430\u043b 13 \u043c\u0441, \u0430 \u044d\u0442\u043e \u0443\u0436\u0435 hitch. \u0417\u043d\u0430\u0447\u0438\u0442, \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443, \u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u0434 \u043d\u0435\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u043e \u0437\u0430\u0445\u0432\u0430\u0442\u0430, \u0430 \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438, \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p><a class=\"anchor\" name=\"creation-cost\" id=\"creation-cost\"><\/a><\/p>\n<h2>\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0440\u0430\u0441\u0445\u043e\u0434 \u043f\u0430\u043c\u044f\u0442\u0438<\/h2>\n<p>\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043e\u0431\u044b\u0447\u043d\u043e \u0445\u0440\u0430\u043d\u044f\u0442 \u043f\u0440\u044f\u043c\u043e \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435: \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435 \u0440\u044f\u0434\u043e\u043c \u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043d\u0430 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442. \u041f\u043e\u043a\u0430 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0434\u0443\u043c\u0430\u0435\u0442. \u041d\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u044b\u0441\u044f\u0447\u0438: \u0437\u0430\u043f\u0438\u0441\u0438 \u043a\u0435\u0448\u0430, \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043f\u0438\u0441\u043a\u0430. \u0422\u043e\u0433\u0434\u0430 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0432\u043e\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430, \u0441\u0432\u043e\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u043b\u0438 \u0441\u0432\u043e\u0439 actor, \u0438 \u043a\u0430\u0436\u0434\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c, \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u043e\u0442\u043e\u043c \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u043d\u0435\u043c\u0443 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/h3>\n<p>\u041e\u0431\u044a\u0435\u043a\u0442 \u0432 \u0442\u0435\u0441\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u043e\u0434\u043d\u043e \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0433\u043e \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442. \u0412\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 <code>Mutex<\/code> \u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e:<\/p>\n<pre><code class=\"swift\">final class MutexObject {    private let value = Mutex&lt;Int&gt;(0)}final class SerialQueueObject {    private var value = 0    private let queue = DispatchQueue(label: \"creation.serial\")}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u042f \u0441\u043e\u0437\u0434\u0430\u044e 100 000 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u0434\u0440\u044f\u0434, \u0430 \u043f\u043e\u0442\u043e\u043c \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u044e \u0438\u0445. \u0412\u0440\u0435\u043c\u044f \u0434\u0435\u043b\u044e \u043d\u0430 \u0447\u0438\u0441\u043b\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041f\u0430\u043c\u044f\u0442\u044c \u0441\u0447\u0438\u0442\u0430\u044e \u043f\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430\u043c \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u0430: \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0440\u043e\u0441\u043b\u043e \u0447\u0438\u0441\u043b\u043e \u0437\u0430\u043d\u044f\u0442\u044b\u0445 \u0431\u0430\u0439\u0442 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u0432 \u043f\u0435\u0440\u0435\u0441\u0447\u0435\u0442\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442. \u0417\u0430\u0442\u0435\u043c \u0432\u044b\u0447\u0438\u0442\u0430\u044e \u0438\u0437 \u043d\u0435\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0431\u0435\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u041a \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0432 \u044d\u0442\u043e\u043c \u0442\u0435\u0441\u0442\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f, \u043e\u043d\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u044e\u0442\u0441\u044f.<\/p>\n<p>\u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 15 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432, \u0438\u0445 \u043a\u043e\u0434 \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\/tree\/main\/Experiments\/CreationCost\" rel=\"noopener nofollow\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a>.<\/p>\n<h3>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435<\/h3>\n<p>\u041d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u0447\u0435\u043c \u043a\u043e\u0440\u043e\u0447\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/5b\/a9\/f4\/5ba9f4abbaf80c5ebc09ed326edf5bf3.png\" alt=\"\u0412\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. Mutex 15,3 \u043d\u0441, \u0431\u0435\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 15,7 \u043d\u0441, Atomic 15,7 \u043d\u0441, \u043a\u043b\u0430\u0441\u0441 \u0441 MainActor 16,2 \u043d\u0441, actor 20,7 \u043d\u0441, os_unfair_lock 22,4 \u043d\u0441, ManagedAtomic 23,3 \u043d\u0441, DispatchSemaphore 23,8 \u043d\u0441, OSAllocatedUnfairLock 24,3 \u043d\u0441, pthread_mutex 24,7 \u043d\u0441, pthread_rwlock 25,3 \u043d\u0441, NSLock 26,8 \u043d\u0441, NSRecursiveLock 31,4 \u043d\u0441, concurrent DispatchQueue 114,1 \u043d\u0441, serial DispatchQueue 152,2 \u043d\u0441.\" title=\"100 000 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"2415\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/5b\/a9\/f4\/5ba9f4abbaf80c5ebc09ed326edf5bf3.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/5b\/a9\/f4\/5ba9f4abbaf80c5ebc09ed326edf5bf3.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>100 000 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u041e\u0431\u044a\u0435\u043a\u0442 \u0441 <\/strong><code><strong>Mutex<\/strong><\/code><strong> \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u043e, \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0435\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438.<\/strong> \u0423 \u043d\u0438\u0445 15,3 \u0438 15,7 \u043d\u0441. \u0422\u043e \u0436\u0435 \u0443 <code>Atomic<\/code> \u0438 \u0443 \u043a\u043b\u0430\u0441\u0441\u0430 \u0441 <code>@MainActor<\/code>.<\/p>\n<p><strong>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u043e\u0442 7 \u0434\u043e 16 \u043d\u0441.<\/strong> \u0423 <code>OSAllocatedUnfairLock<\/code> 24,3 \u043d\u0441, \u0443 <code>NSLock<\/code> 26,8 \u043d\u0441, \u0443 <code>NSRecursiveLock<\/code> 31,4 \u043d\u0441.<\/p>\n<p><strong>\u041e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u043c\u044c-\u0434\u0435\u0441\u044f\u0442\u044c \u0440\u0430\u0437 \u0434\u043e\u043b\u044c\u0448\u0435.<\/strong> \u0421 serial queue \u044d\u0442\u043e 152 \u043d\u0441, \u0441 concurrent queue 114 \u043d\u0441. \u041d\u0430 100 000 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 15 \u043c\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 1,5 \u043c\u0441 \u0441 <code>Mutex<\/code>.<\/p>\n<p>\u041e\u0442\u043a\u0443\u0434\u0430 \u0442\u0430\u043a\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430, \u0432\u0438\u0434\u043d\u043e \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<h3>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/h3>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0439\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/0c\/ab\/ce\/0cabcead64f4d931d4361cf3959a6a3b.png\" alt=\"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442. Atomic 0 \u0431\u0430\u0439\u0442, \u043a\u043b\u0430\u0441\u0441 \u0441 MainActor 0, Mutex 16, ManagedAtomic 32, OSAllocatedUnfairLock 32, os_unfair_lock 32, pthread_mutex 80, actor 96, DispatchSemaphore 96, NSLock 112, serial DispatchQueue 160, concurrent DispatchQueue 176, NSRecursiveLock 240, pthread_rwlock 240.\" title=\"100 000 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\" width=\"2400\" height=\"2277\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/0c\/ab\/ce\/0cabcead64f4d931d4361cf3959a6a3b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/0c\/ab\/ce\/0cabcead64f4d931d4361cf3959a6a3b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>100 000 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 12 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435, \u043d\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c, \u0431\u0430\u0439\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u0435\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">15,7<\/p>\n<\/td>\n<td>\n<p align=\"left\">17,5<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Atomic<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">15,7<\/p>\n<\/td>\n<td>\n<p align=\"left\">17,0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441 \u0441 <code>@MainActor<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">16,2<\/p>\n<\/td>\n<td>\n<p align=\"left\">17,4<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">15,3<\/p>\n<\/td>\n<td>\n<p align=\"left\">16,6<\/p>\n<\/td>\n<td>\n<p align=\"left\">16<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>os_unfair_lock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">22,4<\/p>\n<\/td>\n<td>\n<p align=\"left\">24,6<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>ManagedAtomic<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">23,3<\/p>\n<\/td>\n<td>\n<p align=\"left\">39,8<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">24,3<\/p>\n<\/td>\n<td>\n<p align=\"left\">35,6<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">24,7<\/p>\n<\/td>\n<td>\n<p align=\"left\">28,0<\/p>\n<\/td>\n<td>\n<p align=\"left\">80<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Actor<\/p>\n<\/td>\n<td>\n<p align=\"left\">20,7<\/p>\n<\/td>\n<td>\n<p align=\"left\">22,3<\/p>\n<\/td>\n<td>\n<p align=\"left\">96<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>DispatchSemaphore<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">23,8<\/p>\n<\/td>\n<td>\n<p align=\"left\">65,9<\/p>\n<\/td>\n<td>\n<p align=\"left\">96<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">26,8<\/p>\n<\/td>\n<td>\n<p align=\"left\">36,2<\/p>\n<\/td>\n<td>\n<p align=\"left\">112<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Serial <code>DispatchQueue<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">152,2<\/p>\n<\/td>\n<td>\n<p align=\"left\">81,0<\/p>\n<\/td>\n<td>\n<p align=\"left\">160<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Concurrent <code>DispatchQueue<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">114,1<\/p>\n<\/td>\n<td>\n<p align=\"left\">83,5<\/p>\n<\/td>\n<td>\n<p align=\"left\">176<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_rwlock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">25,3<\/p>\n<\/td>\n<td>\n<p align=\"left\">28,7<\/p>\n<\/td>\n<td>\n<p align=\"left\">240<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSRecursiveLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">31,4<\/p>\n<\/td>\n<td>\n<p align=\"left\">34,9<\/p>\n<\/td>\n<td>\n<p align=\"left\">240<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><code><strong>Mutex<\/strong><\/code><strong> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 16 \u0431\u0430\u0439\u0442.<\/strong> \u041e\u043d \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0430\u043a \u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u043e, \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0435\u0437 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<p><strong>\u0414\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.<\/strong> \u041d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u0436\u0435 \u0434\u0432\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0433\u043e. <code>OSAllocatedUnfairLock<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 32 \u0431\u0430\u0439\u0442\u0430, <code>NSLock<\/code> 112, <code>NSRecursiveLock<\/code> \u0438 <code>pthread_rwlock<\/code> \u043f\u043e 240. \u041f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f <code>Mutex<\/code> \u0438 <code>OSAllocatedUnfairLock<\/code> \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435 \u0431\u044b\u043b\u0438 \u0440\u0430\u0432\u043d\u044b, \u0430 \u043f\u043e \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0435\u0442.<\/p>\n<p><strong>\u041e\u0447\u0435\u0440\u0435\u0434\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u0440\u0435\u0445 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 160 \u0431\u0430\u0439\u0442.<\/strong> \u042d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0441\u043b\u0443\u0447\u0430\u0439 <a href=\"https:\/\/github.com\/Automattic\/pocket-casts-ios\/pull\/5186\" rel=\"noopener nofollow\">Pocket Casts<\/a> \u0438\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043f\u0440\u043e feature flag: \u0442\u0430\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0444\u043b\u0430\u0433 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c.<\/p>\n<p>\u041d\u0430 100 000 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u044d\u0442\u043e 1,6 \u041c\u0411 \u0441 <code>Mutex<\/code>, 11 \u041c\u0411 \u0441 <code>NSLock<\/code>, 16 \u041c\u0411 \u0441 serial queue \u0438 24 \u041c\u0411 \u0441 <code>NSRecursiveLock<\/code>.<\/p>\n<h3>iPhone 11 Pro Max<\/h3>\n<p>\u041d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 \u043f\u0430\u043c\u044f\u0442\u044c \u0442\u0430 \u0436\u0435. \u0412\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u0434\u0432\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u043d\u043e \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0442\u0435 \u0436\u0435: \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 <code>Mutex<\/code> \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0437\u0430 31,1 \u043d\u0441, \u0431\u0435\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430 30,5 \u043d\u0441, \u0441 serial queue \u0437\u0430 318 \u043d\u0441.<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0443\u0436\u043d\u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435, \u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043c\u043d\u043e\u0433\u043e, \u0441\u0442\u043e\u0438\u0442 \u0431\u0440\u0430\u0442\u044c <code>Mutex<\/code>. \u041e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043d\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u043e, \u043a\u0430\u043a \u0431\u0435\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 16 \u0431\u0430\u0439\u0442 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442: \u0442\u0430\u043a\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u043c\u044c-\u0434\u0435\u0441\u044f\u0442\u044c \u0440\u0430\u0437 \u0434\u043e\u043b\u044c\u0448\u0435 \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043d\u0430 160 \u0431\u0430\u0439\u0442 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>\u0414\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 <code>Atomic<\/code>: \u043e\u043d \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043d\u0438\u0447\u0435\u0433\u043e.<\/p>\n<p>\u042d\u0442\u043e \u0431\u044b\u043b \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442. \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<p><a class=\"anchor\" name=\"conclusion\" id=\"conclusion\"><\/a><\/p>\n<h2>\u0418\u0442\u043e\u0433<\/h2>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0415\u0441\u0442\u044c, \u0438 \u044d\u0442\u043e <code>Mutex<\/code>. \u0412\u043e \u0432\u0441\u0435\u0445 \u0432\u043e\u0441\u044c\u043c\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u0445 \u043d\u0430 iPhone 15 Pro Max \u043e\u043d \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432 \u0447\u0438\u0441\u043b\u0435 \u043b\u0443\u0447\u0448\u0438\u0445.<\/p>\n<p>\u041e\u0431\u0433\u043e\u043d\u044f\u043b\u0438 \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445: <code>Atomic<\/code> \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438, \u0444\u043b\u0430\u0433 <code>.adaptiveSpin<\/code> \u043d\u0430 \u0440\u0435\u0434\u043a\u0438\u0445 \u0434\u043e\u043b\u0433\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u0430\u0445. Read-write lock \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043d\u0435 \u0431\u044b\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 <code>Mutex<\/code> \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0430\u043c \u0432\u044b\u0431\u043e\u0440 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e. \u0417\u0430\u0445\u0432\u0430\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u043d\u0430 \u0441\u043e\u0442\u043d\u0438 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434. \u0417\u0430\u043c\u0435\u0442\u043d\u044b\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438, \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0438 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u043f\u043e\u044f\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u0432 \u0442\u0440\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445: \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0437\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u043b\u043e\u0441\u044c \u043c\u0435\u0436\u0434\u0443 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0438 \u0444\u043e\u043d\u043e\u0432\u044b\u043c \u0438 \u043a\u043e\u0433\u0434\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430\u0434\u043e\u043b\u0433\u043e \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u043b \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a.<\/p>\n<p>\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0447\u0430\u0441\u0442\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0432\u043e\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0439\u0442\u0438\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u041f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u0442\u044c \u0432 \u043c\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/habr.com\/ru\/articles\/1099306\/\" rel=\"noopener nofollow\">\u00ab\u041e\u0442 798 \u0434\u043e 16 \u043d\u0441: \u043a\u0430\u043a \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f debounce \u043f\u0440\u0438\u0432\u0435\u043b\u0430 \u043c\u0435\u043d\u044f \u0432 Swift Runtime\u00bb<\/a>.<\/p>\n<h3>Mutex \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/h3>\n<p>\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u044f\u0442\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u043d\u0438\u0445.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0447\u0435\u0442\u0447\u0438\u043a, \u043d\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u043b\u043e\u0432\u0430\u0440\u044c, \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439\/\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u043b\u043e\u0432\u0430\u0440\u044c, p99 \u0432\u044b\u0437\u043e\u0432\u0430, \u043c\u043a\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">98% \u0447\u0442\u0435\u043d\u0438\u0439, \u043c\u043b\u043d \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439\/\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430, \u043c\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c, \u0431\u0430\u0439\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,06<\/p>\n<\/td>\n<td>\n<p align=\"left\">19,1<\/p>\n<\/td>\n<td>\n<p align=\"left\">9,37<\/p>\n<\/td>\n<td>\n<p align=\"left\">12,95<\/p>\n<\/td>\n<td>\n<p align=\"left\">16<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>OSAllocatedUnfairLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,08<\/p>\n<\/td>\n<td>\n<p align=\"left\">22,5<\/p>\n<\/td>\n<td>\n<p align=\"left\">9,50<\/p>\n<\/td>\n<td>\n<p align=\"left\">12,97<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>os_unfair_lock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">1,85<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,04<\/p>\n<\/td>\n<td>\n<p align=\"left\">67,0<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,60<\/p>\n<\/td>\n<td>\n<p align=\"left\">13,65<\/p>\n<\/td>\n<td>\n<p align=\"left\">32<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_mutex<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">4,62<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,89<\/p>\n<\/td>\n<td>\n<p align=\"left\">51,7<\/p>\n<\/td>\n<td>\n<p align=\"left\">9,29<\/p>\n<\/td>\n<td>\n<p align=\"left\">12,96<\/p>\n<\/td>\n<td>\n<p align=\"left\">80<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>NSLock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">6,36<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,89<\/p>\n<\/td>\n<td>\n<p align=\"left\">51,8<\/p>\n<\/td>\n<td>\n<p align=\"left\">8,05<\/p>\n<\/td>\n<td>\n<p align=\"left\">12,96<\/p>\n<\/td>\n<td>\n<p align=\"left\">112<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>pthread_rwlock<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">6,00<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442 \u0432 \u0442\u0435\u0441\u0442\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0442 \u0432 \u0442\u0435\u0441\u0442\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">3,07<\/p>\n<\/td>\n<td>\n<p align=\"left\">68,55<\/p>\n<\/td>\n<td>\n<p align=\"left\">240<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>DispatchSemaphore<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">3,74<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,20<\/p>\n<\/td>\n<td>\n<p align=\"left\">47,3<\/p>\n<\/td>\n<td>\n<p align=\"left\">1,05<\/p>\n<\/td>\n<td>\n<p align=\"left\">65,63<\/p>\n<\/td>\n<td>\n<p align=\"left\">96<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Serial <code>DispatchQueue<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">88,23<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,18<\/p>\n<\/td>\n<td>\n<p align=\"left\">64,1<\/p>\n<\/td>\n<td>\n<p align=\"left\">0,45<\/p>\n<\/td>\n<td>\n<p align=\"left\">13,86<\/p>\n<\/td>\n<td>\n<p align=\"left\">160<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><em>iPhone 15 Pro Max. \u0421\u0447\u0435\u0442\u0447\u0438\u043a: \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a. \u0421\u043b\u043e\u0432\u0430\u0440\u044c: \u0432\u043e\u0441\u0435\u043c\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0431\u0435\u0437 \u043f\u0430\u0443\u0437. 98% \u0447\u0442\u0435\u043d\u0438\u0439: \u0448\u0435\u0441\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u0437 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430: \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u0442\u043e\u043a \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c <\/em><code><em>background<\/em><\/code><em>.<\/em><\/p>\n<p><code><strong>Mutex<\/strong><\/code><strong>, <\/strong><code><strong>OSAllocatedUnfairLock<\/strong><\/code><strong> \u0438 <\/strong><code><strong>os_unfair_lock<\/strong><\/code><strong> \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430.<\/strong> \u041d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 Apple <code>Mutex<\/code> <a href=\"https:\/\/github.com\/swiftlang\/swift\/blob\/main\/stdlib\/public\/Synchronization\/Mutex\/DarwinImpl.swift\" rel=\"noopener nofollow\">\u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u0431\u044f <code>os_unfair_lock<\/code><\/a> \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. <code>OSAllocatedUnfairLock<\/code> \u044d\u0442\u043e \u0442\u043e\u0442 \u0436\u0435 <code>os_unfair_lock<\/code>, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0430\u043c\u044f\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u0443 \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435, \u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u043d\u0438 \u0442\u0435\u043c, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0438 \u043a\u0430\u043a \u0435\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442.<\/p>\n<p><code><strong>Mutex<\/strong><\/code><strong> \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0441 iOS 18.<\/strong> \u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442 <code>OSAllocatedUnfairLock<\/code>: \u043e\u043d \u0435\u0441\u0442\u044c \u0441 iOS 16.<\/p>\n<p><strong>\u041c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 <\/strong><code><strong>NSLock<\/strong><\/code><strong> \u043d\u0430 <\/strong><code><strong>Mutex<\/strong><\/code><strong> \u0440\u0430\u0434\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430.<\/strong> \u0411\u0435\u0437 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u0438 <code>NSLock<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 4,5 \u043d\u0441 \u043d\u0430 \u0437\u0430\u0445\u0432\u0430\u0442, \u0430 \u043f\u0440\u0438 \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0430\u043b \u0441 \u043d\u0438\u043c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441 <code>Mutex<\/code>. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0443\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0442\u043e\u043a\u0438 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043a \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e: \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 <code>NSLock<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u043d\u0430 15% \u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0430 p99 \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u044b\u0440\u043e\u0441 \u0441 19 \u0434\u043e 52 \u043c\u043a\u0441. \u0418 \u043a\u043e\u0433\u0434\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u043c\u043d\u043e\u0433\u043e: <code>NSLock<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 112 \u0431\u0430\u0439\u0442, <code>Mutex<\/code> 16.<\/p>\n<p><strong>\u041e\u0447\u0435\u0440\u0435\u0434\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 <\/strong><code><strong>queue.sync<\/strong><\/code><strong>, \u043f\u043e\u0447\u0442\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435 \u0431\u044b\u043b\u0430 \u0441\u0440\u0435\u0434\u0438 \u0441\u0430\u043c\u044b\u0445 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445.<\/strong> \u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0435 \u0432 48 \u0440\u0430\u0437 \u0434\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u043e\u0434 <code>Mutex<\/code>, \u0447\u0442\u0435\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u0430 \u0432 \u0441\u0442\u043e \u0440\u0430\u0437 \u0434\u043e\u043b\u044c\u0448\u0435. \u0412 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u043f\u0440\u0438 \u0432\u043e\u0441\u044c\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 serial queue \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0430 \u043f\u043e\u0447\u0442\u0438 \u0432 \u0448\u0435\u0441\u0442\u044c \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043f\u0440\u0438 98% \u0447\u0442\u0435\u043d\u0438\u0439 \u0432 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435. \u041e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u0441\u044f\u0442\u044c \u0440\u0430\u0437 \u0434\u043e\u043b\u044c\u0448\u0435 \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 160 \u0431\u0430\u0439\u0442 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>\u0417\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438\u0434\u0443\u0442 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u0438\u043b\u0438 \u0433\u0434\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435. \u0415\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0440\u0435\u0434\u043a\u0438\u0435, \u0437\u0430\u043c\u0435\u043d\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e\u0433\u043e \u043d\u0435 \u0434\u0430\u0441\u0442.<\/p>\n<h3>Atomic \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p><strong>\u0415\u0441\u043b\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u043d\u043e\u0439 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, <\/strong><code><strong>Atomic<\/strong><\/code><strong> \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438.<\/strong> \u042d\u0442\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u0430, \u0437\u0430\u043c\u0435\u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430. \u0427\u0442\u0435\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 0,32 \u043d\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 1,86 \u043d\u0441 \u043f\u043e\u0434 <code>Mutex<\/code>. \u041d\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435 \u043f\u0440\u0438 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 <code>Atomic<\/code> \u0440\u0430\u0432\u0435\u043d <code>Mutex<\/code>, \u0430 \u043f\u0440\u0438 \u0434\u0432\u0443\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u0442\u0440\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443: 310 \u043f\u0440\u043e\u0442\u0438\u0432 102 \u043c\u043b\u043d. \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043e\u043d \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430.<\/p>\n<p><strong>\u0415\u0441\u043b\u0438 \u0444\u043b\u0430\u0433 \u0443\u0436\u0435 \u0437\u0430\u0449\u0438\u0449\u0435\u043d <\/strong><code><strong>Mutex<\/strong><\/code><strong>, \u043c\u0435\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u043d\u0430 <\/strong><code><strong>Atomic<\/strong><\/code><strong> \u0440\u0430\u0434\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430.<\/strong> \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 1,5 \u043d\u0441 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435: \u043f\u0440\u0438 10 000 \u0447\u0442\u0435\u043d\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u044d\u0442\u043e 3 \u043c\u043a\u0441 \u0441 <code>Atomic<\/code> \u0438 19 \u043c\u043a\u0441 \u0441 <code>Mutex<\/code>. \u0417\u0430\u043c\u0435\u043d\u0430 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u0430, \u043a\u043e\u0433\u0434\u0430 \u0444\u043b\u0430\u0433 \u0447\u0438\u0442\u0430\u044e\u0442 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0447\u0430\u0449\u0435 \u0438\u043b\u0438 \u043a\u043e\u0433\u0434\u0430 \u0437\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432.<\/p>\n<p>\u0414\u043e iOS 18 \u0432\u043c\u0435\u0441\u0442\u043e <code>Atomic<\/code> \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c <code>ManagedAtomic<\/code> \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 <a href=\"https:\/\/github.com\/apple\/swift-atomics\" rel=\"noopener nofollow\">swift-atomics<\/a>. \u0427\u0442\u0435\u043d\u0438\u0435 \u0441 \u043d\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 0,80 \u043d\u0441, \u0430 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043e\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 32 \u0431\u0430\u0439\u0442\u0430.<\/p>\n<h3>\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438\u0441\u044c \u043b\u0438 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0435 \u0441\u043e\u0432\u0435\u0442\u044b?<\/h3>\n<p><strong>\u00ab\u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <\/strong><code><strong>os_unfair_lock<\/strong><\/code><strong>\u00bb.<\/strong> \u0421\u043e\u0432\u0435\u0442 \u043f\u043e \u0441\u0443\u0442\u0438 \u0432\u0435\u0440\u043d\u044b\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0435\u043c\u0443 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e\u0449\u0435 \u0447\u0435\u0440\u0435\u0437 <code>Mutex<\/code>. \u0412\u043d\u0443\u0442\u0440\u0438 <code>Mutex<\/code> \u0442\u043e\u0442 \u0436\u0435 <code>os_unfair_lock<\/code>: \u0437\u0430\u0445\u0432\u0430\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u0435 \u0436\u0435 1,86 \u043d\u0441, \u043d\u043e \u0440\u0443\u0447\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b <code>lock()<\/code> \u0438 <code>unlock()<\/code> \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. \u0411\u043e\u043b\u044c\u0448\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0447\u0435\u043c <code>Mutex<\/code>, <code>os_unfair_lock<\/code> \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u043d\u0438 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435, \u043d\u0438 \u043f\u0440\u0438 98% \u0447\u0442\u0435\u043d\u0438\u0439. \u041f\u0440\u0438\u0447\u0438\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u043e\u0432\u043e\u043c \u043a\u043e\u0434\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u044f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b.<\/p>\n<p><strong>\u00ab\u0415\u0441\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u0439 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435\u0441\u044c \u043a read-write lock \u0438\u043b\u0438 concurrent queue \u0441 barrier\u00bb.<\/strong> \u041d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043e\u0432\u0435\u0442 \u043d\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0441\u044f. \u041f\u0440\u0438 98% \u0447\u0442\u0435\u043d\u0438\u0439 \u0438 \u0448\u0435\u0441\u0442\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 <code>pthread_rwlock<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u0432\u0442\u0440\u043e\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0447\u0435\u043c <code>Mutex<\/code>, \u0430 concurrent queue \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432\u0448\u0435\u0441\u0442\u0435\u0440\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u0417\u0430\u043f\u0438\u0441\u044c \u0441 \u043d\u0438\u043c\u0438 \u0442\u043e\u0436\u0435 \u0436\u0434\u0430\u043b\u0430 \u0434\u043e\u043b\u044c\u0448\u0435: p99 \u0437\u0430\u043f\u0438\u0441\u0438 21,8 \u0438 29,6 \u043c\u043a\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 8,0 \u043c\u043a\u0441.<\/p>\n<p>\u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0434\u0435\u043b\u043e \u0432 \u0434\u043b\u0438\u043d\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u0417\u0430\u0445\u0432\u0430\u0442 <code>pthread_rwlock<\/code> \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0434\u043e\u0440\u043e\u0436\u0435: \u0447\u0442\u0435\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u0430 \u043f\u043e\u0434 \u043d\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 6,1 \u043d\u0441 \u043f\u0440\u043e\u0442\u0438\u0432 1,86 \u043d\u0441 \u043f\u043e\u0434 <code>Mutex<\/code>. \u041d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u043c \u0447\u0442\u0435\u043d\u0438\u0438 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u043e\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u044d\u0442\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b.<\/p>\n<p>\u0423 \u044d\u0442\u0438\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u043d\u0430\u0448\u043b\u0438\u0441\u044c \u0435\u0449\u0435 \u0434\u0432\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430, \u0443\u0436\u0435 \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0434\u043e\u043b\u0435\u0439 \u0447\u0442\u0435\u043d\u0438\u0439. \u041f\u0440\u0438 \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0430\u043b <code>pthread_rwlock<\/code> 68,6 \u043c\u0441, concurrent queue \u0441 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0447\u0435\u0440\u0435\u0437 <code>sync(flags: .barrier)<\/code> 61,9 \u043c\u0441, \u0430 <code>Mutex<\/code> 13 \u043c\u0441. \u0418 <code>pthread_rwlock<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 240 \u0431\u0430\u0439\u0442, \u0432 \u043f\u044f\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c <code>Mutex<\/code>.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438 \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u043e\u043b\u0435 \u0447\u0442\u0435\u043d\u0438\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441\u0442\u043e\u0438\u0442 \u0441 <code>Mutex<\/code>. Read-write lock \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043b\u0433\u043e\u0435. \u0412 \u043c\u043e\u0438\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u0442\u0430\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0435 \u0431\u044b\u043b\u043e, \u0438 \u0432\u044b\u0438\u0433\u0440\u044b\u0448 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u043a\u043e\u0434\u0435.<\/p>\n<p><strong>\u00ab\u0410\u043a\u0442\u043e\u0440\u044b \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435, \u0432\u043e\u0437\u044c\u043c\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443\u00bb.<\/strong> \u0421\u043e\u0432\u0435\u0442 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0441\u044f \u043d\u0430\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443. \u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a actor \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 52,6 \u043d\u0441, \u0432 28 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u0430\u0445\u0432\u0430\u0442 <code>Mutex<\/code>.<\/p>\n<p>\u041d\u043e \u043f\u043b\u0430\u0442\u0438\u043c \u043c\u044b \u0437\u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435, \u0430 \u043d\u0435 \u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 actor. \u0421\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0437\u0430 \u043e\u0434\u0438\u043d <code>await<\/code> \u043e\u0431\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 1,23 \u043d\u0441 \u043a\u0430\u0436\u0434\u043e\u0435 \u0432\u043c\u0435\u0441\u0442\u043e 58,1 \u043d\u0441. \u042d\u0442\u043e \u0432 47 \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u0443\u0436\u0435 \u0431\u043b\u0438\u0437\u043a\u043e \u043a <code>Mutex<\/code> \u0441 \u0435\u0433\u043e 0,69 \u043d\u0441.<\/p>\n<p>\u0414\u043e\u0440\u043e\u0436\u0435 \u0432\u0441\u0435\u0433\u043e \u0432 \u044d\u0442\u0438\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0435 actor, \u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0438 \u0444\u043e\u043d\u043e\u0432\u044b\u043c. \u041e\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 5 \u043c\u043a\u0441 \u0442\u0443\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u0441 actor \u0438\u043b\u0438 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e. \u042d\u0442\u043e \u0432 93 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a actor \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438. \u0410 \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0443\u0436\u043d\u043e\u043c actor, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0432\u0441\u0435\u043c.<\/p>\n<p>\u041e\u0442\u0441\u044e\u0434\u0430 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p>\u041d\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c actor \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u0434\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0440\u043e\u0436\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u0438\u0434\u0443\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0438 \u0444\u043e\u043d\u043e\u0432\u044b\u043c \u0432 \u0446\u0438\u043a\u043b\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c actor \u043e\u0434\u043d\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041c\u0435\u043b\u043a\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e, \u0438 \u0432 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0437\u0430\u0449\u0438\u0449\u0430\u0442\u044c <code>Mutex<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u00ab\u041d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a\u00bb.<\/strong> \u041f\u0440\u0430\u0432\u0438\u043b\u043e \u0432\u0435\u0440\u043d\u043e\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442. \u041a\u043e\u0433\u0434\u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0447\u0438\u0442\u0430\u043b \u043a\u0435\u0448 \u043f\u043e\u0434 <code>Mutex<\/code>, \u0447\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u043e \u043e\u043a\u043e\u043b\u043e 2 \u043c\u043a\u0441. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434 \u0442\u0435\u043c \u0436\u0435 <code>Mutex<\/code> \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0430\u043b 13 \u043c\u0441, \u0430 \u044d\u0442\u043e \u0443\u0436\u0435 hitch.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u043e \u0437\u0430\u0445\u0432\u0430\u0442\u0430, \u0430 \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0418 \u0442\u0430\u043c, \u0433\u0434\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043c\u043e\u0436\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a, \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>DispatchSemaphore<\/code>, <code>pthread_rwlock<\/code> \u0438 concurrent queue \u0441 <code>sync(flags: .barrier)<\/code>: \u0441 \u043d\u0438\u043c\u0438 \u043e\u043d \u0436\u0434\u0430\u043b \u0432 \u043f\u044f\u0442\u044c \u0440\u0430\u0437 \u0434\u043e\u043b\u044c\u0448\u0435.<\/p>\n<h3>\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c<\/h3>\n<p>\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0437\u044f\u0442\u044c <code>Mutex<\/code> \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u0432\u044b\u0431\u043e\u0440\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0435 \u0434\u0443\u043c\u0430\u0442\u044c. \u0412\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u0435\u0435 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0438 \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043a \u043d\u0435\u0439 \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0417\u0430\u0434\u0430\u0447\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0430\u0434 \u043e\u0431\u0449\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Mutex<\/code>, \u0434\u043e iOS 18 <code>OSAllocatedUnfairLock<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435: \u0444\u043b\u0430\u0433 \u0438\u043b\u0438 \u0441\u0447\u0435\u0442\u0447\u0438\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Atomic<\/code>, \u0434\u043e iOS 18 <code>ManagedAtomic<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0427\u0442\u0435\u043d\u0438\u0439 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Mutex<\/code>. Read-write lock, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043b\u0433\u043e\u0435 \u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e \u0432\u044b\u0438\u0433\u0440\u044b\u0448<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0443\u0436\u0435 \u0432 actor \u0438\u043b\u0438 \u043d\u0430 <code>MainActor<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c. \u0413\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0438 \u0444\u043e\u043d\u043e\u0432\u044b\u043c \u0432 \u0446\u0438\u043a\u043b\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043c\u043e\u0436\u0435\u0442 \u0436\u0434\u0430\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Mutex<\/code>, <code>OSAllocatedUnfairLock<\/code> \u0438\u043b\u0438 <code>NSLock<\/code> \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u043f\u043e\u0434 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u043e\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u0442\u044b\u0441\u044f\u0447 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Mutex<\/code> \u0438\u043b\u0438 <code>Atomic<\/code>. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u0443\u044e\u0442 \u0437\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443, \u0438 \u0432\u0430\u0436\u0435\u043d p99<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c <code>OSAllocatedUnfairLock<\/code> \u0441 <code>.adaptiveSpin<\/code> \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0412 \u043a\u043e\u0434\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c <code>NSLock<\/code> \u0438\u043b\u0438 serial queue, \u0430 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0440\u0435\u0434\u043a\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0434\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\" rel=\"noopener nofollow\">\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a<\/a> \u0438 <a href=\"https:\/\/github.com\/ivan-magda\/swift-synchronization-benchmarks\/releases\/tag\/benchmark-results-2026-11-07\" rel=\"noopener nofollow\">\u0441\u044b\u0440\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/a> \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b. \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u0430 \u0441 \u043c\u043e\u0438\u043c\u0438.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438! \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/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\/1106672\/\">https:\/\/habr.com\/ru\/articles\/1106672\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0417\u0430 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b iOS-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u044f \u043d\u0435 \u0440\u0430\u0437 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u0442\u0435 \u0438\u043b\u0438 \u0438\u043d\u044b\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e \u0432\u044b\u0431\u043e\u0440\u0443 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u0430 \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 os_unfair_lock. \u0415\u0441\u043b\u0438 \u0447\u0442\u0435\u043d\u0438\u0439 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u0442\u043e \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435\u0441\u044c \u043a read-write lock \u0438\u043b\u0438 concurrent queue \u0441 barrier-\u0437\u0430\u043f\u0438\u0441\u044c\u044e. \u0410 \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0447\u044c \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u043e Swift Concurrency, \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043b\u044b\u0448\u0430\u0442\u044c, \u0447\u0442\u043e actors \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0438 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430\u043c.\u041c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0437\u0430\u0434\u0430\u0447\u0430\u0445, \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u043d\u0430 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0418 \u0437\u0430\u043e\u0434\u043d\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447.\u041e\u0442\u043f\u0440\u0430\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0442\u0430\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0412\u0430\u0434\u0438\u043c\u0430 \u0411\u0443\u043b\u0430\u0432\u0438\u043d\u0430 \u0438 \u041c\u0430\u0440\u0438\u043d\u0430 \u0422\u043e\u0434\u043e\u0440\u043e\u0432\u0430. \u041e\u043d\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442, \u043a\u0430\u043a \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445. \u041d\u043e \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u043e\u0432\u044b\u0435 API, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 Synchronization.Mutex \u0438 Atomic. \u041c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0445, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u043e\u0440 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445.\u0427\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432, \u044f \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0432 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 open source \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445: SDWebImage, Alamofire, Apollo iOS, Nuke, Firebase \u0438 Pocket Casts. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0437\u0430\u0449\u0438\u0449\u0430\u044e\u0442 \u043a\u0435\u0448 \u0438 \u0445\u0440\u0430\u043d\u044f\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.\u0412\u0441\u0435 \u0437\u0430\u043c\u0435\u0440\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u0432 Release-\u0441\u0431\u043e\u0440\u043a\u0430\u0445 \u043d\u0430 \u0434\u0432\u0443\u0445 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445: iPhone 11 Pro Max \u0438 iPhone 15 Pro Max.\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 \u044f \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443 \u043c\u044b \u0440\u0435\u0448\u0430\u0435\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c \u0438 \u043a\u0430\u043a\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u0412 \u043a\u043e\u043d\u0446\u0435 \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u044d\u0442\u0438 \u0432\u044b\u0432\u043e\u0434\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0438 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e Mutex, \u0433\u0434\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Atomic \u0438 \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 actors.\u0421\u0440\u0430\u0437\u0443 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0443: \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439. \u042d\u0442\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0438 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0432\u044b\u0448\u043b\u043e. \u0415\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0430\u043b\u043e, \u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0434\u0440\u044f\u0434 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e: \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d, \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043a \u0438\u0442\u043e\u0433\u0443. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u043c\u043e\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u041a\u0430\u043a \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u0411\u0430\u0437\u043e\u0432\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435: \u0447\u0442\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u044c, \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u043b\u043e\u0432\u0430\u0440\u044e\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c feature flag\u041c\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u0439, \u043c\u0430\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439: \u043d\u0443\u0436\u0435\u043d \u043b\u0438 read-write lock?\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 actors \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435?\u041a\u0435\u0448 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0435\u0418\u043d\u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u0432: \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0436\u0434\u0435\u0442 \u0444\u043e\u043d\u043e\u0432\u044b\u0439\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0440\u0430\u0441\u0445\u043e\u0434 \u043f\u0430\u043c\u044f\u0442\u0438\u0418\u0442\u043e\u0433\u041a\u0430\u043a \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u0412\u0435\u0440\u0441\u0438\u0438 iOS \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445:\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u0412\u0435\u0440\u0441\u0438\u044f iOSiPhone 15 Pro Max26.6.2iPhone 11 Pro Max26.6\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0432 Xcode 27.1 \u0441\u043e Swift 6.4.0, \u0432 Release-\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u0443\u0434\u0443 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 iPhone 15 Pro Max, \u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043d\u0430 iPhone 11 Pro Max \u043e\u0442\u043c\u0435\u0447\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0435 \u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0442\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u043c \u043e\u0434\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u0418\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u043d\u0430\u0434 \u043d\u0438\u043c.\u041a\u0430\u0436\u0434\u044b\u0439 \u0442\u0435\u0441\u0442 \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437. \u0417\u0430 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u0441\u0447\u0435\u0442 \u0448\u0435\u043b \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b\u043e \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0412\u0441\u0435\u0433\u043e \u043d\u0430 \u0434\u0432\u0443\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c 1 366 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432.\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e\u0414\u043b\u044f \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u044f \u0438\u0437\u043c\u0435\u0440\u044f\u043b \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u043e\u0439 \u0441\u0435\u0440\u0438\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u0435\u043b\u0438\u043b \u0435\u0433\u043e \u043d\u0430 \u0447\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u0412\u043e\u0442 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0441\u043e \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u043e\u043c:import Synchronizationlet counter = Mutex&lt;Int&gt;(0)let iterations = 1_000_000let clock = ContinuousClock()let elapsed = clock.measure {    for _ in 0..&lt;iterations {        counter.withLock { value in            value += 1        }    }}let timePerOperation = elapsed \/ iterations\u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u0441\u044f \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0440\u0430\u0437. \u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043c\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443, \u0438\u0437\u043c\u0435\u043d\u044f\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u043b\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0434\u0435\u043b\u0438\u043c \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043e\u043d. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0446\u0438\u043a\u043b \u0437\u0430\u043d\u044f\u043b 2 \u043c\u0441, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 2 \u043d\u0441 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e.\u0417\u0430 \u043e\u0434\u0438\u043d \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u044f \u0438\u0437\u043c\u0435\u0440\u044f\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u0438\u0445 \u0441\u0435\u0440\u0438\u0439. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0440\u0430\u043b \u043c\u0435\u0434\u0438\u0430\u043d\u0443 \u043f\u043e \u0441\u0435\u0440\u0438\u044f\u043c, \u0437\u0430\u0442\u0435\u043c \u043c\u0435\u0434\u0438\u0430\u043d\u0443 \u043f\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0438.\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u044f\u0442\u044c \u0441\u0435\u0440\u0438\u0439 \u0434\u0430\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b 1,9; 2,0; 2,1; 2,2 \u0438 5,0 \u043d\u0441 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u0435\u0434\u0438\u0430\u043d\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435, 2,1 \u043d\u0441. \u041e\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.\u0427\u0438\u0441\u043b\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432\u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u044f \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u043c\u0435\u0440\u044f\u043b \u043e\u0431\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0434\u0435\u043b\u0438\u043b \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0442\u0435\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u0438\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u0430 \u043f\u043e \u0447\u0438\u0441\u043b\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0432\u0438\u0434\u043d\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u0443\u0441\u043f\u0435\u0432\u0430\u044e\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u0435.\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u043f\u043e \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0443 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0438 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0448\u043b\u043e \u043f\u043e\u043b\u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 4 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0437\u0430 0,5 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0442\u043e \u0435\u0441\u0442\u044c 8 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443.\u0414\u043b\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a \u044f \u0438\u0437\u043c\u0435\u0440\u044f\u043b \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0435\u0435 \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438:p50, \u0438\u043b\u0438 \u043c\u0435\u0434\u0438\u0430\u043d\u0430: \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.p99: \u043e\u043a\u043e\u043b\u043e 99% \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0438\u0441\u044c \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 p99 \u0432 20 \u043c\u043a\u0441 \u0438\u0437 \u0441\u0442\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 99 \u0443\u043b\u043e\u0436\u0438\u043b\u0438\u0441\u044c \u0432 20 \u043c\u043a\u0441, \u0430 \u043e\u0434\u0438\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435.\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u044f \u0441\u0447\u0438\u0442\u0430\u043b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0430 \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0431\u0440\u0430\u043b \u043c\u0435\u0434\u0438\u0430\u043d\u0443 \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u0421\u044b\u0440\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e.\u0411\u0430\u0437\u043e\u0432\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435: \u0447\u0442\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u044c, \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u041d\u0430\u0447\u043d\u0443 \u0441 \u0442\u043e\u0433\u043e \u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438 \u0412\u0430\u0434\u0438\u043c \u0411\u0443\u043b\u0430\u0432\u0438\u043d \u0438 \u041c\u0430\u0440\u0438\u043d \u0422\u043e\u0434\u043e\u0440\u043e\u0432: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0430\u043c\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0430\u0434 \u043e\u0431\u0449\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c, \u0435\u0441\u043b\u0438 \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u0435\u0435 \u0442\u0435\u043c \u0438\u043b\u0438 \u0438\u043d\u044b\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438? \u041e\u0431\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u0434\u0435\u0441\u044c \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u041d\u0430\u0434 \u043d\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e:\u0447\u0442\u0435\u043d\u0438\u0435: \u043f\u043e\u0442\u043e\u043a \u0447\u0438\u0442\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442;\u0437\u0430\u043f\u0438\u0441\u044c: \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c;\u0441\u0447\u0435\u0442\u0447\u0438\u043a: \u043f\u043e\u0442\u043e\u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443.\u0412\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 actor \u043e\u0434\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 Task. \u0414\u0430\u043b\u044c\u0448\u0435 \u044f \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0436\u0438\u043c \u00ab\u0431\u0435\u0437 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u0438\u00bb. \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442: \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u0435\u0435 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442, \u0438 \u0436\u0434\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f.\u0412 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0430 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0438\u043d\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u0447\u0438\u0442\u0430\u0435\u0442.\u0418\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043f\u043e\u0434 Mutex \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435. \u0414\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0449\u0438\u0442\u044b. \u0412\u043e\u0442 \u0442\u0430 \u0436\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u0434\u043b\u044f \u0442\u0440\u0435\u0445 \u0438\u0437 \u043d\u0438\u0445. \u0421 Atomic \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439:let counter = Atomic&lt;Int&gt;(0)counter.wrappingAdd(1, ordering: .acquiringAndReleasing)\u0421 serial queue \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 sync:let queue = DispatchQueue(label: &#171;counter&#187;)var value = 0queue.sync {    value += 1}\u0421 actor \u043a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0441 await \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438:actor Counter {    private var value = 0    func increment() -&gt; Int {        value += 1        return value    }}let counter = Counter()let newValue = await counter.increment()\u0423 actor \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u0446\u0438\u043a\u043b \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0446\u0438\u043a\u043b, \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u043e\u043c\u0443 \u0432\u044b\u0437\u043e\u0432\u0443 \u0441 await \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.\u0412\u0441\u0435\u0433\u043e \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 20 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u043a\u043e\u0434 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u0435\u0437 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0446\u0438\u0438\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 Atomic. \u041d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0430 \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443: \u0447\u0435\u043c \u043a\u043e\u0440\u043e\u0447\u0435 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435.\u041e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a, iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.Actor \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0433\u0440\u0430\u0444\u0438\u043a \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f: \u0438\u0445 \u0432\u0440\u0435\u043c\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0440\u044f\u0434\u043e\u043c \u0441 Mutex.\u041e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a \u0438\u043b\u0438 \u043e\u0434\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 Task, iPhone 15 Pro Max, iOS 26.6.2, Release-\u0441\u0431\u043e\u0440\u043a\u0430. \u041c\u0435\u0434\u0438\u0430\u043d\u0430 \u043f\u043e 20 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c.\u0422\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0438 \u0437\u0430\u043f\u0438\u0441\u044c\u044e:\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0427\u0442\u0435\u043d\u0438\u0435, \u043d\u0441\u0417\u0430\u043f\u0438\u0441\u044c, \u043d\u0441\u0421\u0447\u0435\u0442\u0447\u0438\u043a, \u043d\u0441\u0421\u0447\u0435\u0442\u0447\u0438\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e MutexMutex1,851,851,861,0\u00d7OSAllocatedUnfairLock1,861,861,861,0\u00d7os_unfair_lock1,861,861,851,0\u00d7pthread_mutex4,594,604,622,5\u00d7NSLock6,366,366,363,4\u00d7OSAllocatedUnfairLock \u0441 .adaptiveSpin8,488,228,494,6\u00d7Atomic0,270,271,881,0\u00d7actor62,6462,0362,7734\u00d7Serial DispatchQueue199,42107,4788,2348\u00d7\u0412\u0441\u0435 20 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432\u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0427\u0442\u0435\u043d\u0438\u0435, \u043d\u0441\u0417\u0430\u043f\u0438\u0441\u044c, \u043d\u0441\u0421\u0447\u0435\u0442\u0447\u0438\u043a, \u043d\u0441Mutex1,851,851,86OSAllocatedUnfairLock1,861,861,86os_unfair_lock1,861,861,85DispatchSemaphore3,723,723,74pthread_mutex4,594,604,62pthread_rwlock6,146,076,00NSLock6,366,366,36OSAllocatedUnfairLock \u0441 .adaptiveSpin8,488,228,49objc_sync_enter \/ objc_sync_exit10,8810,8710,87NSRecursiveLock12,7212,7212,72Atomic, acquiring\/releasing0,2650,2651,88Atomic, relaxed0,2650,2651,88ManagedAtomic, acquiring\/releasing0,7950,7951,86ManagedAtomic, relaxed0,7950,7951,88actor62,6462,0362,77@MainActor \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u04385 7705 7695 731Serial DispatchQueue199,42107,4788,23Concurrent queue, \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 sync(flags: .barrier)204,76210,56209,61Concurrent queue, \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 async(flags: .barrier)204,94115,66110,42\u0411\u0435\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u04380,2650,2650,83\u0421\u0442\u0440\u043e\u043a\u0430 \u00ab\u0411\u0435\u0437 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438\u00bb \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u0430\u043c \u0446\u0438\u043a\u043b \u0441 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u043a \u043f\u0430\u043c\u044f\u0442\u0438. \u041e\u043d\u0430 \u0438\u0437\u043c\u0435\u0440\u044f\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0438 \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0414\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0447\u0435\u0440\u0435\u0437 async(flags: .barrier) \u0432 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0445\u043e\u0434\u0438\u0442 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435, \u043f\u043e\u043a\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 \u0432\u0441\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041a @MainActor \u044f \u0432\u0435\u0440\u043d\u0443\u0441\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e actors.Mutex, OSAllocatedUnfairLock \u0438 os_unfair_lock \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0423 \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u0445 \u043e\u043a\u043e\u043b\u043e 1,86 \u043d\u0441 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0437\u043d\u0430\u043a\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u042d\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e: \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445 Apple Mutex \u0438 OSAllocatedUnfairLock \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 &#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-502776","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/502776","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=502776"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/502776\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=502776"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=502776"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=502776"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}