API
å®éããã¢ãã±ãŒã¿ãŒãã®APIãæ確ã«ããããšããå§ããŸãããã äžèšã®ããã«ãçŸåšã®APIã¯æ£ãããããŸãã-åŒã³åºãå ã®ã³ãŒããç¹å®ã®ããŒã«èŠçŽ ã®ç¹å®ã®ç¶æ ãåžžã«ç解ã§ãããšã¯éããªããããåæ£ã·ã¹ãã ã§ã¯äœ¿çšã§ããŸããã
ç°¡åãªäŸã
1ïŒallocateïŒïŒé¢æ°ãåŒã³åºããšæåããŸãããallocateïŒïŒããã®å¿çãéä¿¡ããããšãåŒã³åºãå ã®ã³ãŒãã¯æ©èœããªããªããŸãã åé¡-èå¥åã¯éç«ã£ãŠããŸããããããã«ã€ããŠã¯äœãç¥ããŸããã ç©ççã«äœããã®å埩æé ãèšè¿°ããŠåé€ããæ¹æ³ã¯ãããŸããã äžæ¹ããªãœãŒã¹ã®å²ãåœãŠãæ åœããã³ãŒãã¯ãã§ã«æ©èœããŠããããã®èŠ³ç¹ããã¯èå¥åãå²ãåœãŠãããŠããŸãã ãããŠã圌èªèº«ããããåé€ããããšã¯ã§ããŸããããªããªã圌ã¯é»è©±ãç¡æã«ãªããŸã§åŸ ããªããã°ãªããªãããã§ãã ããã§ã¯ãããŸããã
2ïŒfreeïŒïŒé¢æ°ã®ã¹ãçæ§ãå¿ èŠã§ãã æããã«ãåŒã³åºãã³ãŒãã¯ããããã®å Žåã§ãfreeïŒïŒãåŒã³åºãããã«äœæããå¿ èŠããããŸãã æããã«ãallocateããåçãåãåã£ããããããæ°žç¶ã¡ã¢ãªïŒRDBMSãããŒå€ã¹ãã¬ãŒãžããŸãã¯åã«ããªã³ã¿ãŒã«å°å·ããŠã¹ãã£ããŒã«çšçŽãããŒãããïŒã«å ¥ããŸãã ãããŠãããæç¹ã§ãããããŒãããªãœãŒã¹ã®åé€ã決å®ãããšãfreeïŒïŒãåŒã³åºããŸãã ãã ãã空ãããŒããå®è¡äžã®å ŽåãããŒãããªãã«ãªãããã³ãŒãªã³ã°ããŒãã£ãã¯æããã«å床åŒã³åºããè©Šã¿ãŸãïŒãããã©ã®ããã«å®è£ ãããã¯éèŠã§ã¯ãããŸãããå®è£ ããããšãéèŠã§ãïŒã ããã¯ãäžå¿«ãªé©ããç§ãã¡ãåŸ ã£ãŠããå Žæã§ãã äºå®ãç¡æã§ããªãœãŒã¹ã解æŸã§ããå¯èœæ§ããããŸãã ããã«ããµãŒãããŒãã£ã®allocïŒïŒãåã³åŒ·èª¿è¡šç€ºããå ŽåããããŸãã ãã®åŸããªãœãŒã¹ãåã³è§£æŸããŸãããä»åã¯æ¢ã«ä»ã®èª°ãã®ãªãœãŒã¹ã«ãªã£ãŠããŸãã
äžè¬çã«ããããã®APIã®åé¡ã解決ããã«ã¯ããã€ãã®æ¹æ³ããããŸãã
æãåçŽã§éåžžã«æ®éçãªã®ã¯ããªãœãŒã¹ã®åå²ãåœãŠã«ã¿ã°ãã¢ã¿ããããããšã§ããããã¯ãå²ãåœãŠ/解æŸæäœã®åãã¢ã«å¯ŸããŠäžæã«éžæãããŸãã
ã€ãŸããã¡ãœããã·ã°ããã£ã¯int allocïŒT tïŒããã³freeïŒint idãT tïŒã«å€æŽãããŸãã ã©ã®ã¿ã€ãã®Tã§ãã£ãŠããç¹å®ã®åå€é¢ä¿ãååšããããã䜿çšããŠäžèšã®2ã€ã®åé¡ã解決ã§ããããšãéèŠã§ãã ãŸããç¡æã®ã¡ãœãããã¹ãçã«ããããšãã§ããŸãã 第äºã«ãå²ãåœãŠããããå€ãæ å ±ãåãåããªãã£ãããã¡ã³ãã ãèå¥åãåé€ããããã®æ¯èŒçç°¡åãªæé ãå°å ¥ã§ããŸãïŒåé¡1ãåç §ïŒã èšäºãèšããŸããªãããã«ãããã«ã€ããŠã¯è©³ãã説æããŸããã
ã»ãšãã©ã®å Žåããã®æ¹æ³ã§å€æŽããããµãŒãã¹ãã»ãŒåžžã«äœ¿çšã§ããããšã«æ³šæããŠãã ããã ã»ãšãã©ã®å Žåããèå¥åããäœãã«å²ãåœãŠããã€ã§ããã®ãäœãããã¿ã°ãšããŠäœ¿çšã§ããŸãã
ããã§ããå°ãããéšåçãªãå®è¡ã®å Žåã«allocãšfreeãã©ã®ããã«åäœããããæ£ç¢ºã«ç解ããå¿ èŠããããŸãã
æããã«ãäžè¬çãªå ŽåãåŒã³åºãå ã®ã³ãŒãã¯allocãå®è¡ããããã©ãããç¥ãããšãã§ããŸããã ãããã£ãŠãåŒã³åºãã³ãŒãã®æåã®ã«ãŒã«ã¯æ¬¡ã®ããã«ãªããŸã
â¢åŒã³åºãå ã®ã³ãŒãã¯ãæåã«allocãåŒã³åºãããèå¥åãã©ããã«æžã蟌ã¿ã次ã«ãããåŒã³åºãå¿ èŠããããŸãã ãã®ãããåŒã³åºãå ã®ã³ãŒãã¯ãéã®é åºã§å埩æé ãå®è£ ã§ããŸããéžæããããã¹ãŠã®ãã¢ïŒidãtïŒãå埩åŠçããã¹ãã¬ãŒãžã§èšåãããŠããªããã¹ãŠã®ãã¢ã«å¯ŸããŠç¡æã§åŒã³åºããŸãã
åæ§ã«ãåŒã³åºããããã©ããã«é¢ä¿ãªããããªãŒã¡ãœããã«ã€ããŠã¯åŠç¿ã§ããŸããã
ããããããã«2ã€ã®ã«ãŒã«ãçãŸããŸãã
â¢freeã¡ãœããã«æž¡ãããèå¥åã¯ãfreeã¡ãœãããåŒã³åºãåã«ãã·ã¹ãã ã§ãç¡æãã§ããïŒã€ãŸãã䜿çšãããŠããªãïŒãšèŠãªãããå¿ èŠããããŸãã
â¢ããã«ãããããããå°ãªããšã1ã€ã®åŒã³åºããæ£åžžã«å®äºãããŸã§ãfreeã¡ãœãããåŒã³åºããŠãã ããïŒèš±å®¹ããã-æ°åïŒã
ããã§ã¯ãå®è£ ã«ç§»ããŸãããã
å®è£
å ¥ãå£ã«DHTããããŸãã Javaã§æžããŠãã人ã®ããã«ã ConcurrentMapãæã£ãŠãããšä»®å®ããŸãïŒã¡ãªã¿ã«ããã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ä»ã®èšèªã䜿çšããŠããéçºè ã«ã¯æããã§ãïŒã åæã«ãç°ãªããã¹ãã®ConcurrentMapã¯åãã³ã³ãã³ãããèŠãŸããã
ããèªäœã§ã¯ãDHTã®æäœã¯ã¢ãããã¯ã§ãïŒããã¯DHTã®å€ãã®å®è£ ã§å®å šã«ãµããŒããããŠããŸãïŒã
ãã ããDHTã®èª²é¡éã«ã¢ãããã¯æ§ã¯ãªãããããã®éšåãèæ ®ããŠããã®å®è£ ããµããŒãããå¿ èŠããããŸãã
å®è£
æããã«ãDHTã§ã¯id-> tïŒãŸãã¯ãã®éïŒãšãã圢åŒã®äœããã®ãããããããŸãã åé¡ã¯ããã¹ãŠã®ããžãŒããŒããçµç±ããã«æåã®ç©ºãIDãååŸããæ¹æ³ã§ããïŒ
ãã®ãããªè§£æ±ºçãææ¡ãããŠããŸãã 次ã®ãããªãã€ããªåºéããªãŒãæ§ç¯ããŸããã
â¢ããªãŒã«ãŒã-éé[0ãNïŒ
â¢éãªãŒãããŒãX [aãbïŒã®äžã«ã¯ãæ£ç¢ºã«2ã€ã®ããŒã[aãcïŒããã³[cãbïŒããããŸããcã¯ããããã®ééã®é·ããçãããªãããã«éžæãããŸãã
â¢ãããŠã[idãid + 1ïŒã®åœ¢åŒã®ééã¯ãããªãŒã®èã§ãã
æããã«ããã®ãããªããªãŒã«ã¯Nåã®ã·ãŒããããããããããlnïŒNïŒé·ç§»ã®ã«ãŒãããå°éã§ããŸãã
次ã«ãããªãŒã®åéãªãŒãããŒãã«ããã®ããŒããè¡šãééã§äºçŽãããŠããèå¥åã®æ°ãå ¥åããŸãããã ãããŠãããªãŒã®ãªãŒãããŒãã«ã察å¿ããèå¥åãããžãŒã®å Žåã¯ã¿ã°ãé 眮ããããªãŒã®å Žåã¯nullãé 眮ããŸãã
ããã§ããã®ããªãŒãDHTã«ä¿åããããšãã§ããŸãã ããã«ãããŒãã®æ å ±ãæ£ããé åºã§æŽæ°ããããšãéèŠã§ããããã¯ãä»»æã®ã¹ãããã§å²ã蟌ãã å Žåã§ããã¢ã«ãŽãªãºã ãæ£ããæ©èœããå¿ èŠãããããã§ãã
fromãštoã®2ã€ã®ãã£ãŒã«ããæã€Intervalæ§é ããããããŒããªãŒãã³ã®ééïŒfromãå«ããtoã¯å«ãŸãªãïŒãå®çŸ©ãããšããŸãã æããã«ããã®ãããªæ§é ã¯ããªãŒããŒãããšã³ã³ãŒãããŸãã ãŸããããªãŒã«ã¯éè€ããŒãããªããããã«ããã®ãããªããªãŒã®ééã®äœçœ®ã決å®ããããã«äœãå¿ èŠãªãããšã«æ³šæããŠãã ããã èšãæããã°ãããªãŒèŠçŽ ãããã€ã³ã¿ãã«ãã€ã³ãããå¿ èŠã¯ãããŸããã ã©ã®ããŒãããäžãã«ãããã©ã®ããŒãããäžãã«ããããããŒãXããå€æã§ããã¢ã«ãŽãªãºã ããã€ã§ãæ§ç¯ã§ããŸãã
ããã¯ç§ãã¡ã®ç掻ãç°¡çŽ åããéèŠãªè²¡ç£ã§ãã
ãã®æ§é ã«ãå¿ èŠãªã³ã³ã¹ãã©ã¯ã¿ãŒãæãããªã€ã³ãŒã«ãšããã·ã¥ã³ãŒãããããããã«3ã€ã®æçšãªã¡ãœããããããŸãïŒleftïŒïŒãrightïŒïŒ-åããŒãã決å®ããupïŒïŒ-芪ã決å®ããŸã ãã¶ã€ããŒãšããã·ã¥ã³ãŒããããã°ã誰ãããããåŠçã§ãããšæããŸãã å·ŠïŒïŒãšå³ïŒïŒããããŸãã upïŒïŒé¢æ°ã®äœ¿çšã¯å€å°é£ãããªããŸããããããæžãããšã¯å¯èœã§ãïŒäžå¿ èŠãªè©³çŽ°ã§ããã¹ãããŒãããªãããã«èšäºã®æåŸã«æ»ããŸãïŒã
çŸåšãã¹ããã³ã°ããªãŒãã³ãŒãåã§ãããéæ³ã®ãééæ§é ãæã£ãŠãããããåé¡ã¯å°ãããŸãŸã§ãã
allocateã§ã¯ã空ã§ãªãã·ãŒããéžæããŠã¿ã°ãæžã蟌ãå¿ èŠããããŸãã次ã«ãéžæããã·ãŒãããäžã«ç§»åããŠå€ãæŽæ°ããŸãã 2ã€ã®ããšãèŠããŠããããšãéèŠã§ãã
â¢ã¢ãããã¯æäœputIfAbsentã«ãã£ãŠã¿ã°ããªã¹ãã«è¿œå ãããŸã
â¢ãªãŒã以å€ã®ããŒãã®å€ã¯ãread-modify-atomicUpdateã䜿çšããŠã«ãŒããä»ããŠæŽæ°ãããŸãã ã€ãŸããæŽæ°ãããããŒãããå€ãèªã¿åããåããŒãå ã®å€ãèªã¿åããåå眮æãéããŠåã®åèšãæŽæ°ãããããŒãã«æžã蟌ã¿ãŸãã ã¢ãããã¯çœ®æãæ©èœããªãã£ãå Žåã¯ãæäœãç¹°ãè¿ããŸãã
â¢ããŒãã®ãµãããªãŒã«ç©ºãèãããããšãDHTããèªã¿åã£ããšããŠãããããå®éã«ããã«ãããšããæå³ã§ã¯ãããŸããã
ãããã£ãŠã空ã®ã·ãŒããèŠã€ããŠæŽæ°ããããã®ãã§ã€ã«ãã¡ãŒã¹ãæé ããã®ãæåãŸã§ããµã€ã¯ã«ãšããŠå²ãåœãŠãæžã蟌ãŸããŸãã ããªãŒã®æåã®å€æŽã¯ãã·ãŒãã®æŽæ°ã§ããããã®åŸã®ã¿-芪ããŒãã®æŽæ°ã§ããããšã«æ³šæããŠãã ããã ãããå¿ èŠãªçç±ã¯ allocateã¯ãã€ã§ãå®äºã§ããŸãã
Freeã¯åãããã«æ©èœããŸããã¿ã°ãèŠæ±ããããã®ãšäžèŽããããªãŒã®äžã®ããŒããæŽæ°ãããšãèå¥åãã解æŸãããŸãïŒã€ãŸããDHTããããŒããåé€ããŸãïŒã åæã«ãããŒãã®æŽæ°ã¯ãå²ãåœãŠã®æ¹æ³ãšäžèŽããŸãã 泚æãã¹ãéèŠãªããšã¯ããªãŒãããŒãã«å€ãå«ãŸããŠããªãå Žåã§ãïŒã€ãŸããfreeãæ¢ã«åŒã³åºãããŠããå Žåã§ãïŒfreeãããªãŒã®æŽæ°ãå®è¡ããããšã§ãã ãããå¿ èŠãªçç±ã¯ 以åã®freeã¯éšåçã«å®è¡ãããã·ãŒãã¯è§£æŸãããŸããã芪ããŒãã¯æŽæ°ãããŸããã å®éã«ã¯ããã®ããã«ãfreeãè€æ°ååŒã³åºãããšãã§ããæåŸã«åŒã³åºããæ£åžžã«å®äºããããšãçãããå Žåã¯å床åŒã³åºãå¿ èŠããããšããAPIã®èŠä»¶ãå¿ èŠã§ãã
æ©èœã¢ãã
å®éãçŽæãããïŒïŒé¢æ°ã ãããã¬ãã«ã®ééã®é·ãã2 ^ nã§ããããšã«åæããå Žåãå·ŠïŒïŒãå³ïŒïŒãããã³äžïŒïŒã®ã¹ãã«ãå€§å¹ ã«ç°¡ç¥åãããããšã«æ³šæããŠãã ããã ãã®å ŽåãããªãŒå ã®ä»ã®ééã¯2 ^ nã®é·ããæã¡ãããã«ãããªãŒã®åããã¬ãã«ãã®ééã¯åãé·ããæã¡ãŸãã äžè¬çã«ã3ã€ã®sabjé¢æ°ã¯ãã¹ãŠãä»»æã®ãããã¬ãã«ã®ééã§èšè¿°ã§ããŸãïŒãã ãããçŸåšã®ãééã«å ããŠãåžžã«äžäœã¬ãã«ã®ééãç¥ãå¿ èŠããããŸãïŒã ããããããã¯äžäŸ¿ã§ããã2 ^ nã«äžè¬åããŠãäœã害ã¯ãããŸããã
ãããã£ãŠãééã®é·ãã2 ^ nã®å Žåãå·ŠïŒïŒããã³å³ïŒïŒã¯ç°¡åã«èšè¿°ãããäžïŒïŒã«ã€ããŠã¯ãçŸåšã®ééããã®èŠªééã«å¯ŸããŠãå³ããŸãã¯ãå·Šãã§ãããã©ãããå€æããã ãã§ãã ããã¯åçŽãªã«ãŒã«ã«ãã£ãŠæ±ºå®ãããŸã-ãå·Šãã®ééã§ãåæå€ã¯æ®ãã®ééãªãã§ééã®2åã®é·ãã§é€ç®ãããŸãã ãããã£ãŠãééïŒå·ŠïŒïŒãŸãã¯å³ïŒïŒé¢æ°ã®ã©ã¡ãããååŸãããïŒãç¥ã£ãŠããã°ãå察ã®ã¢ã¯ã·ã§ã³ãé©çšããŠäžäœã¬ãã«ã®ééãååŸããã®ã¯ç°¡åã§ãã