Reactivecocoa: ์›์ž : SPINLOCK์€ iOS์—์„œ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2015๋…„ 12์›” 15์ผ  ยท  20์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ReactiveCocoa/ReactiveCocoa

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

๋Œ“๊ธ€์€ ์ž์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค (iOS์—์„œ ๋ถˆ๋ฒ•์ด๋ผ๋ฉด ์™œ ๊ณต๊ฐœ API์ธ๊ฐ€ ???)

๋ถ„๋ช…ํžˆ pthread ๋ฎคํ…์Šค๋Š” ์ด์ œ ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค . ๋น„๊ตํ•  ๋ฒค์น˜ ๋งˆํฌ๋ฅผ ๋งŒ๋“ค๊ณ  Atomic ๋ฅผ์ด ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค ( RACCompoundDisposable ๋ฐ RACSerialDisposable ?).

help wanted

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์˜ค๋Š˜์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋™๊ธฐํ™”๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋ฐ ์‹ค์ œ ์žฅ์น˜์—์„œ ๋ฒค์น˜ ๋งˆํฌ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ๋Š” ์ €์—๊ฒŒ ๋งค์šฐ ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค. iOS 10์—์„œ๋Š” dispatch_semaphore์˜ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ˆˆ์— ๋„๊ฒŒ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์•„๋งˆ๋„ ์Šค๋ ˆ๋“œ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๊ทธ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ์€ iOS์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋ณธ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ์š”์•ฝ ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋Š” ๋ฆด๋ฆฌ์Šค ๊ตฌ์„ฑ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค (Swift ์ตœ์ ํ™” -O).

2016-06-29 17 58 39

SDK9 ์šฉ ๋ฒค์น˜ ๋งˆํฌ ์ฝ”๋“œ
SDK10 ์šฉ ๋ฒค์น˜ ๋งˆํฌ ์ฝ”๋“œ

๋ชจ๋“  20 ๋Œ“๊ธ€

"๋ถˆ๋ฒ•"์ด ๋ฌด์Šจ ๋œป์ธ์ง€์กฐ์ฐจ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

nope

์ฒ˜์Œ๋ถ€ํ„ฐ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ Atomic ์œ ํ˜•์ด ์ฒ˜์Œ๋ถ€ํ„ฐ OSSpinLock ์‚ฌ์šฉ ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

NSLock ์‚ฌ์šฉํ•œ ๋‹ค์Œ ๋„ˆ๋ฌด ๋Š๋ฆฐ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€ ๋‚ฌ์œผ๋ฉฐ, pthread_mutex_t ๋„ ํ…Œ์ŠคํŠธ ํ•œ ๊ฒฐ๊ณผ ๋„ˆ๋ฌด ๋Š๋ฆฐ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€ ๋‚ฌ์Šต๋‹ˆ๊นŒ? ๋ถˆํ–‰ํžˆ๋„ git์—๋Š” "์†Œ์Šค ์ด๋™โ€ฆ"์ด์ „์— ๊ธฐ๋ก์ด ์—†์Šต๋‹ˆ๋‹ค.

Spinlocks๋Š” ์ปค๋„์ด ์•„๋‹Œ ์žฅ์น˜ ๋“œ๋ผ์ด๋ฒ„ ์ปจํ…์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ๋ฌป๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ์—ฌ๊ธฐ์„œ ๋ฒ„๊ทธ๋Š” OSSpinLock ๊ฐ€ ์ „ํ˜€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. : stuck_out_tongue :

์œ„์˜ ์˜๊ฒฌ์— ๋Œ€์œ„๋ฒ•์„ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์ œ๋ชฉ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค ์ˆ˜์žˆ๋Š” ๊ฒƒ๋งŒ ํผ ํฐ ๋ฌธ์ œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. https://twitter.com/Catfish_Man/status/676854531615883265

CPU ๊ณ ๊ฐˆ ์ƒํƒœ์—์„œ๋„ ์ค‘์š” ์„น์…˜์ด ๋„ˆ๋ฌด ์ž‘์•„ ์‹ค์ œ ์ƒํ™ฉ์—์„œ ๊ดœ์ฐฎ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.
โ€” @Catfish_Man ํŠธ์œ„ํ„ฐ

@kastiglione์˜ ์œ„์˜ ์˜๊ฒฌ์€

"๋ถˆ๋ฒ•"์ด ๋ฌด์Šจ ๋œป์ธ์ง€์กฐ์ฐจ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹ต์€ ์—†์ง€๋งŒ ARM CPU์˜ ์–ด๋–ค ๊ฒƒ์ด ์Šคํ•€ ๋ฝ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๊ฐ€ Intel CPU์—์„œ์™€ ๊ฐ™์€ ๋งŽ์€ ์ด์  / ๋ณด์ฆ / ๊ฐ€์ •์„ ์ฆ๊ธธ ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (๊ทธ๋Ÿฌ๋‚˜ https://twitter.com/Catfish_Man/status/676851988596809728์— ๋”ฐ๋ฅด๋ฉด ๋ชจ๋‘๋Š” ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

์–ด์จŒ๋“ , ์‹ค์ œ๋กœ๋Š” "์—ฌ๊ธฐ์—์„œ ๋ณผ ์ˆ˜์žˆ๋Š” ๊ฒƒ์ด ์—†์Œ"์ด์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฉฐ ๋Œ€์‹  @NachoSoto๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋” ์•ˆ์ „ํ•œ ๊ธฐ๋ณธ ํ˜•์‹์œผ๋กœ ๋Œ€์ฒดํ•˜๊ณ  ์„ฑ๋Šฅ ํšŒ๊ท€๋ฅผ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์กฐ์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ OSSpinLock ์˜ ์‚ฌ์šฉ์„ ๋Œ€์ฒดํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ๊ทธ๊ฒƒ๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ์šฐ๋ฆฌ / ๋‚ด ์ด์œ ๋Š” ํƒ€๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๊ด€๋ จ ์—ญ์‚ฌ ์ปค๋ฐ‹์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ํŒŒ์ผ์— ๋Œ€ํ•œ ๊ธฐ๋ก์ด ์š”์ฒญ ๋  ๋•Œ GitHub๊ฐ€ git log --follow ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ๋‚˜๋Š” "์•„๋งˆ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™๋‹ค"๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณต ํ•  ๊ฒƒ์ด๋‹ค. "์ด์ œ ๋” ๋นจ๋ผ์ง„"๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋งˆ๋„ ๊ฐ„๋‹จํ•œ ์ž‘์—… ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœํŒŒ์ผ ๋ง / ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๋ฉด ๋œ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์ œ์•ˆ / ํฌ์ธํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์„ฑ๋Šฅ์ด ๋ฌธ์ œ๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ / ์–ธ์ œ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ๋ฐฉ๋ฒ•์€ ์ž ๊ธˆ์—†๋Š” ๋Œ€๊ธฐ์—ด์„ ์กฐ์‚ฌ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (๋‹ค์Œ์€ ๊ฐœ๋…์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๋…์ž๋ฅผ์œ„ํ•œ ๊ฝค ์ข‹์€ ๊ธฐ์‚ฌ์ž…๋‹ˆ๋‹ค : http://www.linuxjournal.com/content/lock-free-multi-producer-multi-consumer-queue-ring-buffer?page=0,0). ์–ผ๋งˆ ์ „์— ๋‚ด๋ถ€ ์˜ค๋””์˜ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์œ„ํ•ด ๋น„์Šทํ•œ ๊ฒƒ์„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์ด์™€ ๊ฐ™์ด ์ผ๋ฐ˜์ ์ธ ์šฉ๋„๋กœ ์ ์šฉ ํ•  ์ˆ˜์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

"์ด์ œ ๋” ๋นจ๋ผ์ง„"๋ฎคํ…์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋งˆ๋„ ๊ฐ„๋‹จํ•œ ์ž‘์—… ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœํŒŒ์ผ ๋ง / ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๋ฉด ๋œ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์— ์ œ์•ˆ / ํฌ์ธํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ €๋Š” Instruments์˜ Time Profiler ๋ฐ Allocations์—์„œ GitHub Desktop์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๊ณ  RAC๊ฐ€ ๋งŽ์€ ์Šคํƒ์— ์ง‘์ค‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ @joshaber ๋˜๋Š” @mdiep ์—๊ฒŒ

์•Œ์•„๋‘๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. Swift ์ธก์˜ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ๋น„์Šทํ•˜๊ฒŒ ํฌ๊ณ  ๊นŠ์€ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๋‚œ ๋ช‡ ๋‹ฌ 1 ์ด์ƒ ๋‚ด ์ž์‹ ์˜ ์ผ๋ถ€๋ฅผ ์„ฑ์žฅํ•˜์ง€๋งŒ ๋‚œ ๊ทธ๊ฒƒ์˜ ์ถฉ๋ถ„ํ•œ ์ƒ˜ํ”Œ์„ ์–ป๊ธฐ ์œ„ํ•ด ๋‚ด๊ฐ€ RAC "์—ด์‹ฌํžˆ"๋ฅผ ๋ฐ€์–ด ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋งŽ์€ ๊ฒƒ๋“ค์ด ๋‚ด ์•ฑ๊ณผ ๊ฐ™์€ ์ธ์ŠคํŠธ๋ฃจ๋จผํŠธ ์ฐจํŠธ์— ๋ฒ„๋ธ” ๋ง๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. :๋ฏธ์†Œ:

1 ํ”Œ๋Ÿฌ๊ทธ! http://capoapp.com , http://capoapp.com/neptune ์€ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์™„์ „ํžˆ ์„ค๊ณ„๋œ RAC4 ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ์˜ค๋Š˜ iOS์—์„œ ์Šคํ•€ ๋ฝ์ด "๋ถˆ๋ฒ•"์ธ ์ด์œ ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. http://engineering.postmates.com/Spinlocks-Considered-Harmful-On-iOS/

๋‚˜๋Š” ์กฐ๊ธˆ ์ „์— Atomic์„ ์ค‘๋‹จํ•˜๊ณ  pthread_mutex_lock์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ณ„์ •์—์„œ ๊ฐ€์žฅ ์ข‹์€ ์ž ๊ธˆ ์žฅ์น˜์ž…๋‹ˆ๋‹ค. NSLock๊ณผ ๊ฐ™์€ ๋™์  ๋””์ŠคํŒจ์น˜๊ฐ€ ์—†์œผ๋ฉฐ, ์Šคํ•€ ์ž ๊ธˆ์ฒ˜๋Ÿผ ๊ฒฝ์Ÿํ•˜์ง€ ์•Š์œผ๋ฉด ์ธ์Šคํ„ดํŠธ ์ž ๊ธˆ์ด ์Šคํ•€ ์ž ๊ธˆ๊ณผ ๋‹ฌ๋ฆฌ ์—๋„ˆ์ง€๋ฅผ ๋‚ญ๋น„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ์ €์žฅ์†Œ์—์„œ ์†Œ์Šค๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ ๋„ฃ๊ฑฐ๋‚˜ ์›ํ•˜๋Š”๋Œ€๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

@kballard ์ข‹์€ ์„ค๋ช…์ž…๋‹ˆ๋‹ค, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ•ํ•œ ์˜๊ฒฌ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ž ๊ธˆ ์œ ํ˜•์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ฏธ๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์€ ๋ฒค์น˜ ๋งˆํฌ๋Š” ์†Œ์Šค ์—†์ด๋Š” ์™„์ „ํžˆ ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”์šฑ์ด ์‹œ๊ฐ„์ด ์‹ค์ œ๋กœ ๋ฌด์—‡์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ ๋ฌธ์„œํ™”ํ•˜์ง€ ์•Š๊ณ  ๊ฐ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ๋งŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ์€ ๊ฒฝํ•ฉ ์ค‘์ธ์ง€ ์—ฌ๋ถ€, ์ž ๊ธˆ์— ๋Œ€ํ•ด ๊ฒฝํ•ฉํ•˜๋Š” ์Šค๋ ˆ๋“œ์˜ ์šฐ์„  ์ˆœ์œ„ ๋“ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. @synchronized ๋„ ํฅ๋ฏธ๋กœ์šด ์ง์Šน์ด๋ฉฐ ์„ฑ๋Šฅ์€ ์•ก์„ธ์Šค ํŒจํ„ด์— ํฌ๊ฒŒ ์ขŒ์šฐ๋ฉ๋‹ˆ๋‹ค. , ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž  ๊ทธ๊ฑฐ๋‚˜ ์ƒˆ ๊ฐ์ฒด๋ฅผ ์ž ๊ทธ๋Š” ์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋™์‹œ์— ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” @synchronized ๋ธ”๋ก ์ˆ˜ ๋“ฑ

์ฃผ์˜ : dispatch_semaphore ๋Š” ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ธฐ๋ถ€ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ด๋Š” ๋˜ ๋‹ค๋ฅธ ์ž ์žฌ์  ํ•จ์ •์ž…๋‹ˆ๋‹ค.

@jspahrsummers @kballard ์›์ž CAS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ์ด ์žˆ์œผ์‹œ๋ฉด PR์„ ์ œ์ถœํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : Atomic ์‚ฌ์šฉ์„ ๋ณด๋ฉด ๋‚ด ๊ตฌํ˜„์ด ์œ ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฉฑ ๋“ฑ์„ฑ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด CAS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ผ์ข…์˜ ๋‚™๊ด€์  ํŠธ๋žœ์žญ์…˜์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ํŠธ๋žœ์žญ์…˜์€ ํ›Œ๋ฅญ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ๋‹นํ•œ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค (๋ชจ๋“  ๊ฒƒ์ด CoW ๋ถˆ๋ณ€์ด๋ฉด ์ •๋ง ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ๋Œ์—ฐ๋ณ€์ด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ํŠธ๋žœ์žญ์…˜).

์˜ค๋Š˜์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋™๊ธฐํ™”๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋ฐ ์‹ค์ œ ์žฅ์น˜์—์„œ ๋ฒค์น˜ ๋งˆํฌ๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ๋Š” ์ €์—๊ฒŒ ๋งค์šฐ ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค. iOS 10์—์„œ๋Š” dispatch_semaphore์˜ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ˆˆ์— ๋„๊ฒŒ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์•„๋งˆ๋„ ์Šค๋ ˆ๋“œ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๊ทธ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ์€ iOS์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋ณธ ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์˜ ์š”์•ฝ ๋‹ค์ด์–ด๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋Š” ๋ฆด๋ฆฌ์Šค ๊ตฌ์„ฑ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค (Swift ์ตœ์ ํ™” -O).

2016-06-29 17 58 39

SDK9 ์šฉ ๋ฒค์น˜ ๋งˆํฌ ์ฝ”๋“œ
SDK10 ์šฉ ๋ฒค์น˜ ๋งˆํฌ ์ฝ”๋“œ

๋‹น์‹ ์˜ ์ˆซ์ž๋Š” ๋‚˜์—๊ฒŒ ๋งค์šฐ ์˜์‹ฌ์Šค๋Ÿฌ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ๋ช‡ ๋ฒˆ ์‹คํ–‰ ํ–ˆ์Šต๋‹ˆ๊นŒ?

๋น„๊ต๋ฅผ ์œ„ํ•ด ์–ผ๋งˆ ์ „์— ์ž‘์„ฑํ•œ ํ•ดํ‚ค ๋ฒค์น˜ ๋งˆํฌ ํ•˜๋„ค์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ OS X 10.11.5์—์„œ ์ž์ฒด ๋ฒค์น˜ ๋งˆํฌ ( source )๋ฅผ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๋ฒค์น˜ ๋งˆํฌ๋ฅผ 10 ๋ฒˆ ์‹คํ–‰ํ•˜๊ณ  ๊ฐ ํ…Œ์ŠคํŠธ์—์„œ ์ƒ์œ„ 2 ๊ฐœ ์ˆซ์ž๋ฅผ ์‚ญ์ œํ•˜๊ณ  (์ด์ƒ ์น˜๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด) ๋‚˜๋จธ์ง€ ์ˆซ์ž๋Š” ๋‹ค์Œ ๋ฒ”์œ„๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๋™๊ธฐํ™” ์—†์Œ : 22-41ns
์Šคํ•€ ๋ฝ : 24ns
์„ธ๋งˆํฌ์–ด : 29ns
NSLock : 45-71ns
๋ฎคํ…์Šค : 40-64ns
๋™๊ธฐํ™” : 75-122ns
๋Œ€๊ธฐ์—ด : 505-554ns

์—ฌ๊ธฐ์—์„œ spinlock์ด ํ›จ์”ฌ ์ €๋ ดํ•˜๊ณ  ์„ธ๋งˆํฌ์–ด, ๋ฎคํ…์Šค, NSLock์ด ๋ฎคํ…์Šค (๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฎคํ…์Šค + objc_msgSend์ด๊ธฐ ๋•Œ๋ฌธ์—)๋ณด๋‹ค ์•ฝ๊ฐ„ ๋’ค์ณ์ง€๊ณ  ๋™๊ธฐํ™”๊ฐ€ ๊ฑฐ์˜ ๋‘ ๋ฐฐ๋‚˜ ๋น„์‹ธ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ๋Œ€๊ธฐ์—ด์ด ๊ทน๋„๋กœ ๋น„์‹ธ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์˜ˆ์ƒํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋น„์‹ธ๋‹ค.

@kballard ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋‚ด ๋ฒค์น˜ ๋งˆํฌ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ xctest ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž๋Š” ๊ฐ ๋™๊ธฐํ™”๊ฐ€ ์•„๋‹Œ ๊ฐ ํ…Œ์ŠคํŠธ์˜ ํ‰๊ท  ์‹คํ–‰ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹น์‹ ๊ณผ ๋‚˜์˜ ๊ฒฐ๊ณผ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜์ง€ ์•Š์€ ๋Œ€๊ธฐ์—ด์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ƒ๊ด€ ๊ด€๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์›์ธ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰