Javascript/Node.js

[Node.js] (6) Single Thread, Event Loop & Blocking Code

Rainbow🌈Coder 2022. 12. 9. 15:54
728x90

μ‹±κΈ€μŠ€λ ˆλ“œ (Single JavaScript Thread ) 

 

NodeJsλŠ” ν•˜λ‚˜μ˜ JavaScript μŠ€λ ˆλ“œλ§Œ μ‚¬μš©ν•œλ‹€.

μŠ€λ ˆλ“œλŠ” μ‰½κ²Œ 말해 운영 μ²΄μ œμ—μ„œμ˜ ν”„λ‘œμ„ΈμŠ€λ‘œ ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œλ§Œ μ‚¬μš©ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ μ—¬λŸ¬ μš”μ²­μ„ λ‹€λ£¨λŠ”μ§€μ˜ κΆκΈˆν•΄μ§„λ‹€.

각 μš”μ²­λ§ˆλ‹€ μŠ€λ ˆλ“œλ₯Ό μ§€μ •ν•  수 μ—†μœΌλ‹ˆ, κ²°κ΅­ λͺ¨λ‘ ν•˜λ‚˜μ˜ μŠ€λ ˆλ“œμ—μ„œ 싀행될 것.

 

 

μ΄λ²€νŠΈλ£¨ν”„ ( Event Loop )

 

이벀트 λ£¨ν”„λŠ” Node.js κ°€ μ‹œμž‘ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ— μ˜ν•΄ μžλ™μœΌλ‘œ μ‹œμž‘λœλ‹€.

이벀트 λ£¨ν”„λŠ” 이벀트 μ½œλ°±μ„ 닀룬닀.

νŠΉμ • μ΄λ²€νŠΈκ°€ 일어났을 λ•Œ λ°”λ‘œ 이벀트 루프가 ν•΄λ‹Ή μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 것이닀. 

λͺ¨λ“  μ½œλ°±μ„ νŒŒμ•…ν•˜κ³  μžˆμ–΄μ„œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•œλ‹€.

빨리 끝낼 수 μžˆλŠ” μ½”λ“œλ₯Ό ν¬ν•¨ν•œ μ½œλ°±λ§Œμ„ 닀룬닀.  

 

λ­λ‹ˆλ­λ‹ˆν•΄λ„ 원본 λ„νλ¨ΌνŠΈκ°€ 졜고 μ•„λ‹ˆκ² λŠ”κ°€ : https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/

https://nodejs.org/en/docs/guides/dont-block-the-event-loop/

[좜처]:  https://sjh836.tistory.com/149  (빨간색코딩 λ‹˜)
[좜처]:  https://nodejs.org/ko/docs/guides/event-loop-timers-and-nexttick/

 

https://www.voidcanvas.com/nodejs-event-loop/
https://www.voidcanvas.com/nodejs-event-loop/

 

 

 

 

μ›Œμ»€ν’€ (Worker Pool ) 

 

파일 μ‹œμŠ€ν…œ μ—°μ‚° λ“±μ˜ 였래 κ±Έλ¦¬λŠ” 연산은 μ›Œμ»€ν’€μ— 보내진닀.

이 μ—­μ‹œ Node.jsκ°€ μžλ™μœΌλ‘œ μ‹œμž‘ν•˜κ³  κ΄€λ¦¬ν•œλ‹€. 

무거운 μž‘μ—…μ„ λ‹΄λ‹Ήν•˜λŠ” μ›Œμ»€ν’€μ€ JavaScript μ½”λ“œλ‘œλΆ€ν„° μ™„μ „νžˆ λΆ„λ¦¬λ˜μ–΄ λ‹€λ₯Έ μ—¬λŸ¬ μŠ€λ ˆλ“œμ—μ„œ μž‘λ™ν•  수 μžˆλ‹€.

앱을 μ‹€ν–‰ν•˜λŠ” 운영 μ²΄μ œμ™€ κΉŠμ€ 연관이 μžˆλ‹€. 

μ½”λ“œλ‘œλΆ€ν„° λΆ„λ¦¬λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 무거운 μž‘μ—…μ„ λͺ¨λ‘ μ²˜λ¦¬ν•  수 μžˆλŠ” 것이닀. 

파일과 κ΄€λ ¨λœ μž‘μ—…μ„ ν•  λ•ŒλŠ” μ›Œμ»€ν’€μ˜ μ›Œμ»€κ°€ μ½”λ“œ, μš”μ²­ 및 이벀트 루프와 λΆ„λ¦¬λœ μƒνƒœμ—μ„œ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.

이벀트 λ£¨ν”„μ™€λŠ” ν•œκ°€μ§€ 연결점이 μžˆλŠ”λ°, μ›Œμ»€κ°€ μž‘μ—…μ„ 마치면 (파일 읽기 λ“±) 읽기 연산에 λŒ€ν•œ 콜백이 μ‹œμž‘λ˜λŠ”λ° 이벀트 루프가 μ΄λ²€νŠΈμ™€ μ½œλ°±μ„ μ±…μž„μ§€κΈ° λ•Œλ¬Έμ— κ²°κ΅­ 이벀트 루프에 λ“€μ–΄κ°€κ²Œ 될 것이닀. κ±°κΈ°μ„œ Node.jsκ°€ μ•Œλ§žμ€ μ½œλ°±μ„ μ‹€ν–‰ν•œλ‹€. 

 

참고 자료 : https://medium.com/zigbang/nodejs-event-loop%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0-16e9290f2b30

https://evan-moon.github.io/2019/08/01/nodejs-event-loop-workflow/

 

728x90