Reactivecocoa: рдкрд░рдорд╛рдгреБ: SPINLOCK iOS рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рджрд┐рд╕ре░ 2015  ┬╖  20рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: ReactiveCocoa/ReactiveCocoa

https://twitter.com/steipete/status/676851647042203648

рдореИрдВ рдХреЛрдИ рднреА рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рд╕реЗ рдмрдЪреВрдВрдЧрд╛ (рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдХрд╣реВрдВрдЧрд╛ ... рдЕрдЧрд░ рдпрд╣ рдЖрдИрдУрдПрд╕ рдкрд░ рдЕрд╡реИрдз рд╣реИ, рддреЛ рдпрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреНрдпреЛрдВ рд╣реИ)

рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ pthread рдореНрдпреВрдЯреЗрдХреНрд╕ рдЕрдм рддреЗрдЬ рд╣реИрдВ ред рд╣рдореЗрдВ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ Atomic рдХреЛ рдЗрд╕ (рднреА RACCompoundDisposable рдФрд░ RACSerialDisposable ) рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореБрдЭреЗ рдЖрдЬ рдЗрд╕ рдзрд╛рдЧреЗ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛, рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХреА рдФрд░ рдЖрдИрдУрдПрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ред
рдореЗрд░реЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред IOS 10 рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рд╕реНрдкреИрдЪ_рд╕рдореЗрдлреЛрд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ рд╣реИ, рдЬреЛ рд╕рдВрднрд╡рддрдГ рдереНрд░реЗрдб рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рдореНрдорд╛рди рдХреЗ рд╕рд╛рде рдЙрд╕рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣рд╛рдБ iOS рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдмреБрдирд┐рдпрд╛рджреА рддреБрд▓реНрдпрдХрд╛рд▓рди рддрдВрддреНрд░ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдЪрд┐рддреНрд░ рд╣реИред рд╕рднреА рдкрд░реАрдХреНрд╖рдг рд░рд┐рд▓реАрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рд╕реНрд╡рд┐рдлреНрдЯ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди -рдУ) рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВ

2016-06-29 17 58 39

рдПрд╕рдбреАрдХреЗ 9 рдХреЗ рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛрдб
SDK10 рдХреЗ рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛрдб

рд╕рднреА 20 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдЕрд╡реИрдз" рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред

nope

рдореИрдВ рдЕрднреА рдЙрддреНрд╕реБрдХ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА рдЖрд╕-рдкрд╛рд╕ рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди OSSpinLock рдЙрдкрдпреЛрдЧ Atomic рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдерд╛?

рдХреНрдпрд╛ NSLock рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдлрд┐рд░ рдмрд╣реБрдд рдзреАрдорд╛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрдм pthread_mutex_t рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╕рд╛рде рд╣реА рдмрд╣реБрдд рдзреАрдорд╛ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ git рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ "рдЪрд╛рд▓ рд╕реНрд░реЛрддреЛрдВ ..." рд╕реЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рд╣реИ

рд╕реНрдкрд┐рдирд▓реЙрдХ рдПрдХ рдРрд╕реА рдЪреАрдЬ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдЧреИрд░-рдХрд░реНрдиреЗрд▓, рдЧреИрд░-рдбрд┐рд╡рд╛рдЗрд╕-рдбреНрд░рд╛рдЗрд╡рд░ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЛрдЪреВрдВрдЧрд╛, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВред рдЕрдЧрд░ рдХреБрдЫ рднреА рд╣реЛ, рддреЛ рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣рд╛рдБ рдмрдЧ OSSpinLock рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред :

рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдЙрдВрдЯрд░-рдкреЙрдЗрдВрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЙрддрдирд╛ рдмрдбрд╝рд╛ рд╕реМрджрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рд╢реАрд░реНрд╖рдХ рдЗрд╕реЗ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ: https://twitter.com/Catfish_Man/status/676854531615883265

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реАрдкреАрдпреВ рднреБрдЦрдорд░реА рдХреЗ рддрд╣рдд рдХрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрдВрдб рдЗрддрдирд╛ рдЫреЛрдЯрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рдареАрдХ рд╣реИред
- @Catfish_Man рдЯреНрд╡рд┐рдЯрд░ рдкрд░

@Kastiglione рд╕реЗ рдКрдкрд░ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП:

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ "рдЕрд╡реИрдз" рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдЖрд░рдПрдо рд╕реАрдкреАрдпреВ рдореЗрдВ рдХреБрдЫ рднреА рд╕реНрдкрд┐рдиреЙрдХ рдЖрджрд┐рдо рдХреЛ рд╕рдорд╛рди рд▓рд╛рдн / рдЧрд╛рд░рдВрдЯреА / рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрдВрдЯреЗрд▓ рд╕реАрдкреАрдпреВ рдкрд░ рд╣реЛрддрд╛ рд╣реИред (рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рдЙрди рд╕рднреА рдХреЗ рдЕрдиреБрд╕рд╛рд░, https://twitter.com/Catfish_Man/status/676851988596809728 рдХреЗ рдЕрдиреБрд╕рд╛рд░)

рд╡реИрд╕реЗ рднреА, рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ "рдпрд╣рд╛рдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ" рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреБрдЫ рдЬрд╛рдВрдЪ рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдкреНрд░рддрд┐рдЧрдорди рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рдЖрджрд┐рдо рдФрд░ рдорд╛рдк рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ @NachoSoto рдХрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИред

Https://twitter.com/jspahrsummers/status/679245419931660288 рджреЗрдЦреЗрдВ рдФрд░ рдЕрдиреБрд╡рд░реНрддреА https://github.com/ReactiveCocoa/ReactiveCocoa/pull/278 рд╕рд╣рд┐рдд

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ OSSpinLock рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рддрд░реНрдХ рдХреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╣рд╛рдБ, рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЗрддрд┐рд╣рд╛рд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрдм рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ GitHub git log --follow рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рджрд░ рдкрд░, рдореИрдВ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛ рдХрд┐ "рдпрд╣ рд╢рд╛рдпрдж рдареАрдХ рд╣реИред" "рдЕрдм рддреЗрдЬрд╝" рдореНрдпреВрдЯреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡рддрдГ рдПрдХ рд╕реАрдзрд╛ рдХрд╛рдо рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХрд┐ рдЖрдкрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдкрд░рдЦрд╛ / рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдХрдо рд╣реИред рдХреЛрдИ рд╕реБрдЭрд╛рд╡ / рд╕рдВрдХреЗрдд рдорд┐рд▓реЗ?

рдЖрдЧреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд░ / рдЬрдм рдкреНрд░рджрд░реНрд╢рди рдПрдХ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рдмрди рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рддрд╛рд▓рд╛-рдореБрдХреНрдд рдХрддрд╛рд░реЗрдВ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд╛рдпрдХ рд╣реИрдВред (рдпрд╣рд╛рдБ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдЕрдкрд░рд┐рдЪрд┐рдд рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИ: http://www.linuxjournal.com/content/lock-free-multi-producer-multi-consumer-queue-ring-buffer?page=0,0)ред рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдСрдбрд┐рдпреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред

"рдЕрдм рддреЗрдЬрд╝" рдореНрдпреВрдЯреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡рддрдГ рдПрдХ рд╕реАрдзрд╛ рдХрд╛рдо рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХрд┐ рдЖрдкрдиреЗ рдЙрдиреНрд╣реЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдкрд░рдЦрд╛ / рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рдХрдо рд╣реИред рдХреЛрдИ рд╕реБрдЭрд╛рд╡ / рд╕рдВрдХреЗрдд рдорд┐рд▓реЗ?

рдореИрдВ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреНрд╕ рдЯрд╛рдЗрдо рдкреНрд░реЛрдЗрд▓рд░ рдФрд░ рдПрд▓реЛрдХреЗрд╢рди рдореЗрдВ GitHub рдбреЗрд╕реНрдХрдЯреЙрдк рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛, рдФрд░ RAC- рднрд╛рд░реА рд╕реНрдЯреИрдХ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ @joshaber рдпрд╛ @mdiep рд╕реЗ рдмрд╛рдд рдХрд░рдиреА рд╣реЛрдЧреАред :рдЖрдБрдЦ рдорд╛рд░рдирд╛:

рдареАрдХ рд╣реИ, рдЬрд╛рдирдХрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрд╡рд┐рдлреНрдЯ-рд╕рд╛рдЗрдб рд╕рд╛рдорд╛рди рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдмрдбрд╝реЗ / рдЧрд╣рд░реЗ рдХреЛрдб рдмреЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореИрдВ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рдорд╣реАрдиреЛрдВ 1 рдкрд░ рдореЗрд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреБрдЫ рдмрдбрд╝реЗ рд╣реЛ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд╕реЗ рдмрд╛рд╣рд░ рдкрд░реНрдпрд╛рдкреНрдд рдирдореВрдиреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдореИрдВ рдЖрд░рдПрд╕реА "рдХрдард┐рди рдкрд░реНрдпрд╛рдкреНрдд" рдзрдХреНрдХрд╛ рдпрд╛ рдирд╣реАрдВред рдЕрдиреНрдп рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рдореЗрд░рд╛ рдЬреИрд╕реЗ рдПрдкреНрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреНрд╕ рдЪрд╛рд░реНрдЯ рдореЗрдВ рдмрдмрд▓ рдмрдирд╛рддреА рд╣реИрдВред :рдореБрд╕реНрдХреБрд░рд╛рдУ:

1 рдкреНрд▓рдЧ! http://capoapp.com , http://capoapp.com/neptune рд╕рдмрд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди-рдЙрдкрдпреЛрдЧ-рдЖрд░рдПрд╕реА 4 рдШрдЯрдХ рд╣реИред

рдореИрдВрдиреЗ рдЖрдЬ рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ iOS рдкрд░ рд╕реНрдкрд┐рдирд▓реЙрдХ "рдЕрд╡реИрдз" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ: http://engineering.postmates.com/Spinlocks-Considered-Harmful-On-iOS/

рдореИрдВрдиреЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдкрд░рдорд╛рдгреБ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ pthread_mutex_lock рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рд╕рднреА рдЦрд╛рддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓реЙрдХ рд╣реИ - NSLock рдЬреИрд╕реЗ рдХреЛрдИ рдбрд╛рдпрдиреЗрдорд┐рдХ рдбрд┐рд╕реНрдкреИрдЪ, рддрддреНрдХрд╛рд▓ рд▓реЙрдХ рдирд╣реАрдВ рддреЛ рд╕реНрдкрд┐рдирд▓реЙрдХ рдХреА рддрд░рд╣ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рд╕реНрдкрд┐рди рд▓реЙрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд рдКрд░реНрдЬрд╛ рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдореЗрд░реЗ рд░реЗрдкреЛ рд╕реЗ рд╕реНрд░реЛрдд рдХреЛ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ рдпрд╛ рдЬреЛ рднреА рдЖрдкрдХреЛ рдкрд╕рдВрдж рд╣реЛ рд╡рд╣ рдХрд░реЗрдВред

https://github.com/Adlai-Holler/Atomic
https://github.com/Adlai-Holler/Atomic/blob/master/Atomic/Atomic.ift

@kballard рдпрд╣ рдПрдХ рдорд╣рд╛рди рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рдордЬрдмреВрдд рд░рд╛рдп рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВред рдореИрдВ рджреВрд╕рд░реЛрдВ рдХреЛ рдмрджрд▓рдиреЗ (рдпрд╛ рдирд╣реАрдВ рдмрджрд▓рдиреЗ) рдХреЗ рдирд┐рд░реНрдгрдп рдХреЛ рдЯрд╛рд▓ рджреВрдВрдЧрд╛, рд╣рдо рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓реЙрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдЦреБрдж рдХреЛ рдмрджрд▓рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА!

рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрд░реЛрдд рдХреЗ рдмрд┐рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реИред рдХреНрдпрд╛ рдЕрдзрд┐рдХ рд╣реИ, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рдордп рджрд┐рдЦрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕ рд╕рдордп рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рдмрд┐рдирд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрдорд╛рдг рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рд╡рд┐рд╡рд╛рдж рдХреЗ рдЕрдзреАрди рд╣реИрдВ, рдзрд╛рдЧреЗ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдВ рдЬреЛ рддрд╛рд▓рд╛ рдкрд░ рдЪрд▓ рд░рд╣реА рд╣реИрдВ, рдЖрджрд┐ @synchronized рднреА рдПрдХ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдЬрд╛рдирд╡рд░ рд╣реИ, рдЗрд╕рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдПрдХреНрд╕реЗрд╕ рдкреИрдЯрд░реНрди рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛ , рдЬреИрд╕реЗ рдХрд┐ рдХрд┐рддрдиреЗ @synchronized рдмреНрд▓реЙрдХ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджрд░реНрдЬ / рдмрд╛рд╣рд░ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рдЖрдк рдПрдХ рд╣реА рд╡рд╕реНрддреБ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рд▓реЙрдХ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рдпрд╛ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓реЙрдХ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рдЖрджрд┐ред

рдПрдирдмреА: dispatch_semaphore рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рдЬреЛ рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдиреБрдХрд╕рд╛рди рд╣реИред

@jspahrsummers @kballard рдореЗрд░реЗ рдкрд╛рд╕ рдкрд░рдорд╛рдгреБ рдХреИрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдЕрдЧрд░ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ рддреЛ рдореБрдЭреЗ рдкреАрдЖрд░ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

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

рдореБрдЭреЗ рдЖрдЬ рдЗрд╕ рдзрд╛рдЧреЗ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛, рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХреА рдФрд░ рдЖрдИрдУрдПрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдПрдХ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ред
рдореЗрд░реЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред IOS 10 рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбрд┐рд╕реНрдкреИрдЪ_рд╕рдореЗрдлреЛрд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ рд╣реИ, рдЬреЛ рд╕рдВрднрд╡рддрдГ рдереНрд░реЗрдб рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕рдореНрдорд╛рди рдХреЗ рд╕рд╛рде рдЙрд╕рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣рд╛рдБ iOS рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдмреБрдирд┐рдпрд╛рджреА рддреБрд▓реНрдпрдХрд╛рд▓рди рддрдВрддреНрд░ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдЪрд┐рддреНрд░ рд╣реИред рд╕рднреА рдкрд░реАрдХреНрд╖рдг рд░рд┐рд▓реАрдЬрд╝ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рд╕реНрд╡рд┐рдлреНрдЯ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди -рдУ) рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВ

2016-06-29 17 58 39

рдПрд╕рдбреАрдХреЗ 9 рдХреЗ рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛрдб
SDK10 рдХреЗ рд▓рд┐рдП рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛрдб

рдЖрдкрдХреЗ рдирдВрдмрд░ рдореБрдЭреЗ рдмрд╣реБрдд рд╕рдВрджрд┐рдЧреНрдз рд▓рдЧрддреЗ рд╣реИрдВред рдЖрдкрдиреЗ рдХрд┐рддрдиреА рдмрд╛рд░ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдП?

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

рдХреЛрдИ рд╕рд┐рдВрдХ рдирд╣реАрдВ: 22-41ns
spinlock: 24ns
рд╕реЗрдорд╛рдлреЛрд░: 29 рдирдВ
NSLock: 45-71ns
рдореНрдпреВрдЯреЗрдХреНрд╕: 40-64ns
рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝: 75-122ns
рдХрддрд╛рд░: 505-554ns

рдЗрд╕рд╕реЗ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдкрд┐рдирд▓реЙрдХ рд╕рдмрд╕реЗ рд╕рд╕реНрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж рд╕реЗрдореАрдлреЛрд░, рдлрд┐рд░ рдореНрдпреВрдЯреЗрдХреНрд╕, рдлрд┐рд░ рдореНрдпреВрдЯреЗрдХреНрд╕ рд╕реЗ рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ NSLock (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ mutex + objc_msgSend рд╣реИ), рдлрд┐рд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рд▓рдЧрднрдЧ рджреЛ рдмрд╛рд░ рдорд╣рдВрдЧрд╛ рд╣реИ, рдФрд░ рдЕрдВрдд рдореЗрдВ рдХрддрд╛рд░реЗрдВ рдмреЗрд╣рдж рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣реА рд╣реИрдВ рдорд╣рдВрдЧрд╛, рдмрд╣реБрдд рдЕрдзрд┐рдХ-рддреЛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереАред

@ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореЗрд░рд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ xctest рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдирдВрдмрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдФрд╕рдд рд░рди рд╕рдордп рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдкрдХреЗ рдФрд░ рдореЗрд░реЗ рдкрд░рд┐рдгрд╛рдо рдХрддрд╛рд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рд╣рд╕рдВрдмрджреНрдз рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрддрдиреЗ рдмреБрд░реЗ рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рддрдирд╛ рд╣рдо рд╕реЛрдЪрддреЗ рдереЗ

рдХрд╛рд░рдгреЛрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Lewion picture Lewion  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

danishin picture danishin  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

akashivskyy picture akashivskyy  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

porridgec picture porridgec  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mdiep picture mdiep  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ