ðð»ââïžèªå·±èšºæè¡š
ææ¥ã®åŸã¯ã以äžã®æŠå¿µãæç¢ºã«ç¥ã£ãŠçè§£ããããšãã§ããŸãã
- ãã£ã¹ããããã¥ãŒã®æŠå¿µã«ã€ããŠæç¢ºã«çè§£ããŠããã (Yes/No)
- ãã£ã¹ããããã¥ãŒã®çš®é¡ãšãµãŒãã¹å質ïŒQosïŒã«ã€ããŠçè§£ããŠããã (Yes/No)
- ã»ãšãã©ã®å ŽåãSyncã¡ãœããã䜿çšããªãçç±ãç¥ã£ãŠãããå¿
ãSyncã¡ãœããã䜿çšããªããã°ãªããªãå Žåã«ã€ããŠéããçè§£ããŠããã (Yes/No)
- ãã£ã¹ãããã°ã«ãŒãã®æŠå¿µã«ã€ããŠç¥ã£ãŠããŸãã (Yes/No)
- ãã£ã¹ãããã°ã«ãŒãã§éåæé¢æ°ãæ±ããšãã«æ³šæãã¹ãç¹ã«ã€ããŠç¥ã£ãŠããŸãã (Yes/No)
- ãã£ã¹ãããã¯ãŒã¯ã¢ã€ãã ã®æŠå¿µãç¥ã£ãŠããŠããªã䜿ãã®ãåããã ïŒã¯ã/ãããïŒ
- ãã£ã¹ãããã»ããã©ïŒSemaphoreïŒã®æŠå¿µãç¥ã£ãŠãããã©ã®ããã«äœ¿çšãããç¥ã£ãŠããã (Yes/No)
- ãªããžã§ã¯ããèšèšãããšãã¯ãè€æ°ã®ã¹ã¬ãããã¢ã¯ã»ã¹ã§ããå¯èœæ§ã«æ³šæãã¹ãç¹ãæç¢ºã«çè§£ããæ£ãããªããžã§ã¯ããèšèšããããšãã§ããŸãã (Yes/No)
- ç»åãããŠã³ããŒãããããŒãã«ãã¥ãŒ/ã³ã¬ã¯ã·ã§ã³ãã¥ãŒã¿ã€ãã®ãããžã§ã¯ããäœæãããšããéåææŠå¿µãåŠçããããã«æ³šæãã¹ãç¹ãæç¢ºã«ç¥ã£ãŠããŸãã (Yes/No)
- ãã£ã¹ããããã¥ãŒã䜿çšãããšãã«çºçããå¯èœæ§ã®ããåé¡ïŒè€æ°ã®ã¹ã¬ãããããŒã¿ã«ã¢ã¯ã»ã¹ãããšãïŒãç¹ã«ç«¶äºç¶æ³ïŒRace ConditionïŒã«ã€ããŠæç¢ºã«çè§£ããŠããã TSanã®äœ¿çšæ³ïŒThread Sanitizer ToolïŒãç¥ã£ãŠããŸãã (Yes/No)
- Thread-safeããã³ãŒãã®æžãæ¹ã«ã€ããŠæç¢ºã«çè§£ããŠããã (Yes/No)
- ãã£ã¹ããããã¥ãŒã§æ¡åŒµããããªãã¬ãŒã·ã§ã³ã®æŠå¿µããããŠéãã«ã€ããŠç¥ã£ãŠããã (Yes/No)
- ã©ã®ãããªå Žåã«ãã£ã¹ããããã¥ãŒã§ã¯ãªããªãã¬ãŒã·ã§ã³ãã¥ãŒã䜿çšããå¿
èŠãããããåºå¥ããŠäœ¿çšã§ããŸãã (Yes/No)
- éåæé¢æ°ãæ±ãããšãã§ãããéåææäœïŒAsyncOperationïŒã®ã³ãŒãã«ã€ããŠçè§£ããŠããŸãã (Yes/No)
- ãªãã¬ãŒã·ã§ã³ã®äž»ãªæ©èœïŒäœæ¥ã®é åºèšå®ãåãæ¶ãïŒãèªç±èªåšã«äœ¿çšã§ããã (Yes/No)
ðè¬çŸ©ç®æ¬¡
ïŒå€§ããGCDãšOperationéšåã§æ§æãããŠããŸããGCDã«ã€ããŠããçè§£ããŠããŠããGCDã§çºå±ããæŠå¿µã§ããOperationïŒäœæ¥ã¯ã©ã¹ïŒã«ã€ããŠã¯äžæ
£ãã§ããã©ããªããã°ãè¬çŸ©ãããæç¢ºã§ç°¡åã«ãè¬çŸ©ã®äžåºŠã«ãã¹ãŠãçè§£ã§ããããã«æ§æããŸãããïŒ
ðŒïžçµµã®èª¬ææ¹æ³ã®äŸ
ïŒææ¥ã§äœ¿ãããæ§ã
ãªå³ãå³è¡šã®èª¬ææ¹åŒã®äŸã§ããïŒ
ðè¬çŸ©ã§æäŸãããè³æ
以äžã®æ§ã
ãªè³æãæäŸãããŠããŸãã
- GCDé¢é£ã®æŽçPDF - 287ç«
- Operationé¢é£ã¯ãªãŒã³ã¢ããPDF - 89ç«
- GCDé¢é£èª¬æã®ããã®ã³ãŒãïŒãã¬ã€ã°ã©ãŠã³ããã¡ã€ã«ïŒ - 19ããŒãžïŒãœãŒã¹ãã¡ã€ã«ãé€ãïŒ
- Operationé¢é£ã®èª¬æã®ããã®ã³ãŒãïŒãã¬ã€ã°ã©ãŠã³ããã¡ã€ã«ïŒ - 8ããŒãžïŒãœãŒã¹ãã¡ã€ã«ãé€ãïŒ
- iOSãããžã§ã¯ããã¡ã€ã«- 8å
- åèèšäºïŒ2åïŒã®è§£éæ¬
ïŒäžèšã®ãã©ã«ãå
ã®è³æã¯ãã¹ãŠæäŸãããŸããïŒ
ðè¬çŸ©ã®å¶äœã«åèè³æ
以äžã®è³æãåèã«ããŸããããå³ã®èª¬ææ¹åŒã¯ãã¹ãŠçŽæ¥èšèšããŸããã
- ãããªã¬ãã¹ã³( iOS Concurrency with GCD and Operations ) - ã¬ã€ãŠã§ã³ããŒãªãã(raywenderlich) https://www.raywenderlich.com/3648-ios-concurrency-with-gcd-and-operations
- æžç±( Concurrency by Tutorials ) -ã¬ã€ãŠã§ã³ããŒãªãã(raywenderlich) https://store.raywenderlich.com/products/concurrency-by-tutorials
- ã¢ãŒãã£ã¯ã«( Operation and OperationQueue Tutorial in Swift ) -ã¬ã€ãŠã§ã³ããŒãªãã(raywenderlich) https://www.raywenderlich.com/5293-operation-and-operationqueue-tutorial-in-swift
- ã¢ãŒãã£ã¯ã« ( The thread safety of lazy variables in Swift )
ðð»ââïžå·ã®å
容ãïŒè¬çŸ©è£œäœåèè³æïŒãšå€ãã®éãããããŸããïŒ
æ¬åœã«å€ãã®éãããããŸãã
äžèšã®åèè³æã ãã§åã«ç¿»èš³ã¬ãã«ã®è¬çŸ©ãäœæããããšãããããã®ãããªè¬çŸ©ãäŒç»ããªãã£ãã§ãããããããã®ãããã¯ã«ã€ããŠãå¹ççã§å¹æçãªèª¬æãçŽæ¥å³ãå³è¡šãªã©ãçŽæ¥å€æPPTã§äœæããå®éã®ã¹ã¬ãããã©ã®ããã«åäœããŠãããã«ã€ããŠã®çŽæçãªçè§£ãå©ããããã«æåã®èª¬ææ¹æ³ãéžã³ãŸãããäžèšã§ãç³ãäžããŸããããåèè³æã10å以äžãã€èŠãŠããã®å
容ããã¹ãŠæ±ããªããã説æã¯ã¯ããã«ç°¡åã§å€æ§ãªçµµã§çŽæçã«çè§£ã§ããããã«ããããšãç®æãè¬çŸ©ã§ãã
ãããŠããããã®çµµã®å
容ã¯ããã«ã¿ã€ã 2ã¶æä»¥äžã®æéãçµãŠçŽæ¥ãŸãšããå
容ãªã®ã§ã ïŒæµ·å€è³æãå«ãïŒã©ãã§ããã®ãããªæ¹æ³ã®èª¬æããã³ãã®ãããªè©³çްãªèª¬æã¯èŠãããªããšæããŸããããšãã°ãåèè³æïŒraywenderlichã®ãããªã¬ãã¹ã³ïŒã§ã¯ã1è¡ã§ãlazy varã«é¢ããŠããã®åé¡ãããå¯èœæ§ããããŸããããããŠæç€ºãããå
容ãããã°ãlazy varã«é¢é£ãããã¹ãŠã®åé¡ãèŠã€ããŠãç§ãçŽæ¥æŽçããçµµã§çŽæçãªçè§£ãå©ãã解決çãæç€ºããŠããŸãã
çµµïŒå€§ããªæ çµã¿ïŒãçè§£ãããšãã³ãŒãã¯éåžžã«ç°¡åã«æžãããšãã§ãããšãããã®ãããªåœé¡ã®äžã§ãã§ããã ãçµµãéããŠçè§£ããã³ãŒããæŽ»çšããŠãã©ã³ã¹ãç¶æããããšããã®ã§ãåèè³æãšã¯å€§ããªéãããããŸããåèè³æãšæ¯èŒããŠãã¯ããã«è©³çްã§ãçŽæçã§è±ããªè³æããããŠäžè²«æ§ã®ããç°¡åãªèª¬æãæç¢ºãªå·®å¥ç¹ã ãšèšããããšæããŸãã
ð æäŸãããã³ãŒãïŒcodeïŒé¢é£
ãããã®ãããã¯ã«é¢ããçè§£ãæ·±ããããã«ã³ãŒããã¡ã€ã«ãæäŸãããã¯ã©ã¹ã®å
容ãã«ããŒããŠããŸããæäŸãããŠããã³ãŒãã¯ãã©ã€ã»ã³ã¹ã蚱諟ããç¯å²å
ã§ãã»ãšãã©ã¬ã€ãŠã§ã³ããŒãªããïŒraywenderlichïŒã®GCDåç»è¬çŸ©ã§æäŸãããã³ãŒãã®å€ããæ¡çšããŠããïŒæ¡çšéšåã¯æç€ºãããŠããïŒãã©ã€ã»ã³ã¹ã蚱諟ãããªãéšåïŒã¬ã€ãŠã§ã³ããŒãªããæžç±ã§æäŸããã³ãŒãïŒã«ã€ããŠã¯ãã³ãŒããçŽæ¥æäŸããŠããã倧ããªæ çµã¿ç¢ºä¿ããããšããŸããã
ãŸããæäŸããã³ãŒãã®çè§£ãå©ããããã«é åºé
眮ãå€ãããã詳现ãªèª¬æã®ããã®ã³ãŒãã倿°è¿œå ããæ§ã
ãªäŸãšãšãã«æ¬ææ¥å
容ã®çè§£ãå©ããŠããŸãã
ð€ææ¥ã®äŸ¡æ Œèšå®é¢é£
åäžã®ããŒãã«ã€ããŠå°ãã¯é«ãäŸ¡æ Œã§æž¬å®ãããŠãããçãããããšããããŸãããæ¬åœã«å€ãã®å
容ã蟌ããããŠãããäŸ¡æ Œã«æ¯ã¹ãŠã¯ããã«é«ãæºè¶³æãåŸãããããšãç³ãäžããããšæããŸãããã®å
容ã説æããããã«çŽæ¥äœæããPDFè³æãGCDé¢é£287ç« ã Operationé¢é£89ç« ã§åèš376ããŒãžã®è³æãæäŸãããŸãã ïŒå®éãç§ãåç»è¬çŸ©å
ã§èª¬æããããã®è³æã¯ãã³ãŒãé€å€PPT 830æçšåºŠã§æ§æãããŠããŸããïŒ
GCD/Operation ã«é¢ããŠæµ·å€è³æã§èŠã€ããããšãã§ããã»ãŒãã¹ãŠã®å
容ãå
šãŠåãæ±ã£ãŠããããã®ææ¥å
容ã«å«ãŸããŠããã»ãšãã©ã®çµµãå³è¡šã¯ç§ãçŽæ¥äœæããå
容ã§ããæ¬è¬çŸ©ã®ããã«ããªãå€ãã®æéãšåªåãå
¥ããããã ãä»åŸéçºè
ã®æé·ã«é¢ããŠéèŠãªããŒãã ãšæã£ãã®ã§ãïŒç§å人çãªèгç¹ããïŒ ãããããè³æããããªè¬çŸ©ããã£ãŠã»ããããšããåºæºã§äŒç»ããŠäœãããè¬çŸ©ã§ãã
ãŸãå人çã«èããã«ãè²»çšãåºããŠè¬çŸ©èãæ±ºå®ããããšããããšã¯æéãšè²»çšã亀æããããšã ãšæããŸããè²»çšå¯Ÿå¹æ 該åœãããã¯ã«é¢ããå匷æéãæããã«ã¯ååãªåœ¹å²ãæãããšèããŠãããæéãæããã§ããé«ãæºè¶³ãåŸãŠããããšãé¡ã£ãŠããŸããäŸ¡æ Œãããé«ãæºè¶³ãå·®ãäžããã®ã«å
å®ããå
容ã§ãè¿ããããŠããã ããŸãã ^^
ðè¬çŸ©å
容ã©ã€ã»ã³ã¹é¢é£
æ¬è¬çŸ©ã®å
容ã¯ãç§ãå°ãã§ãçµµãªã©ãåèã«ããå Žåã«PDFã«é¢é£URLã¢ãã¬ã¹ãæ®ãããŠããŸãããã®ãããªå Žåãé€ããã¹ãŠã®è³æã¯ç§ãäœæããè³æãªã®ã§ãéšåå¥ã«è¬çŸ©ã®èª¬ææ¹åŒãåèã«ããŠããã°ãªã©ã«ãŸãšãããšãã¯ãæ¬è¬çŸ©ã®äœæãæ®ããŠããã ããŸããããäžå¯§ã«ãé¡ãããŸãã
ããã«ãããããããæ¬è¬çŸ©ã®å
šè¬çãªå
容ãããã°ã«ãŸãšããããšãšãè¬çŸ©è³æãšããŠäœ¿ãããPDFãã¡ã€ã«ã®å
±æã¯ããããªãå Žåã«ãçŠæ¢ãããŸãã
ðè¬çŸ©å
容ã®ãã¬ãã¥ãŒãæäŸ
åè¬ã決ããåã«ãè¬çŸ©ã¹ã¿ã€ã«ã«é¢ããŠäºåã«ç¢ºèªããŠããã ããããã«ããŸããã
- (ã»ã¯ã·ã§ã³ 0. 1.GCD/Operation ã®å)ã«é¢é£ãã1 æéã»ã©ã®ãã¬ãã¥ãŒ
- (ã»ã¯ã·ã§ã³ 10. 1. Operation ã®åã«)ã«é¢é£ãã5 åã»ã©ã®ãã¬ãã¥ãŒ
ãã¬ãã¥ãŒãæäŸãããŠããè¬çŸ©ãèŠãŠãææ¥ãæ±ºå®ããŸãã :)