๐Ÿ”Žetc.

๋™๊ธฐ, ๋น„๋™๊ธฐ, ๋ธ”๋กœํ‚น, ๋…ผ๋ธ”๋กœํ‚น, ๋ณ‘๋ ฌ ์‹คํ–‰ ์ดํ•ดํ•˜๊ธฐ

taesooya 2023. 5. 29.

 
 

๋™๊ธฐ์™€ ๋น„๋™๊ธฐ, ๋ธ”๋กํ‚น๊ณผ ๋…ผ๋ธ”๋กํ‚น, ๋ณ‘๋ ฌ์— ๋Œ€ํ•œ ๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ

 

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 ์ž‘์—…๊ณผ ๊ฐ™์ด ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‘๋‹ต์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€