async/await ํค์๋ ๋์ฌ๋
ํ ์ปจ๋ฒค์
์ผ๋ก ๋น๋๊ธฐ ์ฝ๋ ์์ฑ ๊ธ์ง๊ฐ ์๊ฒผ์์ฃ .
wpf ๋ฒํผ ํด๋ฆญํ๋ฉด reentrant ์ฒ๋ฆฌ ์๋์์ด์ ์ฌ๋ฌ๋ฒ ๋๋ฆฌ๊ณ
์ง๊ธ์ nodejs์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ธฐ๋ก ์ฌ์ฉํด์ ์ ๋ง ์ธ์์ด ๋ฌด์ญ๊ฒ ๋ณํ๋ค๋ ์๊ฐ์ด ๋๋๊ตฐ์.
๊ณ ๋ฃจํด์ด๋ Virtual Thread์ ๋์ํ ๊ธฐ์ ์ ๋ํ ์คํ์ด ์ด์ด์ง๊ณ ์๋๋ณด๋ค์
Green threads are also known as โcoroutinesโ or โfibersโ in other programming languages.
์ด ๊ธ์ ๋ณด๋ฉด ์์ ๊ฐ์ ๋ฌธ์ฅ์ด ์๋๋ฐ, ์ ์ฝ๋ฃจํด์ด๋ผ๊ณ ํํํ์ ๊ฑด์ง ๋ชจ๋ฅด๊ฒ ๊ตฐ์.
๋ค๋ฅธ ์ธ์ด๋ ์ธ์ด ๋ ๋ฒจ์์ ์ง์ํ๋ ์ฝ๋ฃจํด์ด๋ผ๋ ๊ฒ ๋ฐ๋ก ์๋๊ฑด๊ฐโฆ
๋ค๋ฅธ ์ธ์ด๋ ๊ฒฝํ์ด ์์ด์ ์ ํํ ๊ทธ๋ฆฐ์ค๋ ๋ ๋ผ๋ ๊ฒ ๋ญ์ง๋ ๋ชจ๋ฅด์ง๋ง ์ฝ๋ฃจํด์ ์ ๊ฐ ์๊ธฐ๋ก ๋ฉํฐ์ฝ์ด๊ฐ ๋ฑ์ฅํ๊ธฐ ์ ๋ถํฐ ๊ทธ ์ญ์ฌ๊ฐ ๋งค์ฐ ์ค๋๋์๊ณ , .NET์์๋ ์ด๋ฏธ async/await ๊ฐ๋ ์์ฒด๋ ์ฝ๋ฃจํด์ธ๊ฑฐ๋ก ์๋๋ฐ ๋ง์ด์ฃ .
.NET์ ๋ค์ดํฐ๋ธ ์ค๋ ๋๋ง ์๋๊ฑธ๋ก ์๋๋ฐ ๊ฐ๋ ์ด ๋๊ฐ๊ฐ ์ถฉ๋๋์ ๋์ ์ด ์ค๋ค์.
๊ทธ๋ฆฐ ์ค๋ ๋๋ ์ด์ ์ฒด์ ๊ฐ ์๋ ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ๊ฐ์ ๋จธ์ (VM)์์ ๊ด๋ฆฌํ๋ ์ฌ์ฉ์ ๊ณต๊ฐ ์ค๋ ๋์ ๋๋ค.
๋๊ฐ ์ด๊ฑฐ ํด์์ข ํด์ฃผ์ธ์โฆ์์ด๋ฅผ ํด์ ํ๊ฑด๋ฐ ์ ์ดํด๊ฐ ์๋์ฃ ใ ใ
์ ๋ ์์ ๋ง์๋๋ฆฐ๋๋ก, ๋ค๋ฅธ ์ธ์ด๋ฅผ ํด๋ณธ ๊ฒฝํ์ด ์์ด์ ๊ทธ๋ฆฐ ์ค๋ ๋๋ฅผ ์ ๋ชจ๋ฆ ๋๋ค.
๊ทธ๋ฌ๋ ๋ญ๊ฐโฆ๋์์ค๋ ๋งฅ๋ฝ์ด ์ด์์ฒด์ ์ ๋ค์ดํฐ๋ธ ์ค๋ ๋๊ฐ ์๋๋ผ ์ดํ๋ฆฌ์ผ์ด์ ๋จ์์ ์ง์๋๋ ์ค๋ ๋๋ผ๊ณ ์ดํด๊ฐ ๋ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ์ค ๊ทธ๊ฒ ์ฝ๋ฃจํด์ด ๋ง๊ธดํฉ๋๋ค.
์ฝ๋ฃจํด์ ์ดํ๋ฆฌ์ผ์ด์ ๋จ์์ ๋น๋๊ธฐ๋ก ํจ์๋ฅผ ์ ์ง/์ฌ์์ ํ ์ ์๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ค ์ค๋ ๋์ ๊ด๋ จ์ ์๋ ๊ธฐ๋ฅ์ด๊ฑฐ๋ ์.
๊ทธ๋ฆฌ๊ณ ์ฝ๋ฃจํด์ ์ข ์ฐพ์๋ณด๋ ์ ๊ฐ ์ค๋๋์๋ค๊ณ ๋ง ์จ๋จ๋๋ฐ 1958๋ ๋์ ์ฒ์ ํ์ํ ์ฉ์ด๋ก์, ์ค๋ ๋๊ฐ ์๊ธฐ ์ ๋ถํฐ ์๋ ๊ฐ๋ ์ด ๋ง์ต๋๋ค.
ํ๋ก์ธ์ค์ ํ ์์ญ์ ์ฝ๋ฃจํด์ Stack์ผ๋ก ์ฌ์ฉํ๋ฉด์ ํจ์์ ์ผ์์ ์ง/์ฌ์์์ ์ง์ํ๋ ๊ธฐ๋ฅ์ธ๋ฐ ๊ฒฐ๊ตญ ์ฝ๋ฃจํด์ ์ฌ์ฉํ๋ฉด ์ค๋ ๋ 1๊ฐ์์๋ง ๋์ํ๋ ๊ฒ์ ๋ง๊ธฐ๋๋ฌธ์ ๋ฉํฐ์ฝ์ด์์๋ ์ฝ๋ฃจํด๋ง ์ฐ๋ฉด CPU ์ฝ์ด์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ๋ชปํ๋ ๊ฒ์ ๋ง์ต๋๋ค.
๊ทธ๋์ ์ฝ๋ฃจํด+์ค๋ ๋๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๋ชจ๋ธ์ด ์ง๊ธ .NET์ TAP๋ผ๊ณ ์๊ณ ์์ต๋๋ค. await๊ฐ ํธ์ถ๋ ์์ ์์ ์ ์ ์ ์งํ๋ค๊ฐ await๋ก ๋ฐํ๋ฐ๊ณ ๋ค์ ๊ทธ ์ดํ๋ก ์ฝ๋๋ฅผ ์งํ์ํฌ ์ ์๋ค๋ ๋ถ๋ถ ๋๋ฌธ์ ์ฝ๋ฃจํด์ด๋ผ๊ณ ์ดํดํ๊ณ ์์ต๋๋ค.
await๊ฐ ๋๋ฉด์ ๋ด๋ถ์ ์ผ๋ก ์ค๋ ๋ํ์์ ์ค๋ ๋๋ฅผ ํ ๋นํ๋ ๊ฒ์ ์ฝ๋ฃจํด ์ดํ์ ๊ฐ๋ ์ธ ๊ฒ์ด์ง์
Task๋ฅผ ๋ฏ์ด๋ณด์๋ฉด ์๊ฒ ์ง๋ง Task๋ Thread ์์ฒด๊ฐ ์๋๋ฉฐ, Task๋ผ๋ ์์ ์ ๋จ์๋ฅผ ์ค๋ ๋ ์ค์ผ์ฅด๋ฌ์ ์ด๊ดํ์ฌ ์ค๋ ๋ํ์์ ํ ๋นํ์ฌ ๋์๊ฐ๋ ํํ์ธ๋ฐ ์ฝ๋ฃจํด์ด reactor pattern(๋ฆฌ์ํฐ ํจํด)์ ๊ตฌํํ๋ค๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ฒ๊ณผ ๋น์ทํ ํํ์ด๋ฏ๋ก ์ ๋ ๊ทธ๋ ๊ฒ ๋ณด๊ณ ์๋ ๊ฒ์ ๋๋ค.
๊ทธ๋์ ์ ๊ฐ ์ดํดํ๊ธฐ๋ก๋ ์ด๋ฏธ .NET์๋ ์ฝ๋ฃจํด๊ณผ ๋ค์ดํฐ๋ธ ์ค๋ ๋๊ฐ๋ ์ด ๋ณตํฉ์ ์ผ๋ก ๋ค์ด์๋๊ฒ ๋ง๋๋ฐ ๊ธ์ด์ด ๋ถ๊ป์ ๊ทธ๋ฆฐ์ค๋ ๋๊ฐ ์ฝ๋ฃจํด์ด๋ผ๊ณ ํ๋ ๊ฒ์ด ์ดํด๊ฐ ์๋ก ์ถฉ๋ํ๋ ๋ถ๋ถ์ธ ๊ฒ์ ๋๋ค.
์ ์ฌ๊ธฐ ์ด๊ฑฐ ์ ๋๊ธ์ ๋ํ ํ์ ๋๋ฌธ์ ์ ๊ฐ ๋ฌด์จ ๋ง์ ํ๊ฑด์ง ์ดํด๊ฐ ์๋์ ์ ์ ๋๊ธ์ ๋ํ ํด์์ ์จ๋์ ๊ฒ์ธ๋ฐ ์ ๋๊ธ์ ๋ํ ์๋๋ฅผ ๋ฌผ์ด๋ณด์ ๊ฒ ์๋๊ตฐ์?
์ฝ๋ฃจํด์ โ์ฌ์ฉ์ ๊ณต๊ฐ ์ค๋ ๋โ ๋ผ๊ณ ๋ถ๋ฅด๊ธด ํฉ๋๋ค.
๊ทธ๋ฅ ๋ค์ดํฐ๋ธ ์ค๋ ๋๋ฅผ ์ชผ๊ฐ์ ๋ CPU ์๊ฐ์ ์กฐ๊ธ์ฉ ๋ ์์ ๋จ์๋ก ์ฌ์ฉํ ์ ์๋ ๊ฐ๋ ์ผ๋ก ์๊ณ ์์ต๋๋ค.
๊ทผ๋ฐ '์ค๋ ๋โ๋ผ๋ ์ด๋ฆ์ด ๋ถ์ ๊ฒ ์ข ์๋ฐ ์๋๊ฐ ํ๋ค์ ๊ฐ์ธ์ ์ผ๋ก๋โฆ;