๋๊ธฐ์ ๋น๋๊ธฐ, ๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน, ๋ณ๋ ฌ์ ๋ํ ๊ฐ๋ ์ดํดํ๊ธฐ
1. ๋๊ธฐ(Synchronous)
๋๊ธฐ๋ ์์
์ด ์์ฐจ์ ์ผ๋ก ์งํ๋๋ ๋ฐฉ์์
๋๋ค. ํ ์์
์ด ์๋ฃ๋ ๋๊น์ง ๋ค์ ์์
์ด ์คํ๋์ง ์์ต๋๋ค.
2. ๋น๋๊ธฐ(Asynchronous)
๋น๋๊ธฐ๋ ์์
์ด ๋์์ ์งํ๋๋ ๋ฐฉ์์
๋๋ค. ํ ์์
์ด ์๋ฃ๋์ง ์์๋ ๋ค์ ์์
์ด ์คํ๋ ์ ์์ต๋๋ค.
3. ๋ธ๋กํน(blocking)
๋ธ๋กํน์ ์์
์ด ์๋ฃ๋ ๋๊น์ง ํด๋น ์ค๋ ๋๊ฐ ๋๊ธฐํ๋ ์ํ๋ฅผ ๋งํฉ๋๋ค. ๋ค๋ฅธ ์์
์ ์ํํ ์ ์์ต๋๋ค.
4. ๋ ผ๋ธ๋กํน(non-blocking)
๋
ผ๋ธ๋กํน์ ์์
์ด ์๋ฃ๋์ง ์์๋ ๋ค๋ฅธ ์์
์ ์ํํ ์ ์๋ ์ํ๋ฅผ ๋งํฉ๋๋ค. ๋๊ธฐํ์ง ์๊ณ ๋ค๋ฅธ ์์
์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
5. ๋ณ๋ ฌ(parallel)
๋ณ๋ ฌ์ ์ฌ๋ฌ ์์
์ด ๋์์ ์คํ๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ฐ ์์
์ ๋
๋ฆฝ์ ์ผ๋ก ์คํ๋๋ฉฐ ์๋ก ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
์๋๋ C#์์ ๋น๋๊ธฐ/๋
ผ๋ธ๋กํน ์ฝ๋์ ์์์
๋๋ค.
๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ์ ์ธํ ๋ `async` ํค์๋๋ฅผ ์ฌ์ฉํ๊ณ , ๋น๋๊ธฐ ์์
์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ `await` ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
async Task<string> GetWebPage(string url)
{
// ๋คํธ์ํฌ ์์ฒญ์ ๋ณด๋
๋๋ค.
var response = await Task.Run(() => WebClient.DownloadString(url));
// ์๋ต์ ๋ฐํํฉ๋๋ค.
return response;
}
```
async ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ `GetWebPage` ๋ฉ์๋๋ฅผ ๋น๋๊ธฐ ๋ฉ์๋๋ก ์ ์ธํฉ๋๋ค.
`await` ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ `WebClient.DownloadString` ๋ฉ์๋์ ๋น๋๊ธฐ ํธ์ถ์ ๋๊ธฐํ๊ณ , ์๋ต์ ๋ฐํํฉ๋๋ค.
๋น๋๊ธฐ/๋
ผ๋ธ๋กํน ์ฝ๋๋ I/O ์์
๊ณผ ๊ฐ์ด ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์
์ ์ฒ๋ฆฌํ ๋ ์ ์ฉํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ต์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋๊ธ