ã¹ã¬ããããŒã«ã®ä»çµã¿ - ãªãã¹ã¬ããã䜿ãåãã®ãïŒ
ã¹ã¬ããããŒã«ã£ãŠããèããã©ãæ®éã«ã¹ã¬ãããäœã£ãŠåŠçããããã¡ãªã®ïŒ
ãã¡ã§ã¯ãªããã©ããã¡ããã¡ãéå¹çãªãã ããã¹ã¬ããã1ã€äœããã³ã«ãOSã¯ã¹ã¿ãã¯é åã®ã¡ã¢ãªç¢ºä¿ïŒã ããã512KBã1MBïŒãã«ãŒãã«ãžã®ç»é²ãã³ã³ããã¹ãã¹ã€ããã®æºåãããªããšãããªããåŠçãçµãã£ããä»åºŠã¯ãã®éã®ç Žæ£åŠçãèµ°ãããªã¯ãšã¹ãã®ãã³ã«ããããã£ãŠãããæ¬æ¥ã®åŠçããæºåãšçä»ãã®ã»ããã³ã¹ããé«ããªããã ã
æ¯åãåŒåœç®±ãè²·ã£ãŠãé£ã¹ããæšãŠãã¿ãããªæãïŒ
ãŸãã«ãã®ã€ã¡ãŒãžã ãïŒã¹ã¬ããããŒã«ã¯ããããããäœåãã®ã¹ã¬ããïŒã¯ãŒã«ãŒã¹ã¬ããïŒãäœã£ãŠãããŠãã¿ã¹ã¯ãã¥ãŒã«å ¥ã£ãŠããä»äºã空ããŠãã¹ã¬ãããé çªã«åãåºããŠåŠçããä»çµã¿ã ããåŠçãçµãã£ããã¹ã¬ããã¯ç Žæ£ãããã«ããŒã«ã«æ»ã£ãŠã次ã®ä»äºãåŸ ã€ãåŒåœç®±ãæŽã£ãŠåå©çšãããããªãã®ã ãã
ãªãã»ã©ïŒã§ãã¹ã¬ããã®æ°ãšããã¥ãŒã®å€§ããã£ãŠãã©ããã£ãŠæ±ºããã®ïŒ
ã¹ã¬ããããŒã«ã«ã¯äž»ã«4ã€ã®ãã©ã¡ãŒã¿ããããããŸããã³ã¢ããŒã«ãµã€ãºãã¯åžžã«ç¶æããæäœã¹ã¬ããæ°ãæ¬¡ã«ãæå€§ããŒã«ãµã€ãºãã¯è² è·ãé«ããšãã«å¢ãããäžéãããã¥ãŒå®¹éãã¯ã¹ã¬ãããå šéšäœ¿çšäžã®ãšãã«ã¿ã¹ã¯ãåŸ æ©ãããè¡åã®é·ãããããŠãããŒãã¢ã©ã€ãæéãã¯ã³ã¢ãµã€ãºãè¶ ããã¹ã¬ãããæã«ãªã£ãŠããæ¶ãããŸã§ã®æéã ãã
Javaã ãš ExecutorService ã£ãŠãã€ã䜿ããã ããïŒçš®é¡ããã£ã±ããã£ãŠããåãããªããã ãã©âŠ
ãã䜿ãã®ã¯3ã€ã ããnewFixedThreadPool ã¯åºå®æ°ã®ã¹ã¬ããã§åããããè² è·ãäºæž¬ãããããããåŠçåããnewCachedThreadPool ã¯å¿ èŠã«å¿ããŠã¹ã¬ããã墿žãããããçæéã§çµããã¿ã¹ã¯ã倧éã«ããå Žé¢ã«åããŠããScheduledThreadPool ã¯ã5ç§åŸã«å®è¡ãã10ç§ããšã«ç¹°ãè¿ããã¿ãããªå®æå®è¡ãã§ããããçšéã«åãããŠéžã¶ã®ã倧äºã ãã
ã¯ãŒã¯ã¹ãã£ãŒãªã³ã°ã£ãŠããã®ãèããããšãããã©ãäœãçãã®ïŒ
ä»äºãçããã ãïŒç¬ïŒãéåžžã®ã¹ã¬ããããŒã«ã¯1ã€ã®å ±æãã¥ãŒããã¿ã¹ã¯ãåãåºããã©ãForkJoinPool ã§ã¯ã¹ã¬ããããšã«å°çšã®ããã¯ïŒäž¡ç«¯ãã¥ãŒïŒãæã£ãŠããã ãèªåã®ãã¥ãŒã空ã«ãªã£ãæãªã¹ã¬ããããå¿ããã¹ã¬ããã®ãã¥ãŒã®å察åŽããã¿ã¹ã¯ããçãã§ãåŠçãããããã§ã¹ã¬ããéã®è² è·ãèªåçã«å¹³æºåããããã ããååž°çã«åå²ã§ããã¿ã¹ã¯ãããšãã°ãœãŒããæ¢çŽ¢ã§ç¹ã«å¹æãçºæ®ãããã
WebãµãŒããŒã§ãã¹ã¬ããããŒã«ã䜿ãããŠãã®ïŒ
ãã¡ããïŒããšãã°Tomcatã«ã¯ãªã¯ãšã¹ããåŠçããã¯ãŒã«ãŒã¹ã¬ããã®ããŒã«ããã£ãŠãããã©ã«ãã§æå€§200ã¹ã¬ãããèšå®ãããŠããHTTPãªã¯ãšã¹ããæ¥ããšç©ºããŠãã¹ã¬ããã«å²ãåœãŠãããŠãã¬ã¹ãã³ã¹ãè¿ãçµãã£ããããŒã«ã«æ»ããNginxã¯ã¡ãã£ãšéã£ãŠãå°æ°ã®ã¯ãŒã«ãŒããã»ã¹ãã€ãã³ãé§åã§æ°åæ¥ç¶ãåæã«æãèšèšã ããã¢ãŒããã¯ãã£ã¯éããã©ãããªãœãŒã¹ãäºå確ä¿ããŠäœ¿ãåãããšããçºæ³ã¯åãã ãã
ã¹ã¬ããããŒã«ã䜿ã£ãŠãŠãããªããè©°ãŸã£ã¡ããããšã£ãŠããã®ïŒ
ããããïŒäžçªæãã®ããã¹ã¬ããããŒã«æ¯æžãã ããããšãã°å šã¹ã¬ãããããŒã¿ããŒã¹ã®ã¬ã¹ãã³ã¹åŸ ã¡ã§ãããã¯ããããšãæ°ãããªã¯ãšã¹ãã¯ãã¥ãŒã«æºãŸãç¶ããŠãæçµçã«ã¿ã€ã ã¢ãŠãã®åµã«ãªããããäžã€ã¯ãããŒã«å ãããããã¯ããã¿ã¹ã¯Aãã¿ã¹ã¯Bã®çµæãåŸ ã£ãŠããŠãã¿ã¹ã¯BãããŒã«å ã®ã¹ã¬ããã§åããŠããã®ã«ã¿ã¹ã¯Aãã¹ã¬ãããå æããŠé¢ããªãâŠã¿ãããªç¶æ³ã ãã察çãšããŠã¯ãI/OåŸ ã¡ãå€ãåŠçãšèšç®åŠçã§ããŒã«ãåé¢ããã®ãåºæ¬ã ãã
æè¿ Java 21 ã§ä»®æ³ã¹ã¬ããã£ãŠããã®ãå ¥ã£ããã©ãã¹ã¬ããããŒã«ãããªããªãã®ïŒ
éã質åã ãïŒProject Loom ã§å°å ¥ãããä»®æ³ã¹ã¬ããã¯ãOSã¹ã¬ããã§ã¯ãªãJVMå éšã®è»œéã¹ã¬ããã§ã1ã€ãããã®ã³ã¹ããæ°çŸãã€ãçšåºŠã100äžåäœã£ãŠãåé¡ãªããããããªã¯ãšã¹ãããšã«1ä»®æ³ã¹ã¬ãããå²ãåœãŠããã¹ã¿ã€ã«ãçŸå®çã«ãªã£ããã ãI/Oã§ãããã¯ããŠããè£ã§OSã¹ã¬ãããå¥ã®ä»®æ³ã¹ã¬ããã«åãæ¿ããããæ¯æžããªãããã ããCPUéçŽåã®åŠçã§ã¯OSã¹ã¬ããããŒã¹ã®ããŒã«ãäŸç¶ãšããŠæå¹ã ãããå®å šã«äžèŠã«ãªãããã§ã¯ãªããã
Goã®goroutineãšããNode.jsã®ã€ãã³ãã«ãŒããšã䌌ãŠãã®ïŒ
å®ã¯ããããé¢çœãã¢ãããŒããåã£ãŠããã ãGoã®goroutine㯠M:N ã¹ã¬ããã£ã³ã°ã¢ãã«ãšãã£ãŠãMåã®goroutineïŒè»œéã¹ã¬ããïŒãNåã®OSã¹ã¬ããã«ãããã³ã°ãããã©ã³ã¿ã€ã ãã¹ã±ãžã¥ãŒãªã³ã°ãããããéçºè ã¯ã¹ã¬ããããŒã«ãæèããªããŠãããNode.jsã¯ã·ã³ã°ã«ã¹ã¬ããã®ã€ãã³ãã«ãŒãã§I/OãéåæåŠçãã€ã€ããã¡ã€ã«æäœãDNS解決ãªã©äžéšã®ããããã³ã°åŠçã¯libuvã®å éšã¹ã¬ããããŒã«ïŒããã©ã«ã4ã¹ã¬ããïŒã«å§è²ããŠããã ãããã¹ã¬ããã䜿ãåããŠã³ã¹ããäžããããšããæ¬è³ªã¯ãèšèªãã©ã³ã¿ã€ã ãå€ãã£ãŠãå ±éã®èšèšææ³ã ãã
çµå±ãã¹ã¬ããããŒã«ã®èãæ¹ã¯ã©ãã«ã§ããããã ãïŒ
ããã ããã¹ã¬ããããŒã«ã¯ãé«ã³ã¹ããªãªãœãŒã¹ãäºå確ä¿ããŠäœ¿ãåãããšããããŒãªã³ã°ãã¿ãŒã³ã®ä»£è¡šäŸã§ãã³ãã¯ã·ã§ã³ããŒã«ãã¡ã¢ãªããŒã«ã«ãåãçºæ³ã䜿ãããŠããä»®æ³ã¹ã¬ãããgoroutineãæ®åããŠããè£åŽã§ã¯OSã¹ã¬ããã®ããŒã«ãåããŠããããã®ä»çµã¿ãçè§£ããŠãããšããã©ãŒãã³ã¹åé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã§å¿ ã圹ã«ç«ã€ãã