ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®æŠèŠ
ããã«ã¡ã¯ãããã«ïŒ ç§ã®æèŠã§ã¯èå³æ·±ãæç®ãOSTEP ã®äžé£ã®èšäºç¿»èš³ã玹ä»ããããšæããŸãã ãã®è³æã§ã¯ãUNIX ã«äŒŒããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®åäœãã€ãŸããææ°ã® OS ãæ§æããããã»ã¹ãããŸããŸãªã¹ã±ãžã¥ãŒã©ãã¡ã¢ãªãããã³ãã®ä»ã®åæ§ã®ã³ã³ããŒãã³ãã®åäœã«ã€ããŠãéåžžã«è©³ãã調ã¹ãŠããŸãã ãã¹ãŠã®è³æã®ãªãªãžãã«ã¯ãã¡ãããã芧ããã ããŸã
ãã®ããŒãã«é¢ããã©ãã®äœæ¥ã¯ã次ã®å Žæã«ãããŸãã
- ãªãªãžãã«ïŒ
- ãªãªãžãã«ïŒ
- ç§ã®å人çãªé©å¿:
ç§ã®ãã£ã³ãã«ããã§ãã¯ã§ããŸã
ããã°ã©ã æäœ
ããã°ã©ã ã®å®è¡äžã«äœãèµ·ããã§ãããã? å®è¡äžã®ããã°ã©ã ã¯ãåœä»€ãå®è¡ãããšãã XNUMX ã€ã®åçŽãªããšãè¡ããŸãã æ¯ç§ãæ°çŸäžãå Žåã«ãã£ãŠã¯æ°ååã®åœä»€ãããã»ããµã«ãã£ãŠ RAM ããååŸãããé çªã«ãããã®åœä»€ããã³ãŒããã (ããšãã°ããããã®åœä»€ãã©ã®ã¿ã€ãã«å±ããŠããããèªèã)ãå®è¡ãããŸãã ããã«ã¯ãXNUMX ã€ã®æ°å€ã®å ç®ãã¡ã¢ãªãžã®ã¢ã¯ã»ã¹ãæ¡ä»¶ã®ãã§ãã¯ãé¢æ°ãžã®ãžã£ã³ããªã©ãèããããŸãã XNUMX ã€ã®åœä»€ã®å®è¡åŸãããã»ããµã¯å¥ã®åœä»€ã®å®è¡ã«é²ã¿ãŸãã ãããŠãããã°ã©ã ãçµäºãããŸã§ã次ãã次ãžãšåœä»€ãå®è¡ãããŸãã
ãã®äŸã¯åœç¶ç°¡ç¥åãããŠãããšèããããŸããå®éãããã»ããµãé«éåããããã«ãææ°ã®ããŒããŠã§ã¢ã§ã¯åœä»€ãé çªã«å®è¡ããããèããããçµæãèšç®ããããåœä»€ãåæã«å®è¡ããããåæ§ã®ããªãã¯ãå®è¡ãããããããšãã§ããŸãã
èšç®ã®ãã©ã³ã»ãã€ãã³ã¢ãã«
ç§ãã¡ã説æããåçŽåãããäœæ¥åœ¢åŒã¯ãèšç®ã®ãã©ã³ ãã€ãã³ ã¢ãã«ã«äŒŒãŠããŸãã ãã©ã³ã»ãã€ãã³ã¯ã³ã³ãã¥ãŒã¿ ã·ã¹ãã ã®å
é§è
ã® XNUMX 人ã§ãããã²ãŒã çè«ã®èè
ã® XNUMX 人ã§ããããŸããã ããã°ã©ã ã®å®è¡äžã«ãä»ã®å€ãã®ã€ãã³ããçºçããä»ã®å€ãã®ããã»ã¹ããµãŒãããŒãã£ã®ããžãã¯ãåäœããŸãããã®äž»ãªç®çã¯ãã·ã¹ãã ã®èµ·åãéçšãããã³ã¡ã³ããã³ã¹ãç°¡çŽ åããããšã§ãã
ããã°ã©ã ãç°¡åã«å®è¡ã§ããããã«ãã (ãŸãã¯è€æ°ã®ããã°ã©ã ãåæã«å®è¡ã§ããããã«ãã) äžé£ã®ãœãããŠã§ã¢ããããããã°ã©ã ãåãã¡ã¢ãªãå
±æããããç°ãªãããã€ã¹ãšéä¿¡ãããã§ããããã«ããŸãã ãã®ãããªäžé£ã®ãœãããŠã§ã¢ (ãœãããŠã§ã¢) ã¯åºæ¬çã«ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãšåŒã°ãããã®ã¿ã¹ã¯ã«ã¯ãã·ã¹ãã ãæ£ããå¹ççã«åäœããããšãç£èŠããããšãšããã®ã·ã¹ãã ã®ç®¡çã容æã«ããããšãå«ãŸããŸãã
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã
ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã (OS ãšç¥ãããŸã) ã¯ãã³ã³ãã¥ãŒã¿ ãªãœãŒã¹ã管çããã³ã³ãã¥ãŒã¿ãšã®ãŠãŒã¶ãŒã®å¯Ÿè©±ãçµç¹åããããã«èšèšããããçžäºã«é¢é£ããããã°ã©ã ã®ã»ããã§ãã.
OS ã¯ãæåã«æãéèŠãªæè¡ãã€ãŸãæè¡ãéããŠãã®å¹æãçºæ®ããŸãã ä»®æ³åã OS ã¯ç©çãªãœãŒã¹ (ããã»ããµãã¡ã¢ãªããã£ã¹ã¯ãªã©) ãšå¯Ÿè©±ãããããããäžè¬çã§ããã匷åã§ã䜿ãããã圢åŒã«å€æããŸãã ãããã£ãŠãäžè¬çãªç解ã®ããã«ããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãšä»®æ³ãã·ã³ãéåžžã«å€§ãŸãã«æ¯èŒããããšãã§ããŸãã
ãŠãŒã¶ãŒããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã«ã³ãã³ããäžããä»®æ³ãã·ã³ã®æ©èœ (ããã°ã©ã ã®å®è¡ãã¡ã¢ãªã®å²ãåœãŠããã¡ã€ã«ãžã®ã¢ã¯ã»ã¹ãªã©) ã䜿çšã§ããããã«ããããã«ããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã¯æ¬¡ã®ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãã API (ã¢ããªã±ãŒã·ã§ã³ ããã°ã©ãã³ã° ã€ã³ã¿ãŒãã§ã€ã¹)ãåŒã³åºããè¡ãããšãã§ããŸã (call)ã äžè¬çãªãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã§ã¯ãäœçŸãã®ã·ã¹ãã ã³ãŒã«ãå®è¡ã§ããŸãã
æåŸã«ãä»®æ³åã«ãããè€æ°ã®ããã°ã©ã ã®å®è¡ (ãããã£ãŠ CPU ã®å
±æ)ãåæã«ãããã®ããã°ã©ã ã®åœä»€ãšããŒã¿ãžã®ã¢ã¯ã»ã¹ (ãããã£ãŠã¡ã¢ãªã®å
±æ)ãããã³ãã£ã¹ã¯ãžã®ã¢ã¯ã»ã¹ (ãããã£ãŠ I/O ããã€ã¹ã®å
±æ) ãå¯èœã«ãªãããããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã¯ããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãšãåŒã°ããŸãããªãœãŒã¹ãããŒãžã£ãŒã åããã»ããµããã£ã¹ã¯ãã¡ã¢ãªã¯ã·ã¹ãã ã®ãªãœãŒã¹ã§ããããããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®åœ¹å²ã® XNUMX ã€ã¯ããããã®ãªãœãŒã¹ã管çããã¿ã¹ã¯ãšãªãããã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãå®è¡ããã¿ã¹ã¯ã«å¿ããŠãå¹ççãã€èª å®ã«å®è¡ãããããã®éãå®è¡ãããããããšã«ãªããŸããèšèšãããŠã
CPUä»®æ³å
次ã®ããã°ã©ã ãæ€èšããŠãã ããã
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)
ç¹å¥ãªã¢ã¯ã·ã§ã³ã¯å®è¡ãããŸãããå®éãé¢æ°ãåŒã³åºãã ãã§ãã ã¹ãã³() ã®ã¿ã¹ã¯ã¯ãæéãã§ãã¯ãç¹°ãè¿ããXNUMX ç§çµéåŸã«æ»ãããšã§ãã ãããã£ãŠããŠãŒã¶ãŒãåŒæ°ãšããŠæž¡ããæååãç¡éã«ç¹°ãè¿ããŸãã
ãã®ããã°ã©ã ãå®è¡ããŠãæåãAããåŒæ°ãšããŠæž¡ããŠã¿ãŸãããã çµæã¯ç¹ã«èå³æ·±ããã®ã§ã¯ãããŸãããã·ã¹ãã ã¯æåãAããå®æçã«è¡šç€ºããããã°ã©ã ãå®è¡ããã ãã§ãã
次ã«ãåãããã°ã©ã ã®å€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãå®è¡ãããŠããããããããããããããã«ç°ãªãæåãåºåããå Žåã®ãªãã·ã§ã³ãè©ŠããŠã¿ãŸãããã ãã®å Žåãçµæã¯å€å°ç°ãªããŸãã ããã»ããµã XNUMX ã€ããã«ãããããããããã°ã©ã ã¯åæã«å®è¡ãããŸãã ããã¯ã©ã®ããã«ããŠèµ·ããã®ã§ããããïŒ ãããããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãããŒããŠã§ã¢æ©èœã®å©ããªãã«ã¯é¯èŠãçã¿åºãããšãå€æããŸããã ã·ã¹ãã ã«è€æ°ã®ä»®æ³ããã»ããµããããã®ããã«é¯èŠããåäžã®ç©çããã»ããµãçè«çã«ã¯ç¡éã®æ°ã«å€ããããã«ãã£ãŠäžèŠããã°ã©ã ãåæã«å®è¡ã§ããããã«ããŸãã ãã®é¯èŠã¯ãšåŒã°ããŸã CPUä»®æ³å.
ãã®å³ããã¯å€ãã®çåãçããŸããããšãã°ãè€æ°ã®ããã°ã©ã ãåæã«å®è¡ãããå Žåãã©ããèµ·åããã®ã§ãããã? ãã®è³ªåã«ã¯ãOS ã®ãããªã·ãŒããé¢äžããŸãã ããªã·ãŒã¯ OS ã®ããŸããŸãªå Žæã§äœ¿çšããããã®ãããªè³ªåã«çããŸããããªã·ãŒã¯ãOS ãå®è£
ããåºæ¬çãªã¡ã«ããºã ã§ãã ãããã£ãŠãOS ã¯ãªãœãŒã¹ ãããŒãžã£ãŒãšããŠã®åœ¹å²ãæãããŸãã
ã¡ã¢ãªä»®æ³å
次ã«ã¡ã¢ãªãèŠãŠã¿ãŸãããã ææ°ã®ã·ã¹ãã ã«ãããã¡ã¢ãªã®ç©çã¢ãã«ã¯ããã€ãã®é
åãšããŠè¡šãããŸããã ã¡ã¢ãªããèªã¿åãã«ã¯ã次ã®ããã«æå®ããå¿
èŠããããŸã ã»ã«ã¢ãã¬ã¹ã¢ã¯ã»ã¹ããã«ã¯ã ããŒã¿ãæžã蟌ã¿ãŸãã¯æŽæ°ããã«ã¯ãããŒã¿ãšããããæžã蟌ãã»ã«ã®ã¢ãã¬ã¹ãæå®ããå¿
èŠããããŸãã
ããã°ã©ã ã®å®è¡äžãã¡ã¢ãªã¯åžžã«ã¢ã¯ã»ã¹ãããŸãã ããã°ã©ã ã¯ããã®ããŒã¿æ§é å
šäœãã¡ã¢ãªã«ä¿åããããŸããŸãªåœä»€ãå®è¡ããããšã§ããã«ã¢ã¯ã»ã¹ããŸãã äžæ¹ãåœä»€ã¯ã¡ã¢ãªã«ãä¿åãããããã次ã®åœä»€ã®èŠæ±ããšã«ã¡ã¢ãªã«ãã¢ã¯ã»ã¹ãããŸãã
malloc() åŒã³åºã
次ã®ããã°ã©ã ãèããŠã¿ãŸãããããã®ããã°ã©ã ã¯ãåŒã³åºãã䜿çšããŠã¡ã¢ãªé åãå²ãåœãŠãŸãã mallocïŒïŒ (https://youtu.be/jnlKRnoT1m0):
ããã°ã©ã ã¯ããã€ãã®ããšãè¡ããŸãã ãŸããã¡ã¢ãªãå²ãåœãŠ (7 è¡ç®)ã次ã«å²ãåœãŠãããã»ã«ã®ã¢ãã¬ã¹ãåºåã (9 è¡ç®)ãå²ãåœãŠãããã¡ã¢ãªã®æåã®ã¹ãããã« XNUMX ãæžã蟌ã¿ãŸãã 次ã«ãããã°ã©ã ã¯ã«ãŒãã«å
¥ããã¡ã¢ãªå
ã®å€æ°ãpãã®ã¢ãã¬ã¹ã«æ ŒçŽãããŠããå€ãã€ã³ã¯ãªã¡ã³ãããŸãã ãŸããããèªäœã®ããã»ã¹ ID ãåºåããŸãã ããã»ã¹ ID ã¯å®è¡äžã®ããã»ã¹ããšã«äžæã§ãã ããã€ãã®ã³ããŒãèµ·åãããšãèå³æ·±ãçµæã«ééããŸããæåã®ã±ãŒã¹ã§ã¯ãäœãããã«åã«ããã€ãã®ã³ããŒãå®è¡ãããšãã¢ãã¬ã¹ãç°ãªããŸãã ããããããã¯ç§ãã¡ã®çè«ã«ã¯åœãŠã¯ãŸããŸããã æ£è§£ã§ããææ°ã®ãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ã¯ã¡ã¢ãªã®ã©ã³ãã åãããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã ç¡å¹ã«ãããšãæåŸ
ã©ããã®çµæãåŸãããŸããåæã«å®è¡ãããŠãã XNUMX ã€ã®ããã°ã©ã ã®ã¡ã¢ãª ã¢ãã¬ã¹ãäžèŽããŸãã
ãã®çµæãXNUMX ã€ã®ç¬ç«ããããã°ã©ã ãç¬èªã®ãã©ã€ããŒã ã¢ãã¬ã¹ç©ºéã§åäœãããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã«ãã£ãŠç©çã¡ã¢ãªã«ãããã³ã°ãããããšãå€æããŸãããã ãããã£ãŠãããããã°ã©ã å
ã§ã®ã¡ã¢ãª ã¢ãã¬ã¹ã®äœ¿çšã¯ä»ã®ããã°ã©ã ã«ãããªã圱é¿ãäžãããåããã°ã©ã ã«ã¯ãå®å
šã«äžããããç¬èªã®ç©çã¡ã¢ãªãããããã«èŠããŸãã ãããå®éã«ã¯ãç©çââã¡ã¢ãªã¯ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã«ãã£ãŠç®¡çãããå
±æãªãœãŒã¹ã§ãã
äžè²«æ§
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã å ã®ããXNUMXã€ã®éèŠãªãããã¯ã¯- äžè²«æ§ã ãã®çšèªã¯ãåãããã°ã©ã å ã§åæã«å€ãã®ãã®ãæäœãããšãã«çºçããå¯èœæ§ã®ããã·ã¹ãã ã®åé¡ã«ã€ããŠè©±ããšãã«äœ¿çšãããŸãã äžè²«æ§ã®åé¡ã¯ããªãã¬ãŒãã£ã³ã° ã·ã¹ãã èªäœã®å éšã§ãçºçããŸãã åã®ã¡ã¢ãªãšããã»ããµã®ä»®æ³åã®äŸã§ã¯ãOS ãæåã®ããã»ã¹ãéå§ãã次㫠XNUMX çªç®ã®ããã»ã¹ãéå§ãããªã©ãå€ãã®ããšãåæã«ç®¡çããŠããããšãããããŸããã çµå±ã®ãšããããã®åäœã¯ããã€ãã®åé¡ãåŒãèµ·ããå¯èœæ§ããããŸãã ãããã£ãŠãããšãã°ãææ°ã®ãã«ãã¹ã¬ãã ããã°ã©ã ã§ã¯ãã®ãããªåé¡ãçºçããŸãã
次ã®ããã°ã©ã ãæ€èšããŠãã ããã
main é¢æ°ã®ããã°ã©ã ã¯ã次ã®åŒã³åºãã䜿çšã㊠XNUMX ã€ã®ã¹ã¬ãããäœæããŸãã pthread_create()ã ãã®äŸã§ã¯ãã¹ã¬ããã¯ãä»ã®é¢æ°ãšäžŠãã§åãã¡ã¢ãªç©ºéã§å®è¡ãããé¢æ°ãšããŠèããããšãã§ããæããã«è€æ°ã®é¢æ°ãåæã«å®è¡ãããŸãã ãã®äŸã§ã¯ãåã¹ã¬ãããé¢æ°ãéå§ããŠå®è¡ããŸãã worker() ã¯åã«å€æ°ãã€ã³ã¯ãªã¡ã³ãããŸãã,.
ãã®ããã°ã©ã ãåŒæ° 1000 ã§å®è¡ããŠã¿ãŸãããããæ³åã®ãšãããåã¹ã¬ãããå€æ°ã 2000 åã€ã³ã¯ãªã¡ã³ããããããçµæ㯠1000 ã«ãªãã¯ãã§ãã ãã ãããã¹ãŠãããã»ã©åçŽã§ã¯ãããŸããã æ¡éãã«å€ãã®ç¹°ãè¿ãã§ããã°ã©ã ãå®è¡ããŠã¿ãŸãããã
ããšãã°ã100000 ãšããæ°å€ãå
¥åãããšãåºå㯠200000 ãšããæ°å€ã«ãªãããšãæåŸ
ãããŸãããããã100000 ãšããæ°å€ãæ°åå®è¡ãããšãæ£è§£ã衚瀺ãããªãã ãã§ãªããç°ãªãäžæ£è§£ãåŸãããŸãã çãã¯ãæ°å€ãå¢ããã«ã¯ãã¡ã¢ãªããæ°å€ãæœåºããã€ã³ã¯ãªã¡ã³ãããæ°å€ãæžãæ»ããšãã XNUMX ã€ã®æäœãå¿
èŠã§ãããšããäºå®ã«ãããŸãã ããããã¹ãŠã®åœä»€ã¯ã¢ãããã¯ã« (ãã¹ãŠåæã«) å®è¡ãããããã§ã¯ãªãããããã®ãããªå¥åŠãªããšãçºçããå¯èœæ§ããããŸãã ãã®åé¡ã¯ããã°ã©ãã³ã°ã§åŒã°ããŸã 競åç¶æ
ã æªç¥ã®ç¬éã«æªç¥ã®åãããããæäœã®ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããšãã
åºæïŒ habr.com