ã€ãã³ãã«ãŒãã®ä»çµã¿ â 衚瀺ã®é çªãå ¥ãæ¿ããã®ã¯ãªãïŒ
ä»ã®ä»äºãPromiseãã¿ã€ããŒ
ãŸãã¯ã4ã€ã®ãã°ã®é çªãäºæ³ãã
泚æãããŠããæçãã§ãããŸã§åŸ ã€ããã«ãJavaScriptã§ãä»è¡ãããšãšãåŸã§åŒã°ããããšãåããŸããã€ãã³ãã«ãŒããå šéšæèšããåã«ã次ã®é çªãäºæ³ããŠã¿ãŸãããã
ãã©ãŠã¶ãŒã®éçºè
ããŒã«ã®ã³ã³ãœãŒã«ãžè²Œãä»ããããNode.jsãããã°loop-demo.jsãšããŠä¿åããnode loop-demo.jsã§è©ŠããŸãã
console.log("1. 泚æãã");
setTimeout(() => console.log("4. ã¿ã€ããŒã®ä»äº"), 0);
Promise.resolve().then(() => console.log("3. Promiseã®åå¿"));
console.log("2. ä»ã®åŠçãçµãã");
ãã®äŸã®åºåã¯æ¬¡ã®é ã§ãã
1. 泚æãã
2. ä»ã®åŠçãçµãã
3. Promiseã®åå¿
4. ã¿ã€ããŒã®ä»äº
setTimeoutãthenãåŒã¶ããšãšããã®äžã®é¢æ°ãå®è¡ãããããšã¯å¥ã§ããã¿ã€ããŒã®ç»é²ã¯äžã«ãã£ãŠãããã®é¢æ°ãä»ã®åŠçãäžæããããã§ã¯ãããŸããã
ä»ã®åŠçã»ãã€ã¯ãã¿ã¹ã¯ã»æ¬¡ã®ä»äºãåãã
ãã©ãŠã¶ãŒã§ã¯ãã¹ã¯ãªããå®è¡ãã€ãã³ããã¿ã€ããŒãªã©ã®ã¿ã¹ã¯ãšãPromiseã®åå¿ãªã©ã®ãã€ã¯ãã¿ã¹ã¯ãæ±ããŸãããã€ã¯ãã¿ã¹ã¯ã®ç¢ºèªæç¹ã«ã¯ããã®åã空ã«ãªããŸã§åŠçããŸããããã§æ°ãã«ãã€ã¯ãã¿ã¹ã¯ãå¢ããç¶ãããšãã»ãã®ä»äºãé²ãŸãªãããšããããŸãã
å³ã¯äžã®çãäŸã®å®è¡é ã§ããããããAPIãåãåãžå ¥ããå³ã§ã¯ãããŸãããæç»ã¯ãã©ãŠã¶ãŒã®éœåãé¢ãããã¿ã¹ã¯ã1ã€çµããããšã«å¿ ãç»é¢ãæŽæ°ãããšããä¿èšŒããããŸããã
Node.jsã§ã¯ãI/Oãæ±ãæ®µéããã
Node.jsã¯OSã®éåæI/Oçã䜿ããå¿ èŠã«å¿ããŠå éšã®ã¹ã¬ããããŒã«ãå©çšããŸãããã¹ãŠã®éåæåŠçãã¹ã¬ããããŒã«ãžç§»ãããã§ã¯ãããŸãããCPUãé·ã䜿ãJavaScriptã®èšç®ã¯ããããæžããå®è¡ã¹ã¬ãããå æãåŸãŸãã
Node.jsã®ã€ãã³ãã«ãŒãã«ã¯I/OãåŸ ã¡åããpollãsetImmediateãæ±ãcheckçã®æ®µéããããŸããlibuv 1.45.0ã䜿ãNode.js 20以éã§ã¯ãã«ãŒãååšã®ã¿ã€ããŒåŠçã¯pollã®åŸã§ãããã ãã«ãŒãã«å ¥ãåã«ã¿ã€ããŒã1ååŠçããå ŽåããããŸããå€ãå³ããã®ãŸãŸãå¿ ããã®é ããšäœ¿ããªãããšã倧åã§ãã
ããå°ã詳ããïŒéãä»äºãšè€æ°ã®çµæ
- é·ãèšç®ïŒèšæž¬ããŠåå²ãã¢ã«ãŽãªãºã ã®èŠçŽããWorkerã®å©çšãæ€èšããŸããNode.jsã®worker_threadsã¯CPUäžå¿ã®JavaScriptã®åŠçã«é©ããéåžžã®éåæI/Oãäœã§ã眮ãæããããã®ãã®ã§ã¯ãããŸããã
- Promise.allïŒè€æ°ã®çµæãåŸ ã€éå ·ã§ãã1ã€ã®æåŠã§å šäœãæåŠãããŸãããæ®ãã®åŠçã®åæ¢ã¯å¥éèšèšããŸããå šçµæãç¥ãããå Žåã¯Promise.allSettledãåè£ã«ãªããŸãã
- é çªã®èª¿æ»ïŒãã©ãŠã¶ãŒãNode.jsããçãåŒã³åºãå ŽæãåãããŸãããããã¬ãã«ã®setTimeoutãšsetImmediateã®é çªãªã©ããå¥ã®å Žæã®çµæããäžè¬åããŸããã
ð§ ãã³ã®ã³å çã®ãŸãšãïŒãã€ãã³ãã«ãŒããã£ãŠåºãŠããããä»ã®ä»äºãšãåŸã§åŒã¶ä»äºãé²ããä»çµã¿ããšæãã°ã ãããOKïŒ
次ã¯ãåŸ ã¡æéã®æ±ããã¹ã¬ããããŒã«ã®ä»çµã¿ãããŒã¿ã®åãæž¡ããã¡ãã»ãŒãžãã¥ãŒã®ä»çµã¿ã§èŠãŠã¿ãŸãããã
åèè³æ
- Node.jsïŒThe Node.js Event Loop â æ®µéã»ã¿ã€ããŒãšpollã®é çªã»çã«ãã倿Ž
- MDNïŒMicrotask guide â ã¿ã¹ã¯ãšãã€ã¯ãã¿ã¹ã¯ã»è¿œå ãç¶ããå Žåã®åé¡
- MDNïŒPromise.all â çµæã®éçŽã»æåŠãšãã£ã³ã»ã«ã®éã
- Node.jsïŒWorker threads â CPUäžå¿ã®ä»äºãšI/Oã®çšéã®éã