Web ã¢ããªã±ãŒã·ã§ã³ã¯çŸåšããããå Žæã§äœ¿çšãããŠããããã¹ãŠã®ãã©ã³ã¹ããŒã ãããã³ã«ã®äžã§ HTTP ã倧ããªã·ã§ã¢ãå ããŠããŸãã Web ã¢ããªã±ãŒã·ã§ã³éçºã®åŸ®åŠãªéããç 究ãããšããã»ãšãã©ã®äººã¯ããããã®ã¢ããªã±ãŒã·ã§ã³ãå®éã«å®è¡ããããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã«ã¯ã»ãšãã©æ³šæãæããŸããã éçº (Dev) ãšéçš (Ops) ã®åé¢ã¯ãç¶æ³ãããã«æªåãããã ãã§ããã ããããDevOps æåã®å°é ã«ãããéçºè ã¯ã¯ã©ãŠãã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãã責任ãè² ãããã«ãªã£ãŠããããããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®ããã¯ãšã³ãã«ã€ããŠååã«ç解ããããšã¯éçºè ã«ãšã£ãŠéåžžã«åœ¹ç«ã¡ãŸãã ããã¯ãæ°åãŸãã¯æ°äžã®åææ¥ç¶ã«å¯Ÿå¿ããã·ã¹ãã ãå±éããããšããŠããå Žåã«ç¹ã«äŸ¿å©ã§ãã
Web ãµãŒãã¹ã®å¶éã¯ãä»ã®ã¢ããªã±ãŒã·ã§ã³ã®å¶éãšéåžžã«äŒŒãŠããŸãã ããŒã ãã©ã³ãµãŒã§ãããããŒã¿ããŒã¹ ãµãŒããŒã§ãããããããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã¯ãé«ããã©ãŒãã³ã¹ç°å¢ã§ã¯åæ§ã®åé¡ãæ±ããŠããŸãã ãããã®åºæ¬çãªå¶éãšäžè¬çã«ããããå æããæ¹æ³ãç解ããããšã¯ãWeb ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ãè©äŸ¡ããã®ã«åœ¹ç«ã¡ãŸãã
ç§ã¯ãç¥èè±å¯ãªã·ã¹ãã ã¢ãŒããã¯ãã«ãªãããè¥ãéçºè
ããã®è³ªåã«å¿ããŠããã®ã·ãªãŒãºã®èšäºãæžããŠããŸãã Linux ã¢ããªã±ãŒã·ã§ã³ã®æé©åãã¯ããã¯ãããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã¬ãã«ã§ã©ã®ããã«æ©èœãããã®åºæ¬ãæ·±ãæãäžããã«æ確ã«ç解ããããšã¯äžå¯èœã§ãã ã¢ããªã±ãŒã·ã§ã³ã«ã¯ããŸããŸãªçš®é¡ããããŸããããã®ã·ãªãŒãºã§ã¯ããã©ãŠã¶ãããã¹ã ãšãã£ã¿ãªã©ã®ãã¹ã¯ããã ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªããWeb ããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãåãäžããããšæããŸãã ãã®è³æã¯ãLinux ãŸã㯠Unix ããã°ã©ã ãã©ã®ããã«åäœããããããã³é«ããã©ãŒãã³ã¹ãå®çŸããããã«ããã°ã©ã ãæ§é åããæ¹æ³ãç解ãããéçºè
ããã³ã¢ãŒããã¯ãã察象ãšããŠããŸãã
ãªããã¯ã¹ã¯ ãµãŒããŒã«ãŒã ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã§ãããã»ãšãã©ã®å Žåãã¢ããªã±ãŒã·ã§ã³ã¯ãã® OS äžã§å®è¡ãããŸãã ç§ã¯ãLinuxããšèšã£ãŠããŸãããã»ãšãã©ã®å ŽåãUnix ã«äŒŒããªãã¬ãŒãã£ã³ã° ã·ã¹ãã å
šè¬ãæå³ããŠãããšèããŠããã ããŠåé¡ãããŸããã ãã ããä»å±ã®ã³ãŒããä»ã®ã·ã¹ãã ã§ãã¹ãããããšã¯ãããŸããã ãããã£ãŠãFreeBSD ãŸã㯠OpenBSD ã«èå³ãããå Žåãçµæã¯ç°ãªãå¯èœæ§ããããŸãã Linux ç¹æã®ããšãè©Šãããšãã¯ããããææããŸãã
ãã®ç¥èãå©çšããŠã¢ããªãæåããæ§ç¯ãããšå®å šã«æé©åãããŸãããããããªãããšããå§ãããŸãã çµç¹ã®ããžãã¹ ã¢ããªã±ãŒã·ã§ã³çšã«æ°ãã Web ãµãŒããŒã C ãŸã㯠C++ ã§äœæããå Žåãä»æ¥ããã®ä»äºã§ã®æåŸã®æ¥ã«ãªãå¯èœæ§ããããŸãã ãã ãããããã®ã¢ããªã±ãŒã·ã§ã³ã®æ§é ãç¥ã£ãŠãããšãæ¢åã®ããã°ã©ã ãéžæããã®ã«åœ¹ç«ã¡ãŸãã ããã»ã¹ããŒã¹ã®ã·ã¹ãã ãšã¹ã¬ããããŒã¹ã®ã·ã¹ãã ãããã³ã€ãã³ãããŒã¹ã®ã·ã¹ãã ãæ¯èŒã§ããããã«ãªããŸãã Nginx ã®ããã©ãŒãã³ã¹ã Apache httpd ãããåªããŠããçç±ãTornado ããŒã¹ã® Python ã¢ããªã±ãŒã·ã§ã³ã Django ããŒã¹ã® Python ã¢ããªã±ãŒã·ã§ã³ãšæ¯èŒããŠããå€ãã®ãŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸã§ããçç±ãç解ããŠç解ã§ããã§ãããã
ZeroHTTPd: åŠç¿ããŒã«
çè«ã«ã€ããŠè©³ããè°è«ããããšãã§ããŸãããã³ãŒããäœæããŠå®è¡ãããã¹ãŠã®ãµãŒã㌠ã¢ãŒããã¯ãã£ãçžäºã«æ¯èŒããããšä»¥äžã«åªãããã®ã¯ãããŸããã ãããæãæçœãªæ¹æ³ã§ãã ãããã£ãŠãããã»ã¹ããŒã¹ãã¹ã¬ããããŒã¹ãã€ãã³ãããŒã¹ã®åã¢ãã«ã䜿çšããŠãåçŽãª ZeroHTTPd Web ãµãŒããŒãäœæããŸãã ãããã®åãµãŒããŒããã§ãã¯ããŠãäºãã®ããã©ãŒãã³ã¹ãæ¯èŒããŠã¿ãŸãããã ZeroHTTPd ã¯åäžã® C ãã¡ã€ã«ã«å®è£
ãããŠãããã€ãã³ãããŒã¹ã®ãµãŒããŒã«ã¯ä»¥äžãå«ãŸããŸãã
ã³ãŒãã«ã¯ç解ãå©ããããã®ã³ã¡ã³ãããããããããŸãã æ°è¡ã®ã³ãŒãã§æ§æãããã·ã³ãã«ãª Web ãµãŒããŒã§ãã ZeroHTTPd ã¯ãWeb éçºã®ããã®æå°éã®ãã¬ãŒã ã¯ãŒã¯ã§ããããŸãã æ©èœã¯éãããŠããŸãããéçãã¡ã€ã«ãšéåžžã«åçŽãªãåçãããŒãžãæäŸã§ããŸãã ZeroHTTPd ã¯ãé«æ§èœ Linux ã¢ããªã±ãŒã·ã§ã³ã®äœææ¹æ³ãåŠã¶ã®ã«é©ããŠãããšèšããããåŸãŸããã äžè¬ã«ãã»ãšãã©ã® Web ãµãŒãã¹ã¯ãªã¯ãšã¹ããåŸ
æ©ãããªã¯ãšã¹ãã確èªããŠåŠçããŸãã ããã¯ãŸãã« ZeroHTTPd ãè¡ãããšã§ãã ããã¯åŠç¿çšã®ããŒã«ã§ãããçç£çšã®ããŒã«ã§ã¯ãããŸããã ãšã©ãŒåŠçãåŸæã§ã¯ãªããã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãèªã£ãŠããå¯èœæ§ã¯äœãã§ã (ãããããç§ã¯äœ¿çšããŸãã strcpy
) ãŸã㯠C èšèªã®å·§åŠãªããªãã¯ã§ããããããããŸãæ©èœããããšãé¡ã£ãŠããŸãã
ZeroHTTPd ã®ããŒã ããŒãžã ç»åãå«ãããŸããŸãªãã¡ã€ã«åœ¢åŒãåºåã§ããŸã
ã²ã¹ãããã¯ã®ç³ã蟌ã¿
éåžžãææ°ã® Web ã¢ããªã±ãŒã·ã§ã³ã¯éçãã¡ã€ã«ã«éå®ãããŸããã ãããã¯ãããŸããŸãªããŒã¿ããŒã¹ããã£ãã·ã¥ãªã©ãšè€éãªããåããè¡ãããã蚪åè ãèªåã®ååã§ãšã³ããªãæ®ããã²ã¹ã ããã¯ããšåŒã°ããåçŽãª Web ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã ã²ã¹ã ããã¯ã«ã¯ã以åã«æ®ããããšã³ããªãä¿åãããŸãã ããŒãžã®äžéšã«ã¯èšªåè ã«ãŠã³ã¿ãŒããããŸãã
Webã¢ããªãã²ã¹ãããã¯ãZeroHTTPd
蚪åè ã«ãŠã³ã¿ãŒãšã²ã¹ãããã¯ã®ãšã³ããªã¯ Redis ã«ä¿åãããŸãã Redis ãšã®éä¿¡ã«ã¯ãå€éšã©ã€ãã©ãªã«äŸåããªãç¬èªã®ããã·ãŒãžã£ãå®è£ ãããŠããŸãã ç§ã¯ãå ¬çã«å ¥æå¯èœã§ååã«ãã¹ãããããœãªã¥ãŒã·ã§ã³ãããå Žåã«ãèªäœã³ãŒããå±éããããšã¯ããŸã奜ãã§ã¯ãããŸããã ãã ããZeroHTTPd ã®ç®çã¯ãHTTP ãªã¯ãšã¹ãã®åŠçãããã©ãŒãã³ã¹ã«é倧ãªåœ±é¿ãäžããäžæ¹ã§ãLinux ã®ããã©ãŒãã³ã¹ãšå€éšãµãŒãã¹ãžã®ã¢ã¯ã»ã¹ã調æ»ããããšã§ãã åãµãŒã㌠ã¢ãŒããã¯ãã£ã§ Redis ãšã®éä¿¡ãå®å šã«å¶åŸ¡ããå¿ èŠããããŸãã äžéšã®ã¢ãŒããã¯ãã£ã§ã¯ãããã¯åŒã³åºãã䜿çšããä»ã®ã¢ãŒããã¯ãã£ã§ã¯ã€ãã³ãããŒã¹ã®ããã·ãŒãžã£ã䜿çšããŸãã å€éš Redis ã¯ã©ã€ã¢ã³ã ã©ã€ãã©ãªã䜿çšãããšããã®ã³ã³ãããŒã«ã¯æäŸãããŸããã ããã«ããã®å°ã㪠Redis ã¯ã©ã€ã¢ã³ãã¯ãããã€ãã®æ©èœ (ããŒã®ååŸãèšå®ãå¢åãé åã®ååŸãšè¿œå ) ã®ã¿ãå®è¡ããŸãã ããã«ãRedis ãããã³ã«ã¯éåžžã«ãšã¬ã¬ã³ãã§ã·ã³ãã«ã§ãã ç¹å¥ã«æããå¿ èŠããããŸããã ãã®ãããã³ã«ããã¹ãŠã®äœæ¥ãçŽ XNUMX è¡ã®ã³ãŒãã§å®è¡ãããšããäºå®èªäœãããããããã«ããèããããŠãããã瀺ããŠããŸãã
次ã®å³ã¯ãã¯ã©ã€ã¢ã³ã (ãã©ãŠã¶) ããªã¯ãšã¹ããããšãã«ã¢ããªã±ãŒã·ã§ã³ãè¡ãåäœã瀺ããŠããŸãã /guestbookURL
.
ã²ã¹ããã㯠ã¢ããªã±ãŒã·ã§ã³ã®ä»çµã¿
ã²ã¹ããã㯠ããŒãžãçºè¡ããå¿ èŠãããå Žåããã³ãã¬ãŒããã¡ã¢ãªã«èªã¿åãããã®ãã¡ã€ã« ã·ã¹ãã ãžã®åŒã³åºãã XNUMX åãããRedis ãžã®ãããã¯ãŒã¯åŒã³åºãã XNUMX åãããŸãã ãã³ãã¬ãŒã ãã¡ã€ã«ã«ã¯ãäžã®ã¹ã¯ãªãŒã³ã·ã§ããã®ããŒãžã® HTML ã³ã³ãã³ãã®ã»ãšãã©ãå«ãŸããŠããŸãã ã³ã³ãã³ãã®åçéšåïŒæçš¿ã蚪åè ã«ãŠã³ã¿ãŒïŒçšã®ç¹å¥ãªãã¬ãŒã¹ãã«ããŒããããŸãã ãããã Redis ããåãåããããŒãžã«æ¿å ¥ããå®å šã«åœ¢æãããã³ã³ãã³ããã¯ã©ã€ã¢ã³ãã«æäŸããŸãã Redis ã¯å¢åæã«æ°ããããŒå€ãè¿ããããRedis ãžã® XNUMX åç®ã®åŒã³åºãã¯åé¿ã§ããŸãã ãã ããéåæã€ãã³ãããŒã¹ã®ã¢ãŒããã¯ãã£ãåãããµãŒããŒã®å Žåãå€æ°ã®ãããã¯ãŒã¯åŒã³åºãã¯åŠç¿ãç®çãšããè¯ããã¹ããšãªããŸãã ãã®ãããRedis ã®èšªåè æ°ã®æ»ãå€ãç Žæ£ããå¥ã®åŒã³åºãã§ã¯ãšãªããŸãã
ãµãŒã㌠ã¢ãŒããã¯ã㣠ZeroHTTPd
ç§ãã¡ã¯ãæ©èœã¯åãã§ããã¢ãŒããã¯ãã£ãç°ãªã XNUMX ã€ã®ããŒãžã§ã³ã® ZeroHTTPd ãæ§ç¯ããŠããŸãã
- å埩ç
- ãã©ãŒã¯ãµãŒã㌠(ãªã¯ãšã¹ãããšã« XNUMX ã€ã®åããã»ã¹)
- Pre-forkãµãŒããŒïŒããã»ã¹ã®äºåãã©ãŒã¯ïŒ
- å®è¡ã¹ã¬ãããåãããµãŒã㌠(ãªã¯ãšã¹ãããšã« XNUMX ã€ã®ã¹ã¬ãã)
- äºåã¹ã¬ããäœæã®ãããµãŒããŒ
- ã¢ãŒããã¯ãã£ããŒã¹
poll()
- ã¢ãŒããã¯ãã£ããŒã¹
epoll
ãµãŒããŒã« HTTP ãªã¯ãšã¹ããããŒãããããšã§ãåã¢ãŒããã¯ãã£ã®ããã©ãŒãã³ã¹ã枬å®ããŸãã ãã ãã䞊åæ§ã®é«ãã¢ãŒããã¯ãã£ãæ¯èŒãããšãã¯ãšãªã®æ°ãå¢å ããŸãã XNUMX åãã¹ãããå¹³åãèšç®ããŸãã
ãã¹ãæ¹æ³
ZeroHTTPd è² è·ãã¹ãã®ã»ããã¢ãã
ãã¹ããå®è¡ãããšãã¯ããã¹ãŠã®ã³ã³ããŒãã³ããåããã·ã³äžã§å®è¡ãããªãããšãéèŠã§ãã ãã®å Žåãã³ã³ããŒãã³ãã CPU ãããã£ãŠç«¶åãããããOS ã«ã¯è¿œå ã®ã¹ã±ãžã¥ãŒãªã³ã° ãªãŒããŒããããçºçããŸãã éžæããåãµãŒã㌠ã¢ãŒããã¯ãã£ã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®ãªãŒããŒãããã枬å®ããããšã¯ããã®æŒç¿ã®æãéèŠãªç®æšã® XNUMX ã€ã§ãã ããã«å€æ°ãè¿œå ãããšãããã»ã¹ã«æªåœ±é¿ãåãŒããŸãã ãããã£ãŠãäžã®å³ã®èšå®ãæé©ã«æ©èœããŸãã
ãããã®ãµãŒããŒã¯ããããäœãããã®ã§ãããã?
- load.unixism.net: ãããå®è¡å Žæã§ã
ab
, Apache ãã³ãããŒã¯ ãŠãŒãã£ãªãã£ã ããã«ããããµãŒã㌠ã¢ãŒããã¯ãã£ã®ãã¹ãã«å¿ èŠãªè² è·ãçæãããŸãã - nginx.unixism.net: ãµãŒã㌠ããã°ã©ã ã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãå®è¡ãããå ŽåããããŸãã ãããè¡ãã«ã¯ãé©åãªèšå®ãåãã Nginx ãµãŒããŒãããŒã ãã©ã³ãµãŒãšããŠæ©èœããŸãã ab ç§ãã¡ã®ãµãŒããŒããã»ã¹ã«ã
- zerohttpd.unixism.net: ããã§ã¯ãXNUMX ã€ã®ç°ãªãã¢ãŒããã¯ãã£ã§ãµãŒã㌠ããã°ã©ã ãäžåºŠã« XNUMX ã€ãã€å®è¡ããŸãã
- redis.unixism.net: ãã®ãµãŒããŒã¯ Redis ããŒã¢ã³ãå®è¡ããã²ã¹ãããã¯ã®ãšã³ããªãšèšªåè ã«ãŠã³ã¿ãŒãä¿åãããŸãã
ãã¹ãŠã®ãµãŒããŒã¯åãããã»ããµ ã³ã¢äžã§å®è¡ãããŸãã èãæ¹ã¯ãåã¢ãŒããã¯ãã£ã®æ倧ããã©ãŒãã³ã¹ãè©äŸ¡ããããšã§ãã ãã¹ãŠã®ãµãŒã㌠ããã°ã©ã ã¯åãããŒããŠã§ã¢ã§ãã¹ããããããããããæ¯èŒã®ããŒã¹ã©ã€ã³ã«ãªããŸãã ç§ã®ãã¹ã ã»ããã¢ããã¯ãDigital Ocean ããã¬ã³ã¿ã«ããä»®æ³ãµãŒããŒã§æ§æãããŠããŸãã
ç§ãã¡ã¯äœã枬å®ããŠããã®ã§ãããã?
ããŸããŸãªææšã枬å®ã§ããŸãã ããŸããŸãªäžŠååŠçã¬ãã«ã§ãµãŒããŒã«ãªã¯ãšã¹ããããŒãããããšã«ãããç¹å®ã®æ§æã«ãããåã¢ãŒããã¯ãã£ã®ããã©ãŒãã³ã¹ãè©äŸ¡ããŸããè² è·ã¯åæãŠãŒã¶ãŒæ°ã 20 ãã 15 ã«å¢å ããŸãã
è©Šéšçµæ
次ã®ã°ã©ãã¯ãããŸããŸãªã¢ãŒããã¯ãã£äžã®ããŸããŸãªäžŠååŠçã¬ãã«ã§ã®ãµãŒããŒã®ããã©ãŒãã³ã¹ã瀺ããŠããŸãã Y 軞㯠XNUMX ç§ãããã®ãªã¯ãšã¹ãæ°ãX 軞ã¯äžŠåæ¥ç¶ã§ãã
以äžã¯çµæã瀺ãè¡šã§ãã
XNUMXç§ãããã®ãªã¯ãšã¹ãæ°
䞊è¡æ§
å埩çãª
ãã©ãŒã¯
ãã¬ãã©ãŒã¯
ã¹ããªãŒãã³ã°
ãã¬ã¹ããªãŒãã³ã°
äžè«èª¿æ»
ãšããŒã«
20
7
112
2100
1800
2250
1900
2050
50
7
190
2200
1700
2200
2000
2000
100
7
245
2200
1700
2200
2150
2100
200
7
330
2300
1750
2300
2200
2100
300
â
380
2200
1800
2400
2250
2150
400
â
410
2200
1750
2600
2000
2000
500
â
440
2300
1850
2700
1900
2212
600
â
460
2400
1800
2500
1700
2519
700
â
460
2400
1600
2490
1550
2607
800
â
460
2400
1600
2540
1400
2553
900
â
460
2300
1600
2472
1200
2567
1000
â
475
2300
1700
2485
1150
2439
1500
â
490
2400
1550
2620
900
2479
2000
â
350
2400
1400
2396
550
2200
2500
â
280
2100
1300
2453
490
2262
3000
â
280
1900
1250
2502
倧ããªåºãã
2138
5000
â
倧ããªåºãã
1600
1100
2519
â
2235
8000
â
â
1200
倧ããªåºãã
2451
â
2100
10
â
â
倧ããªåºãã
â
2200
â
2200
11
â
â
â
â
2200
â
2122
12
â
â
â
â
970
â
1958
13
â
â
â
â
730
â
1897
14
â
â
â
â
590
â
1466
15
â
â
â
â
532
â
1281
ã°ã©ããšè¡šãããåæãªã¯ãšã¹ãã 8000 ãè¶ ãããšãæ®ã£ãŠãããã¬ã€ã€ãŒã¯ pre-fork ãš epoll ã® XNUMX 人ã ãã§ããããšãããããŸãã è² è·ãå¢å ãããšãããŒãªã³ã°ããŒã¹ã®ãµãŒããŒã®ããã©ãŒãã³ã¹ã¯ã¹ããªãŒãã³ã°ãµãŒããŒãããäœäžããŸãã ã¹ã¬ããäºåäœæã¢ãŒããã¯ãã£ã¯ãepoll ã®ç«¶åçžæãšãªãã«å€ããŸããããã¯ãLinux ã«ãŒãã«ã倧éã®ã¹ã¬ãããããã«é©åã«ã¹ã±ãžã¥ãŒã«ãããã蚌æããŠããŸãã
ZeroHTTPd ãœãŒã¹ã³ãŒã
ZeroHTTPd ãœãŒã¹ã³ãŒã
ZeroHTTPd â §ââ 01_iterative â âââ main.c â §ââ 02_forking â §ââ main.c §ââ 03_preforking â §ââ main.c §ââ 04_ threading â §ââ main.c §ââ 05_prethreading â §ââ main.c â âââ 06_poll â §ââ main.c §ââ 07_epoll â âââ main.c §ââ Makefile §ââ public â §ââ Index .html â âââ tux .png âââ ãã³ãã¬ãŒã ââ ã²ã¹ããã㯠ââââindex.html
ãã¹ãŠã®ã¢ãŒããã¯ãã£çšã® XNUMX ã€ã®ãã£ã¬ã¯ããªã«å ããŠãæäžäœãã£ã¬ã¯ããªã«ã¯ããã« XNUMX ã€ã®ãã£ã¬ã¯ã㪠(public ãš template) ããããŸãã XNUMX ã€ç®ã«ã¯ãindex.html ãã¡ã€ã«ãšæåã®ã¹ã¯ãªãŒã³ã·ã§ããã®ç»åãå«ãŸããŠããŸãã ä»ã®ãã¡ã€ã«ããã©ã«ããŒãããã«çœ®ãããšãã§ããZeroHTTPd ã¯ãããã®éçãã¡ã€ã«ãåé¡ãªãæäŸããã¯ãã§ãã ãã©ãŠã¶å ã®ãã¹ããããªã㯠ãã©ã«ããŒå ã®ãã¹ãšäžèŽããå ŽåãZeroHTTPd ã¯ãã®ãã£ã¬ã¯ããªå ã§index.html ãã¡ã€ã«ãæ¢ããŸãã ã²ã¹ãããã¯ã®ã³ã³ãã³ãã¯åçã«çæãããŸãã ããŒã ããŒãžã®ã¿ãããããã®ã³ã³ãã³ãã¯ãã¡ã€ã«ãtemplates/guestbook/index.htmlãã«åºã¥ããŠããŸãã ZeroHTTPd ã¯æ¡åŒµçšã®åçããŒãžãç°¡åã«è¿œå ããŸãã ãŠãŒã¶ãŒããã®ãã£ã¬ã¯ããªã«ãã³ãã¬ãŒããè¿œå ããå¿ èŠã«å¿ã㊠ZeroHTTPd ãæ¡åŒµã§ãããšããèãã§ãã
XNUMX å°ã®ãµãŒããŒãã¹ãŠãæ§ç¯ããã«ã¯ã次ã®ã³ãã³ããå®è¡ããŸãã make all
æäžäœãã£ã¬ã¯ããªãã - ãã¹ãŠã®ãã«ãããã®ãã£ã¬ã¯ããªã«è¡šç€ºãããŸãã å®è¡å¯èœãã¡ã€ã«ã¯ãèµ·åå
ã®ãã£ã¬ã¯ããªå
ã§ãããªã㯠ãã£ã¬ã¯ããªãšãã³ãã¬ãŒã ãã£ã¬ã¯ããªãæ¢ããŸãã
Linux API
ãã®èšäºã·ãªãŒãºã®æ å ±ãç解ããããã«ãLinux API ã«ç²ŸéããŠããå¿ èŠã¯ãããŸããã ãã ããã€ã³ã¿ãŒãããäžã«ã¯åèè³æãããããããã®ã§ããã®ãããã¯ã«ã€ããŠè©³ããèªãããšããå§ãããŸãã Linux API ã®ããã€ãã®ã«ããŽãªã«ã€ããŠã觊ããŸãããäž»ã«ããã»ã¹ãã¹ã¬ãããã€ãã³ãããããã¯ãŒã¯ ã¹ã¿ãã¯ã«çŠç¹ãåœãŠãŸãã Linux API ã«é¢ããæžç±ãèšäºã«å ããŠã䜿çšãããã·ã¹ãã ã³ãŒã«ãã©ã€ãã©ãªé¢æ°ã«ã€ããŠã¯ mana ãèªãããšããå§ãããŸãã
ããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£
ããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ã«ã€ããŠã®æ³šæç¹ã XNUMX ã€ãããŸãã çè«çã«ã¯ããããã®éã«é¢é£æ§ã¯ãããŸããã å¿çæéãæ°ããªç§ã§éåžžã«ããŸãæ©èœãã Web ãµãŒãã¹ãäœæããããšã¯ã§ããŸããããŸã£ããæ¡åŒµã§ããŸããã åæ§ã«ãå¿çã«æ°ç§ããããããã©ãŒãã³ã¹ã®äœã Web ã¢ããªã±ãŒã·ã§ã³ããããããããŸããããããã¯æ°äžäººã®åæãŠãŒã¶ãŒãåŠçã§ããããã«æ°ååã«æ¡åŒµã§ããŸãã ãã ããé«æ§èœãšæ¡åŒµæ§ã®çµã¿åããã¯éåžžã«åŒ·åã§ãã äžè¬ã«ãé«æ§èœã¢ããªã±ãŒã·ã§ã³ã¯ãªãœãŒã¹ãæ§ããã«äœ¿çšããããããµãŒããŒäžã®ããå€ãã®åæãŠãŒã¶ãŒã«å¹ççã«ãµãŒãã¹ãæäŸããã³ã¹ããåæžããŸãã
CPU ããã³ I/O ã¿ã¹ã¯
æåŸã«ãã³ã³ãã¥ãŒãã£ã³ã°ã§ã¯ãåžžã« I/O ãš CPU ã® XNUMX çš®é¡ã®ã¿ã¹ã¯ãèããããŸãã ã€ã³ã¿ãŒãããçµç±ã§ã®ãªã¯ãšã¹ãã®åä¿¡ (ãããã¯ãŒã¯ I/O)ããã¡ã€ã«ã®æäŸ (ãããã¯ãŒã¯ããã³ãã£ã¹ã¯ I/O)ãããŒã¿ããŒã¹ãšã®éä¿¡ (ãããã¯ãŒã¯ããã³ãã£ã¹ã¯ I/O) ã¯ãã¹ãŠ I/O ã¢ã¯ãã£ããã£ã§ãã äžéšã®ããŒã¿ããŒã¹ ã¯ãšãªã¯ãCPU ã«è² è·ããããå ŽåããããŸã (䞊ã¹æ¿ããXNUMX äžä»¶ã®çµæã®å¹³ååãªã©)ã ã»ãšãã©ã® Web ã¢ããªã±ãŒã·ã§ã³ã¯å¯èœãªæ倧 I/O ã«ãã£ãŠå¶éãããŠãããããã»ããµãŒããã«å®¹éã§äœ¿çšãããããšã¯ã»ãšãã©ãããŸããã äžéšã® I/O ã¿ã¹ã¯ã倧éã® CPU ã䜿çšããŠããããšãããã£ãå Žåãããã¯ã¢ããªã±ãŒã·ã§ã³ ã¢ãŒããã¯ãã£ã貧匱ã§ããããšã瀺ããŠããå¯èœæ§ãé«ããªããŸãã ããã¯ãCPU ãªãœãŒã¹ãããã»ã¹ç®¡çãšã³ã³ããã¹ãåãæ¿ãã«æµªè²»ãããããšãæå³ããå¯èœæ§ããããããã¯ãŸã£ãã圹ã«ç«ã¡ãŸããã ç»ååŠçãé³å£°ãã¡ã€ã«ã®å€æãæ©æ¢°åŠç¿ãªã©ãè¡ãå Žåãã¢ããªã±ãŒã·ã§ã³ã«ã¯åŒ·å㪠CPU ãªãœãŒã¹ãå¿ èŠã§ãã ããããã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã¯åœãŠã¯ãŸããŸããã
ãµãŒã㌠ã¢ãŒããã¯ãã£ã®è©³çŽ°ã確èªãã
ããŒã I: å埩ã¢ãŒããã¯ã㣠ããŒã IIã ãã©ãŒã¯ãµãŒã㌠ããŒãâ ¢ã ããªãã©ãŒã¯ãµãŒã㌠ããŒã IVã å®è¡ã¹ã¬ãããåãããµãŒã㌠ããŒã V. ããªã¹ã¬ãããµãŒã㌠ããŒã VIã POLããŒã¹ã®ã¢ãŒããã¯ã㣠ããŒã VIIã epoll ããŒã¹ã®ã¢ãŒããã¯ãã£
åºæïŒ habr.com