2003ǯ2·î15Æü Matchan
web¤Ç¥¢¥¯¥Æ¥£¥Ö¤Ê¥Ú¡¼¥¸¡¢¥À¥¤¥Ê¥ß¥Ã¥¯¤Ê¥Ú¡¼¥¸¤òºî¤ëÉáÄ̤ÎÊýË¡¤Ï¡¢CGI (Common
Gateway Interface)¤ò»È¤¦¤³¤È¤Ç¤¹¡£ CGI¤Ï¡¢¥æ¡¼¥¶¡¼¡Ê¥Ö¥é¥¦¥¶¡Ë¤«¤é¤Î¥ê¥¯¥¨¥¹¥È¤Ë±þ¤¸¤Æweb
server ¾å¤ÇÁö¤ë¥×¥í¥°¥é¥à¤Ç¡¢·ë²Ì¤È¤·¤Æhtml¤ä²èÁü¥Õ¥¡¥¤¥ë¤òÀ¸À®¤·¡¢ web
server¤¬¤½¤ì¤ò¥æ¡¼¥¶¡¼¤Î¥Ö¥é¥¦¥¶¤ËÆϤ±¤Þ¤¹¡£¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¸¡º÷·ë²Ì¤òɽ¼¨¤¹¤ë¥Ú¡¼¥¸¤Ê¤É¤Ï¡¢¤Þ¤Á¤¬¤¤¤Ê¤¯¥µ¡¼¥Ð¡¼Â¦¤ÇCGI¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
CGI¤Îµ½Ò¤Ë¤Ï¡¢perl¤äphp¤Ê¤É¤Î¥¤¥ó¥¿¥×¥ê¥¿¸À¸ì¤¬»È¤ï¤ì¤ë¤³¤È¤¬Â¿¤¤¤è¤¦¤Ç¤¹¡£ sh, bash¤Ê¤É¤Î¥·¥§¥ë¸À¸ì¤â¿¾¯»È¤ï¤ì¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¤¬¡¢C¤Î¤è¤¦¤Ê¥³¥ó¥Ñ¥¤¥é·¿¸À¸ì¤Çµ½Ò¤µ¤ì¤ë¤³¤È¤Ï¤Û¤È¤ó¤É¤¢¤ê¤Þ¤»¤ó¡£¤³¤ì¤é¤Î¿·¶½¸À¸ì¡Ê¡©¡Ë¤¬Îɤ¯»È¤ï¤ì¤ëÍýͳ¤Ï¡¢¡.Èæ³ÓŪ½é´ü¤«¤é CGI¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤¬ÍÑ°Õ¤µ¤ì¤¿¤³¤È,¡¡¢.postgres¤Ê¤É¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ø¤ÎÀܳ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤¬ ÍÑ°Õ¤µ¤ì¤¿¤³¤È,¤ÎÆó¤Ä¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹. ¡Ê3ÈÖÌܤ˥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¤Ç¤¢¤Ã¤¿¤³¤È¤òÉÕ¤±²Ã¤¨¤¿¤¯¤Ê¤ê¤Þ¤¹¤¬¡Ë¡£ Perl¤äPhp¤Ë¤Ï¡¢Â¿¤¯¤Îµ¡Ç½¤¬¥é¥¤¥Ö¥é¥ê¤È¤·¤ÆÁȤ߹þ¤Þ¤ì¤Þ¤¹¤«¤é¡¢²¿¤«¤ò¤ä¤ë¤È¤¡¢ ¤¿¤È¤¨¤Ðñ¸ì¤Î¿ô¤ò¿ô¤¨¤ë¤Î¤Ë¡¢¤¤¤Á¤¤¤Á¥×¥í¥»¥¹¤òΩ¤Á¾å¤²¤ë¤è¤¦¤Ê¤³¤È¤Ï¤Ê¤¤¤Î¤Ç¡¢ £ó£è¤è¤ê¤Ï¤º¤Ã¤È¸úΨ¤¬Îɤ¯¡¢Ê¸»úÎó½èÍý¤âÆÀ°Õ¤Ç¤¹¡£ ¤Ê¤¼¥³¥ó¥Ñ¥¤¥é·¿¸À¸ì¤¬»È¤ï¤ì¤Ê¤¤¤«¤È¸À¤¨¤Ð¡¢C¤Ê¤É¤Ï¤Ê¤«¤Ê¤«°ìÈ̤οͤˤϼê¤ò½Ð¤·¤Å¤é¤¤¤«¤é¡¢ ½èÍý»þ´Ö¤Ïµ¤¤Ë¤·¤Ê¤¤¤«¤é¡Ê¤À¤Ã¤Æ»È¤¦¤Î¤Ï¼«Ê¬¤¸¤ã¤Ê¤¯¤Æ¾¤Î¿Í¤À¤â¤Î¡©¡Ë¡¢¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£ C¤Ç¤Ï³«È¯¤Ë¼ê´Ö¤¬¤«¤«¤ë¤Î¤Ï³Î¤«¤Ç¤¹¤¬¡¢ ¡ÖCGI¤Î½èÍý»þ´Ö¤Ïµ¤¤Ë¤·¤Ê¤¯¤ÆÎɤ¤¡¢¥·¥§¥ë¤è¤ê®¤¤¤«¤é¤¤¤¤¤¸¤ã¤Ê¤¤¤Î¡×¡¢ ¤È¤¤¤¦¤Î¤Ï´Ö°ã¤Ã¤Æ¤¤¤ë¤Î¤Ç¤Ï¤Ê¤¤¤«¡¢¤È¤¤¤¦¤Î¤¬ËܹƤÎ1ÈÖÌܤμñ»Ý¤Ç¤¹¡£
½èÍý»þ´Ö¤Ïµ¤¤Ë¤·¤Ê¤¯¤Æ¤è¤¤¤Î¤«¡©CGI¤ËÍ¿¤¨¤é¤ì¤¿½èÍý»þ´Ö¤Ï¡¢¥æ¡¼¥¶¡¼¤¬¥Ü¥¿¥ó¤ä¥ê¥ó¥¯¤ò¥¯¥ê¥Ã¥¯¤·¤Æ¤«¤é¼¡¤Î²èÌ̤¬É½¼¨¤µ¤ì¤ë¤Þ¤Ç¤Î¿ôÉ䬸ÂÅ٤Ǥ¹¡£¤â¤·¤½¤Î¥µ¥¤¥È¤¬¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤Î¿Íµ¤¥µ¥¤¥È¤Ç¡¢°ìÉä˰ì²ó¤â¤Î¥¢¥¯¥»¥¹¤¬¤¢¤ë¤Ê¤é¤Ð¡¢1ÉðÊÆâ¤Ç½ª¤ï¤é¤»¤Ê¤¤¤È¥µ¡¼¥Ð¡¼¤Ï¥Ñ¥ó¥¯¤¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£ÄÌ¿®»þ´Ö¤â¹Íθ¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¥Í¥Ã¥È¥ï¡¼¥¯¤Îlatency¤È¤·¤Æ1É䯤餤¤ò¡¢Àè¤Û¤É¤ÎµöÍƸÂÅ٤Ȥ·¤¿¿ôÉ䫤麹¤·°ú¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£¤µ¤é¤Ë°ì¤Ä¤Î²èÌ̤¬°ì¤Ä¤ÎCGI¤òÁö¤é¤»¤Æ´°·ë¤¹¤ë¤È¤Ï¸Â¤ê¤Þ¤»¤ó¡£¤½¤Î¤è¤¤Î㤬¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤Ç¤·¤ç¤¦¡£¥Õ¥ì¡¼¥à¤ò»È¤Ã¤¿¥Ú¡¼¥¸¤À¤È³Æ¡¹¤Î¥Õ¥ì¡¼¥à¤¬CGI¤È¤¤¤¦¤³¤È¤â¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£
¤È¤¤¤¦°ìÈÌŪ¤Ê¹Í¤¨Êý¤¬²Äǽ¤Ç¤·¤ç¤¦¡£¤½¤³¤Ç»×¤¤Åö¤¿¤ë¤Î¤¬¡¢1990ǯÂåÁ°È¾¤Î¥¤¥ó¥¿¡¼¥Í¥Ã¥È¤ÎóÕÌÀ´ü¤Î¤³¤È¡£Åö»þ¡¢¤³¤ÎÆó¤Ä¤Î¥·¥Ê¥ê¥ª¤Î¤¦¤Á¡¢À¤³¦Ãæ¤Î¤Û¤È¤ó¤É¤Î¥µ¥¤¥È¡Ê¤È¤¤¤Ã¤Æ¤â¿ô¤Ïº£¤È¤ÏÈæ¤Ù¤â¤Î¤Ë¤Ê¤é¤Ê¤¤¤Ç¤·¤ç¤¦¤¬¡Ë¤¬¡¢Âè2¤Î¤Î¥·¥Ê¥ê¥ª¤òºÎÍѤ¹¤ë´Ä¶¤Ë¤¢¤Ã¤¿¤³¤È¤Ç¤·¤ç¤¦¡£¥¢¥¯¥»¥¹¤ÏÌÇ¿¤ËÍè¤Ê¤¤¡¢ÄÌ¿®Â®ÅÙ¤ÏÃÙ¤¤¡¢CGI¤Ê¤ó¤Æ°ì¤Ä¤À¤±¡¢¤À¤Ã¤¿¤éCGI¤ÏPerl¤Ç½½Ê¬¤µ¡¢¤È¤¤¤¦¤³¤È¤Ç¤Ï¤Ê¤«¤Ã¤¿¤Ç¤·¤ç¤¦¤«¡©¤½¤·¤Æ¤½¤ì¤¬¡¢¤½¤Î¸å¤âCGI¤ÏPerl¤Ç½ñ¤¯¤â¤Î¡¢¤È¿®¤¸¹þ¤Þ¤ì¤Æ狼¤Î¥³¡¼¥É¤ò¼Ú¤ê¤Æ¤¤Æ¤Ï¼ê¤òÆþ¤ì¤Æ¡¢¤È¤¤¤¦¤Õ¤¦¤Ë¤Ï¤Ó¤³¤Ã¤ÆÍ褿¤Î¤Ç¤Ï¤Ê¤¤¤Ç¤·¤ç¤¦¤«¡©
¤µ¤Æ¡¢¼¡¤ËÌäÂê¤Ë¤¹¤ë¤Î¤Ï¡¢Perl¤ÎCGI¥×¥í¥°¥é¥à¤¬Î©¤Á¾å¤¬¤ë²áÄø¤Ç¤¹¡£web
server¤Ï¡¢http¤Î¥ê¥¯¥¨¥¹¥È¤ò¼õ¤±¤ÆCGI¤òµ¯Æ°¤·¤Þ¤¹¤¬¡¢¤½¤ì¤Ï¡¢Perl¤Î¥¤¥ó¥¿¥×¥ê¥¿¤òµ¯Æ°¤·¡¢
Perl¤¬CGI¥×¥í¥°¥é¥à¡Ê¥¹¥¯¥ê¥×¥È¡Ë¤òÆɤ߹þ¤ó¤Ç¼Â¹Ô¤·¡¢·ë²Ì¤òhtml¥É¥¥å¥á¥ó¥È¤È¤·¤Æweb
server¤ËÁ÷¤ë¡¢¤È¤¤¤¦¼ê½ç¤Ë¤Ê¤ê¤Þ¤¹¡£
¾å¤Ç½Ò¤Ù¤¿¤è¤¦¤Ë¡¢°ì¤Ä¤ÎCGI¤Ï0.1¡Á1É䯤餤¤ÇÁö¤êÈ´¤±¤Æ¤·¤Þ¤¤¤Þ¤¹¤¬¡¢
¤½¤¦¤¤¤¦Ã»»þ´Ö¤ÎÃæ¤Ç¤Ï¡¢µ¯Æ°¤Ë´Ø¤ï¤ë»þ´Ö¤¬ÁêÂÐŪ¤ËÂ礤ÊÈæ½Å¤òÀê¤á¤ë¤Î¤Ç¤¹¡£
²¼¤Îɽ¤Ï¡¢Perl, PHP, sh ¤È¤¤¤¦ÉáÄ̤ÎCGI scripting¤Ë»È¤ï¤ì¤½¤¦¤Ê ¥¤¥ó¥¿¥×¥ê¥¿¸À¸ì¤Î¥Æ¥¥¹¥È¥µ¥¤¥º¡Ê¥×¥í¥°¥é¥à¥³¡¼¥É¤Î¥µ¥¤¥º¡Ë¡¢ ²¾ÁÛ¥á¥â¥ê¡¢¾ïÃó¥á¥â¥ê¡¢¤ò¼¨¤·¤Þ¤¹¡£²¿¤â½èÍý¤ò¤·¤Ê¤¤¤È¤¤Ç¤¹¤«¤é¡¢ ¤³¤ì¤é¤¬ºÇ¾®ÃͤǤ¹¡£ ¤³¤ì¤é¤Î¥á¥â¥ê¤¬Â礤¯¤Ê¤ë¤Èµ¯Æ°¤âÃÙ¤¯¤Ê¤ë¤À¤í¤¦¤È¿ä¬¤µ¤ì¤Þ¤¹¡£
¸À¸ì | text¥µ¥¤¥º | ²¾ÁÛ¥á¥â¥ê | ¾ïÃó¥á¥â¥ê |
---|---|---|---|
Perl | 0.7MB | 3.8MB | 1 MB |
PHP | 1 MB | 8.2MB | 2.8MB |
sh | 0.5 MB | 1.4MB | 1.4MB |
¤³¤Î¥á¥â¥ê¤Î³ä¤êÅö¤Æ¤ÈÆɤ߹þ¤ß¤ËÍפ¹¤ë»þ´Ö¡¢¥é¥¤¥Ö¥é¥ê¤Ê¤É¤È¥ê¥ó¥¯¤¹¤ë»þ´Ö¡¢ ¥á¥â¥ê¾å¤ËPerl¤ÎËÝÌõ¼Â¹Ô¤ËɬÍפʹ½Â¤¤òºîÀ®¤¹¤ë»þ´Ö¡¢¤Ê¤É¤¬¡¢Perl¤Îµ¯Æ°¤ËÍפ¹¤ë»þ´Ö¤ÎÃæ¿È¤Ç¤¹¡£ Perl¤¬Áö¤ê»Ï¤á¤ë¤È¡¢CGI¼Â¹Ô¤ËɬÍפÊPerl¥é¥¤¥Ö¥é¥ê¤òÆɤ߹þ¤à¡¢ »ØÄꤵ¤ì¤¿CGI¥×¥í¥°¥é¥à¤òÆɤ߹þ¤à¡¢¤³¤È¤¬É¬Íפǡ¢ ¤³¤ì¤Ç¤ä¤Ã¤ÈCGI¤ÎËÜÂΤνèÍý¤¬»Ï¤á¤é¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£ ;Ã̤ʤ¬¤é¡¢¤½¤ÎËÜÂΤ¬¡¢º£Æü¤ÎÆüÉÕ¤òɽ¼¨¤¹¤ë¡¢¤È¤¤¤¦¤è¤¦¤Ê¤Ï¤«¤Ê¤¤¥×¥í¥°¥é¥à¤À¤È¡¢ µ¯Æ°¤ËÍפ·¤¿½àÈ÷¤ÎÊý¤¬Â¿¤¯¤Î½èÍý»þ´Ö¤òÍפ¹¤ë¤³¤È¤Ë¤Ê¤ë¤Ç¤·¤ç¤¦¡£ ¤½¤ì¤Ç¡¢SSI (server side include)¤È¤¤¤¦¡¢¤µ¤µ¤¤¤Ê¥×¥í¥°¥é¥à¤Ïweb server¤ÎÃæ¤Ç¤¹¤Þ¤»¤ëÊý¼°¤â¼ÂÍѲ½¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
Hello World¤ò½ÐÎϤ·¤Æ½ª¤ï¤ë¥×¥í¥°¥é¥à¤òPerl, PHP, C, Lisp¤Î4¼ïÎà¤Î¸À¸ì¤ÇÍÑ°Õ¤·¤Þ¤·¤¿¡£
¿Æ¤È¤Ê¤ë¥×¥í¥»¥¹¤«¤é¡¢¤³¤é¤é¤Î¥×¥í¥°¥é¥à¤Î¤½¤ì¤¾¤ì¤òfork
and exec¤·¡¢·ë²Ì¤òpipe¤ò»È¤Ã¤Æread¤·¤Æ½ª¤ï¤ë¥µ¥¤¥¯¥ë¤ò100-1000²ó·«¤êÊÖ¤·¡¢elapsed
time¤ò¬Äꤷ¤¿·ë²Ì¤¬²¼É½¤Ç¤¹¡£¥×¥í¥»¥Ã¥µ¤ÏEPIA 533MHz¤Ç¤¹¡£
½èÍý | Perl | PHP | C | Lisp | |
²¾ÁÛ¥á¥â¥êÎÌ | 3.8MB | 8.2MB | 5.6MB | ||
¾ïÃó¥á¥â¥êÎÌ | 1.0MB | 2.8MB | 2.6MB | ||
£± | ¥¹¥¯¥ê¥×¥È¸À¸ì½èÍý·Ï¤òΩ¤Á¾å¤²¤ë (¥á¥â¥ê¤ò³ä¤êÅö¤Ætext¤òÆɤ߹þ¤à,ld.so¤¬¥ê¥ó¥¯¤¹¤ë, ½èÍý·Ï¤Î½é´ü²½) |
42ms | 140-150ms | 7ms | 270ms |
2 | CGI¤ËɬÍפʥ饤¥Ö¥é¥ê¡¢CGI¥×¥í¥°¥é¥à¤òÆɤ߹þ¤à | ||||
3 | CGIËÜÂΤνèÍý¤ò¤·¤Æ.HTMLÅù¤òÀ¸À®¤¹¤ë |
±¦Ã¼¤ËLisp¤Î¥Ç¡¼¥¿¤òºÜ¤»¤Æ¤¢¤ê¤Þ¤¹¡£Ëܲ»¤ò¸À¤¦¤È¡¢Lisp¤ÇCGI¤ò½ñ¤¤¿¤¤¤Î¤À¤¬¡¢ ¤É¤¦¤âΩ¤Á¾å¤¬¤ê¤¬ÃÙ¤¯¤Æ¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹°¤¤¤Î¤Ç¡¢Â®¤¯¤Ê¤ëÊýË¡¤ò¹Í¤¨¤è¤¦¤È¸À¤¦¤³¤È¤Ê¤Î¤Ç¤¹¡£ lisp¤È¸À¤¦¤È¡¢³ç¸Ì¤À¤é¤±¤Ç½¹¤¤¡¢car, cdr, cons¡¡¤Ê¤ó¤Æ°ÕÌ£ÉÔÌÀ¤Ç¸Å¤¯¤µ¤¤¡¢¤È¤¤¤¦¿Í¤¬É¬¤º¤¤¤Þ¤¹¡£ »ä¤Ë¸À¤ï¤»¤ë¤È¡¢Perl¤äsh¤Î$ÊÑ¿ô¤ÎÊý¤¬¤è¤Û¤É³ç¸Ì°¤¯¡¢ @ÊÑ¿ô¤ä%ÊÑ¿ô¤Ë»ê¤Ã¤Æ¤Ï¡¢Ì¤äƤ·¤Þ¤¤¤Þ¤¹¡£¸À¤¤Á褤¤Ï¤ä¤á¤Þ¤·¤ç¤¦:-)
£²¤ÎCGIÍѥ饤¥Ö¥é¥ê¤ÎÆɤ߹þ¤ß¤äCGI¥×¥í¥°¥é¥à¤Î¥í¡¼¥É¤ËÍפ¹¤ë»þ´Ö¤Ï¼Â¬¤Ç¤¤Æ¤¤¤Þ¤»¤ó¤¬¡¢ ¿ô¥ß¥êÉäǤϤʤ¤¤«¤È¿ä¬¤·¤Þ¤¹¡£
CGI¤Ï¤¤¤í¤¤¤í¤Ê¤³¤È¤¬¤Ç¤¤ë¤Î¤Ç¤¹¤¬¡¢¤è¤¯»È¤ï¤ì¤ëCGI¤È¤¤¤¦¤Î¤Ï¤´¤¯¾¯¿ô¤Ç¤¹¡£¾¯¿ô¤À¤«¤é¤³¤½¡¢¥×¥í¥Ð¥¤¥À¤Ïŵ·¿Åª¤ÊCGI¤ò¤¤¤¯¤Ä¤«ÍѰդǤ¤Æ¤¤¤ë¤ï¤±¤Ç¤¹¡£Ãæ¤Ç¤âºÇ¤â¤è¤¯»È¤ï¤ì¤ë¤Î¤¬¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤Ç¤¹¡£¥µ¡¼¥Ð¡¼¤Ë¥«¥¦¥ó¥È¤ò³ÊǼ¤·¤Æ¤ª¤¯¥Õ¥¡¥¤¥ë¤¬¤¢¤Ã¤Æ¡¢¥¢¥¯¥»¥¹¤¬¤¢¤ë¤´¤È¤Ë¤½¤ì¤òincrement¤·¡¢·ë²Ì¤ògif¤Î³¨¤Ë¤·¤Æ½ÐÎϤ·¤Þ¤¹¡£°ìÈÖ»þ´Ö¤¬¤«¤«¤ë¤Î¤Ï¡¢³Æ·å¤Îgif¤Î³¨¤ò¤Ä¤Ê¤¤¤Ç°ì¤Ä¤Îgif file¤Ë¤¹¤ë¤È¤³¤í¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£Perl¤Ç½ñ¤¤¤¿¡¢gifcat.pl¤È¤¤¤¦¥×¥í¥°¥é¥à¤¬¤è¤¯¤Ç¤¤Æ¤¤¤Æ¡¢¤¤¤í¤¤¤í¤Ê¤È¤³¤í¤Ç»È¤ï¤ì¤Æ¤¤¤ë¤è¤¦¤Ç¤¹¡£¤³¤ÎPerl¤Î´Ø¿ô¤Î¼Â¹Ô®ÅÙ¤ò¬¤ê¤¿¤¤¤Î¤Ç¤¹¤¬¡¢»ä¤ÏPerl»È¤¤¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¢»þ´Ö¬Äê´Ø¿ô¤Ê¤É¤òÃΤê¤Þ¤»¤ó¡£¤È¤Ë¤«¤¯¡¢¤È¤Û¤Û¤µ¤ó¤Îgif²òÀϤΥڡ¼¥¸¤ò»²¹Í¤Ë¡¢Lisp¤Çgifcat¤ò½ñ¤¤¤Æ¤ß¤Þ¤·¤¿¡£6·å¤Îgifcat¤ËÍפ¹¤ë»þ´Ö¤Ï¡¢¥¤¥ó¥¿¥×¥ê¥¿¤Ç20ms¡¢¥³¥ó¥Ñ¥¤¥ë¤·¤¿¥³¡¼¥É¤Ç¤Ï3ms¤Û¤É¤Ç¤·¤¿¡£¤³¤Î»þ´Ö¤È¡¢É½1¤Î»þ´Ö¤òÈæ¤Ù¤ë¤È¡¢µ¯Æ°¤ËÍפ¹¤ë»þ´Ö¤ÎÊý¤¬¤º¤Ã¤ÈÂ礤¤¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£
¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤Î¤è¤¦¤Ê·Ú¤¤CGI½èÍý¤Ë¤ª¤¤¤Æ¤Ï¡¢CGIËÜÂΤνèÍý¤è¤ê¤âµ¯Æ°»þ´Ö¤¬»ÙÇÛŪ¤Ë¤Ê¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤·¤¿¡£CGI¤Îµ¯Æ°»þ´Ö¤¬web server¤Ë¤È¤Ã¤ÆÂ礤ÊÉé²Ù¤Ë¤Ê¤ë¤³¤È¤Ï¡¢¤º¤Ã¤È°ÊÁ°¤«¤é¤è¤¯Ç§¼±¤µ¤ì¤Æ¤¤¤Æ¡¢¤¤¤í¤¤¤í¤Ê²ò·èºö¤¬Ä󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£Apache¥µ¡¼¥Ð¡¼¤Ç¤Ï¡¢mod_perl, mod_php¤Ê¤É¤ÎDSO¥â¥¸¥å¡¼¥ë¤Ë¤·¤Æperl¡¢php¤Î¥¤¥ó¥¿¥×¥ê¥¿¤ò¥µ¡¼¥Ð¡¼¤ËÁȤ߹þ¤ó¤Ç¤·¤Þ¤¦¤Î¤¬°ìÈÌŪ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¿·¤¿¤Ê¥×¥í¥»¥¹¤òµ¯¤³¤¹¤Î¤Ç¤Ï¤Ê¤¯¡¢¥¹¥ì¥Ã¥É¤òΩ¤Æ¤ë¤¯¤é¤¤¤Î¼ê´Ö¤ÇºÑ¤Þ¤»¤é¤ì¤ë¤Î¤À¤í¤¦¤È¿äÄꤷ¤Þ¤¹¡£mod_perl¤Î¥Û¡¼¥à¥Ú¡¼¥¸¤Ë¤Ï¡¢cgi¤À¤ÈÉÃ7²ó¤Î¥ê¥¯¥¨¥¹¥È¤Ë¤·¤«±þ¤¨¤é¤ì¤Ê¤¤¤¬¡¢mod_perl¤ËÅÐÏ¿¤·¤Æ¤ª¤¯¤ÈÉÃ240²ó¤Î¥µ¡¼¥Ó¥¹¤¬²Äǽ¤Ë¤Ê¤ë¡¢¤È¤¢¤ê¤Þ¤¹¡£Hello World¤Ç¤¹¤±¤É¤Í¡£httpd.conf¤Çcgi¤ÎÅÐÏ¿¤¬É¬ÍפǤ¹¤¬¡¢CGI¥×¥í¥°¥é¥à¤ÎÊý¤Ë¤Ï²¿¤â¼ê¤ò²Ã¤¨¤Ê¤¯¤ÆÎɤ¤¡¢¤È¤¤¤¦¤Î¤¬¤è¤¤¤Ç¤¹¤Í¡£
¤¿¤À¡¢ÉԻ׵ĤʤΤϡ¢mod_php¤òÁȤ߹þ¤ó¤Àapache¤Î¥×¥í¥»¥¹¤Î¥µ¥¤¥º¤¬¡¢virtual¤Ç5.7MB¡¢¾ïÃóÉô¤¬2.8MB¤¯¤é¤¤¤·¤«¤Ê¤¤¤³¤È¤Ç¤¹¡£libexec¤ËÃÖ¤«¤ì¤¿libperl.so¤Ï¡¢1.2MB°Ì¤Î¥µ¥¤¥º¤¬¤¢¤ê¤Þ¤¹¡£libphp.so¤Ï¡¢1.4MB°Ì¤¢¤ê¤Þ¤¹¡£¤ª¤½¤é¤¯¡¢²¿¤âCGI¤òregister¤·¤Ê¤¤¾õÂ֤Ǥϡ¢¤³¤ì¤é¤Î¥é¥¤¥Ö¥é¥ê¤Ï¥ê¥ó¥¯¤µ¤ì¤Ê¤¤¤Î¤Ç¤·¤ç¤¦¡£mod_python.so¤â¤Ç¤«¤¤¡£¸À¸ì½èÍý·Ï¤ÎDSO¥â¥¸¥å¡¼¥ë¤Ï¡¢Â¾¤Îapache¥â¥¸¥å¡¼¥ë¤ÈÈæ³Ó¤¹¤ë¤È¡¢°µÅÝŪ¤Ë¤Ç¤«¤¤¤Ç¤¹¡£
¸À¸ì·Ï¤ò¥â¥¸¥å¡¼¥ë¤Ë¤·¤ÆÁȤ߹þ¤ó¤Ç¤·¤Þ¤¨¡¢¤È¤¤¤¦¤Î¤Ï¡¢ µ¯Æ°¤Î¥ª¡¼¥Ð¥Ø¥Ã¥É¤ò¤Ê¤¯¤¹¤¿¤á¤Ë¤Ï¥Ù¥¹¥È¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢¤Ê¤ó¤«¶¯°ú¤Ê´¶¤¸¤¬¤·¤Þ¤¹¡£ ¤½¤ó¤Ê¤ó¤¹¤ë¤¯¤é¤¤¤Ê¤é¡¢CGI¥×¥í¥°¥é¥à¤ò¥³¥ó¥Ñ¥¤¥ë¤·¤Æ¤«¤éÁȤ߹þ¤ó¤Ç¤¯¤ì¡¢¤È»×¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
FastCGI¤Ï¡¢¸À¸ì·Ï¤ÈCGI¥×¥í¥°¥é¥à¤òÊÌ¤Î¥×¥í¥»¥¹¤Ë¤·¤Æ¾ïÃ󤵤»¤Æ¤ª¤¡¢ http¥ê¥¯¥¨¥¹¥È¤¬Íè¤ë¤Èsocket¤òÄ̤¸¤Æ¥³¥Þ¥ó¥É¤È·ë²Ì¤Î¸ò´¹¤ò¤¹¤ë¡¢ ¤È¤¤¤¦¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ç¤¹¡£ 'mod_fcgi'¤È¤¤¤¦¥â¥¸¥å¡¼¥ë¤òapache¤ËÁȤ߹þ¤ó¤Ç¤ª¤¤Þ¤¹¡£ ¤Þ¤¿¡¢FastCGI.¥×¥í¥°¥é¥à¤Ë¤Ï¡¢'libfcgi.so'¤ò¥ê¥ó¥¯¤·¤Þ¤¹¡£
Perl, Lisp, sh ¤Ê¤É¤Î¸À¸ì¤Ç¡¢Hello World¤È¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤ÎCGI¤òºî¤ê¡¢°ì²ó¤Î¥ê¥¯¥¨¥¹¥È¤ÎÈ¿±þ»þ´Ö¤ò·×¬¤·¤Þ¤·¤¿¡£»ÄÇ°¤Ê¤¬¤é¡¢¤³¤Î¥µ¡¼¥Ð¡¼¤Ë¤Ïmod_perl¤ò»Å¹þ¤ó¤Ç¤¤¤Þ¤»¤ó¡£
¤½¤ì¤«¤éPerl¤Ç½ñ¤¤¤¿CGI¤òFastCGI¤Ë¤¹¤ëÊýË¡¤ò¤è¤¯ÃΤê¤Þ¤»¤ó¡£sh¤ÏCGI¤·¤«ÊýË¡¤¬¤Ê¤¤¤Ç¤·¤ç¤¦¡£¤¦¡¼¤ó¡¢¤¢¤È¡¢C¤Ç¤â½ñ¤¤¤Æ¤ß¤ë¤«¡£
Lisp¤Ç½ñ¤¤¤¿ FastCGI¤Ï¡¢PostgreSQL¤Î¥é¥¤¥Ö¥é¥ê¤òÆɤ߹þ¤ó¤Ç¥Ç¡¼¥¿¥Ù¡¼¥¹¥µ¡¼¥Á¤Ê¤É;ʬ¤Ê»Å»ö¤â°ì½ï¤Ë¤µ¤»¤Æ¤¤¤Þ¤¹¡£
Perl¤ò¥â¥¸¥å¡¼¥ë¤Ë¤¹¤ë¤ÈËèÉÃ240²ó½èÍý¤Ç¤¤ë¤Èmod_perl¤Î¥µ¥¤¥È¤Ë½ñ¤¤¤Æ¤¢¤Ã¤¿¤Î¤Ç¡¢Perl
module¤Ï¡Ê4ms¡Ë¤È¤·¤Æ¤ª¤¤Þ¤·¤¿¡£CGI¤À¤ÈËèÉÃ7²ó¡¢¤È¤¤¤¦¤³¤È¤Ï140ms¤¯¤é¤¤¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢Perl¤ÎCGI¥é¥¤¥Ö¥é¥ê¤ò¤Á¤ã¤ó¤ÈÆɤ߹þ¤ó¤À¸å¤Çhello
world¤òÊÖ¤¹¤À¤±¤Î¶õ¤·¤¤perl CGI¤Ï¡¢300ms¤¯¤é¤¤¤Ç¤·¤¿¡£¤¦¤Á¤ÎCPU¤Ïperl module¥µ¥¤¥È¤µ¤ó¤ÎȾʬ¤¯¤é¤¤¤ÎÀǽ¤À¤È¤¤¤¦¤³¤È¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤½¤¦¤Ç¤¢¤ì¤Ð¡¢perl
module ¤ÏÇܤÎ8ms¤ÇÈæ³Ó¤¹¤ë¤Î¤¬ÂÅÅö¤Ç¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹»Å»ö¤â¤·¤Æ¤¤¤ëLisp FastCGI¤ÏÁ´¤¯Â½¿§¤Ê¤¤¤Ç¤·¤ç¤¦¡£
¤½¤ì¤É¤³¤í¤«¡¢¤É¤¦¤â¡¢perl ¤Ï¡¢¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤Î¤è¤¦¤Ê½èÍý¤Ï®¤¯¤Ï¤Ê¤¤¤è¤¦¤Ç¤¹¡£µ¯Æ°¤Ï®¤¤¤¬½êÁ§¤Ï¥¤¥ó¥¿¥×¥ê¥¿¡£Lisp¤ÎCGI,
FastCGI¤Ï¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢ÆäËLisp FastCGI¤Î¥«¥¦¥ó¥¿¡¼¤Ï·ë¹½¹â®¤Ç¤¹¡£Lisp¤ÎCGI¤Ï¡¢¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤Î½èÍý¤Ë150ms¤â¤«¤«¤Ã¤Æ¤¤¤ë¤Ç¤Ï¤Ê¤¤¤«¡¢Perl
CGI ¤Ï¥«¥¦¥ó¥¿¡¼¤Î½èÍý¤Ë¤«¤«¤Ã¤Æ¤¤¤ë¤Î¤Ï116ms¤À¤è¡¢¤È¸À¤ï¤ì¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¿½¤·Ìõ¤¢¤ê¤Þ¤»¤ó¡£¥Ù¥ó¥Á¥Þ¡¼¥¯¤¬¤¤¤¤¤«¤²¤ó¤Ê¤Î¤Ç¤¹¡£¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¤Ä¤Ê¤®¤Ë¹Ô¤¯»þ´Ö¤¬100ms¤¯¤é¤¤¤¢¤ë¤È»×¤Ã¤Æ¤¯¤À¤µ¤¤¡£FastCGI¤Ï¡¢PostgreSQL¤È¤ÎÀܳ¤ò¤º¤Ã¤È°Ý»ý¤·¤¿¤Þ¤Þ¤Ç¤¹¤«¤é¡¢º¹¤Î14ms¤Î¤¦¤Á¤Î5ms¤¯¤é¤¤¤¬gif¤Î½èÍý¡¢10ms¤¯¤é¤¤¤¬¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥µ¡¼¥Á¤À¤È¿ä¬¤·¤Þ¤¹¡£
Hello World | ¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼ | ||
Perl CGI | 24ms | 140ms | |
Perl FastCGI | |||
Perl module | (4ms?) | ||
Lisp CGI | 340ms | 490ms | |
Lisp FastCGI | 10ms | 24ms | |
sh CGI | 32ms | ||
sh FastCGI |
¤¤¤º¤ì¤Ë¤»¤è¡¢¤È¤Ë¤«¤¯Lisp¤Î¥¢¥¯¥»¥¹¥«¥¦¥ó¥¿¡¼¤Ï¡¢FastCGI¤Ë¤¹¤ë¤³¤È¤Ç°µÅÝŪ¤Ë®¤¯¤Ê¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£¤½¤ì¤Ë¡ÊÈæ³Ó¤¹¤ë¾å¤Ç¤Ï¤¤¤¤¤«¤²¤ó¤Ê¤Î¤Ç¤¹¤¬¡Ë¡¢¤³¤ÎFastCGI¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤òÄ´¤Ù¤Ë¹Ô¤Ã¤¿¤ê¤â¤¹¤ë¤Î¤Ç¡¢½èÍýÎ̤ϼ¤Ϥº¤Ã¤È¿¤¤¤Î¤Ç¤¹¡£¤È¤¤¤¦¤ï¤±¤Ç¡¢·ëÏÀ¤Ç¤¹¡£
web¤ÎÈ¿±þ¤¬ÃÙ¤¤¤Î¤Ï¥µ¡¼¥Ð¡¼¤¬¸Å¤¤¤»¤¤¤À¡¢ºÇ¿·¥Þ¥·¡¼¥ó¤ËÇ㤤´¹¤¨¤è¤¦¡¢ ¤È¤¤¤¦¤Î¤Ï¡¢¥µ¡¼¥Ð¡¼¤¬¸Å¤¤¤Î¤Ç¤Ï¤Ê¤¯¤Æ¡¢CGI¤¬¸Å¤¤¤Î¤Ç¤¹¡£ hardware¤Ç10ÇÜ®¤¯¤¹¤ë¤Î¤Ï¥³¥¹¥ÈŪ¤Ë¤â¥¨¥Í¥ë¥®¡¼Åª¤Ë¤â ¤ä¤µ¤·¤¯¤Ê¤¤¤Ç¤¹¤è¡£
¤¦¤Á¤Î¥«¥¦¥ó¥¿¡¼¤Ï¡¢Â®¤¤¤À¤±¤Ç¤Ê¤¯¤Á¤ç¤Ã¤È¥¤¥ó¥Æ¥ê¥¸¥§¥ó¥È¤Ç¤¹¡£ Ʊ¤¸¥Ö¥é¥¦¥¶¤«¤é¤Î10ʬ°ÊÆâ¤Î¥¢¥¯¥»¥¹¤Ç¤Ï¥«¥¦¥ó¥È¥¢¥Ã¥×¤·¤Þ¤»¤ó¡£ ¥Ö¥é¥¦¥¶Ëè¤Î¥¢¥¯¥»¥¹¤ÎÅý·×¤Ê¤ó¤«¤â¤È¤Ã¤Æ¤¤¤Þ¤¹¡£