Post

[CS] μŠ€λ ˆλ“œ(Thread)

πŸ’‘ μŠ€λ ˆλ“œ(Thread)λž€?

μŠ€λ ˆλ“œκ°€ λ­”μ§€, μ™œ ν•„μš”ν•œμ§€, C#μ—μ„œ μ–΄λ–»κ²Œ μ“°λŠ”μ§€ μ •λ¦¬ν•΄λ³΄μž


πŸ“‘ μŠ€λ ˆλ“œλž€?

μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œ μ‹€ν–‰λ˜λŠ” κ°€μž₯ μž‘μ€ λ‹¨μœ„μ˜ μž‘μ—… νλ¦„μž…λ‹ˆλ‹€.

  • ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨(=ν”„λ‘œμ„ΈμŠ€)은 μ΅œμ†Œ 1개의 메인 μŠ€λ ˆλ“œλ₯Ό κ°€μ§€κ³  μ‹€ν–‰ν•˜κ²Œλ¨
  • μΆ”κ°€λ‘œ μŠ€λ ˆλ“œλ₯Ό λ§Œλ“€λ©΄, μ—¬λŸ¬ μž‘μ—…μ„ λ™μ‹œμ— μ‹€ν–‰ν•  수 있고 이것을 λ©€ν‹°μŠ€λ ˆλ”©(Multi-threading) 이라고 함!

πŸ“‘ μ™œ μŠ€λ ˆλ“œλ₯Ό μ“ΈκΉŒ?

λͺ©μ μ΄μœ 
병렬 μž‘μ—… μ²˜λ¦¬μ—¬λŸ¬ μž‘μ—…μ„ λ™μ‹œμ— 처리 κ°€λŠ₯
UI 멈좀 λ°©μ§€ (윈폼/WPF λ“±)무거운 μž‘μ—…μ„ λ‹€λ₯Έ μŠ€λ ˆλ“œλ‘œ 뢄리
λ°±κ·ΈλΌμš΄λ“œ μž‘μ—… μ²˜λ¦¬λ‹€μš΄λ‘œλ“œ, λ‘œκΉ… λ“± μž₯κΈ° μž‘μ—… μˆ˜ν–‰
CPU ν™œμš© κ·ΉλŒ€ν™”λ©€ν‹°μ½”μ–΄ CPUλ₯Ό 효율적으둜 μ‚¬μš©

πŸ“‘ κΈ°λ³Έ Thread μ‚¬μš© 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Threading;

class Program
{
    static void Main()
    {
        Thread thread = new Thread(DoWork); // μƒˆλ‘œμš΄ μŠ€λ ˆλ“œ 생성
        thread.Start(); // μŠ€λ ˆλ“œ μ‹œμž‘

        Console.WriteLine("Main μŠ€λ ˆλ“œλŠ” 계속 μ‹€ν–‰ 쀑...");
    }

    static void DoWork()
    {
        Console.WriteLine("별도 μŠ€λ ˆλ“œμ—μ„œ μž‘μ—… 쀑...");
        Thread.Sleep(2000); // 2초 λŒ€κΈ°
        Console.WriteLine("μž‘μ—… μ™„λ£Œ");
    }
}

πŸ“‘ 좜λ ₯ μ˜ˆμ‹œ

1
2
3
 Main μŠ€λ ˆλ“œλŠ” 계속 μ‹€ν–‰ 쀑...
 별도 μŠ€λ ˆλ“œμ—μ„œ μž‘μ—… 쀑...
 μž‘μ—… μ™„λ£Œ
  • Main()κ³Ό DoWork()κ°€ λ™μ‹œμ— 싀행됨
  • DoWork()λŠ” λ³„λ„μ˜ μŠ€λ ˆλ“œμ—μ„œ λ…λ¦½μ μœΌλ‘œ λ™μž‘ν•¨

🧩 Thread vs Task 차이점은?

Thread뿐 μ•„λ‹ˆλΌ Task, async/await도 λΉ„μŠ·ν•˜κ²Œ 비동기 μž‘μ—…μ„ μ²˜λ¦¬ν•¨ ν•˜μ§€λ§Œ λ‘˜μ€ μ—­ν• κ³Ό μš©λ„μ—μ„œ 차이가 μžˆλ‹€!.

ν•­λͺ©ThreadTask / async
λͺ©μ μ €μˆ˜μ€€ μŠ€λ ˆλ“œ μ œμ–΄κ³ μˆ˜μ€€ 비동기 μž‘μ—… 관리
μŠ€λ ˆλ“œ 직접 μƒμ„±βœ… 직접 생성 및 수λͺ… μ œμ–΄βŒ λ‚΄λΆ€μ μœΌλ‘œ μŠ€λ ˆλ“œ ν’€ ν™œμš©
μ½”λ“œ κ°„κ²°μ„±βŒ 비ꡐ적 λ³΅μž‘ν•¨βœ… async/await둜 맀우 간결함
μ ν•©ν•œ μš©λ„μ§€μ†μ μΈ λ°±κ·ΈλΌμš΄λ“œ μž‘μ—…, 타이머 λ“±νŒŒμΌ λ‹€μš΄λ‘œλ“œ, API 호좜 λ“± I/O μž‘μ—…

πŸ›‘ μ£Όμ˜ν•  점

  • μŠ€λ ˆλ“œλ₯Ό λ„ˆλ¬΄ 많이 λ§Œλ“€λ©΄ 였히렀 μ„±λŠ₯이 λ–¨μ–΄μ§ˆ 수 μžˆμ–΄μš” (μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ λΉ„μš©)
    • μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­ λΉ„μš© - CPUκ°€ μ‹€ν–‰ 쀑인 μŠ€λ ˆλ“œλ₯Ό λ°”κΎΈκΈ° μœ„ν•΄, ν˜„μž¬ μƒνƒœ(Context)λ₯Ό μ €μž₯ν•˜κ³ , μƒˆ μŠ€λ ˆλ“œμ˜ μƒνƒœλ₯Ό λΆˆλŸ¬μ˜€λŠ” κ³Όμ •μ˜ μžμ›

πŸ“‘ μš”μ•½

ν‚€μ›Œλ“œμ„€λͺ…
μŠ€λ ˆλ“œ(Thread)μž‘μ—…μ„ μ‹€ν–‰ν•˜λŠ” μ΅œμ†Œ λ‹¨μœ„
λ©€ν‹°μŠ€λ ˆλ”©λ™μ‹œμ— μ—¬λŸ¬ μž‘μ—… 처리 κ°€λŠ₯
Thread ν΄λž˜μŠ€μŠ€λ ˆλ“œ 직접 μ œμ–΄ν•  λ•Œ μ‚¬μš©
Taskκ³ μˆ˜μ€€ 비동기 처리용 API (async/awaitκ³Ό ν•¨κ»˜ μ‚¬μš©)

μ œλŒ€λ‘œ ν™œμš©ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ˜ μ„±λŠ₯κ³Ό μ‚¬μš©μž κ²½ν—˜μ„ ν•œμΈ΅ λŒμ–΄μ˜¬λ¦΄ 수 있음!

This post is licensed under CC BY 4.0 by the author.

Β© Gubeommo. Some rights reserved.

Using the Chirpy theme for Jekyll.