C#의 스레드 대 작업

Muhammad Maisam Abbas 2024년2월16일
  1. C#의 스레드
  2. C#의 작업
  3. C#의 스레드 대 작업
C#의 스레드 대 작업

이 자습서에서는 C#의Thread클래스와Task클래스 간의 유사점과 차이점에 대해 설명합니다.

C#의 스레드

Thread클래스는 C#에서 실제 운영 체제 수준 스레드를 생성합니다. Thread클래스로 생성 된 스레드는 스택을위한 메모리와 같은 리소스를 사용하고 컨텍스트에 대한 CPU 오버 헤드는 한 스레드에서 다른 스레드로 전환됩니다. Thread클래스는Abort()함수,Suspend()함수,Resume()함수 등과 같은 최고 수준의 제어를 제공합니다. 스택 크기와 같은 일부 스레드 수준 속성을 지정할 수도 있습니다. 다음 코드 예제는 C#에서Thread클래스를 사용하여 스레드를 만드는 방법을 보여줍니다.

using System;
using System.Threading;
using System.Threading.Tasks;

namespace wait_for_thread {
  class Program {
    static void fun1() {
      for (int i = 0; i < 2; i++) {
        Console.WriteLine("Thread 1");
      }
    }
    static void fun2() {
      for (int i = 0; i < 2; i++) {
        Console.WriteLine("Thread 2");
      }
    }
    static void Main(string[] args) {
      Thread thread1 = new Thread(new ThreadStart(fun1));
      Thread thread2 = new Thread(new ThreadStart(fun2));

      thread1.Start();
      thread2.Start();
      Console.WriteLine("The End");
    }
  }
}

출력:

The End
Thread 2
Thread 2
Thread 1
Thread 1

위 코드에서 우리는 C#의Thread클래스를 사용하여thread1thread2스레드를 생성했습니다.

C#의 작업

Task클래스는 C#에서 비동기 시스템 수준 작업을 생성합니다. 작업 스케줄러는Task클래스로 생성 된 작업을 실행합니다. 기본 스케줄러는 스레드 풀 내에서 작업을 실행합니다. Thread클래스로 만든 스레드와 달리Task클래스로 만든 작업에는 추가 메모리 나 CPU 리소스가 필요하지 않습니다. Task클래스는 스택 크기와 같은 스레드 수준 속성을 지정하는 데 사용할 수 없습니다. Task클래스는 스레드 풀에서 실행되므로 장기 실행 작업은 스레드 풀을 채울 수 있으며 새 작업은 이전 작업이 실행을 완료 할 때까지 기다릴 수 있습니다. 다음 코드 예제는 C#에서Task클래스를 사용하여 작업을 만드는 방법을 보여줍니다.

using System;
using System.Threading;
using System.Threading.Tasks;

namespace wait_for_thread {
  class Program {
    static void fun1() {
      for (int i = 0; i < 2; i++) {
        Console.WriteLine("Thread 1");
      }
    }
    static void fun2() {
      for (int i = 0; i < 2; i++) {
        Console.WriteLine("Thread 2");
      }
    }
    static void Main(string[] args) {
      Task task1 = Task.Factory.StartNew(() => fun1());
      Task task2 = Task.Factory.StartNew(() => fun2());
      Task.WaitAll(task1, task2);
      Console.WriteLine("The End");
    }
  }
}

출력:

Thread 1
Thread 1
Thread 2
Thread 2
The End

위 코드에서 C#의Task클래스를 사용하여task1task2작업을 생성했습니다.

C#의 스레드 대 작업

Thread클래스와Task클래스는 모두 C#의 병렬 프로그래밍에 사용됩니다. Thread는 하위 수준 구현이고Task는 상위 수준 구현입니다. 작업은 그렇지 않지만 리소스가 필요합니다. 또한Task클래스보다 더 많은 제어를 제공합니다. 장기 실행 작업에는Thread를 선호하고 다른 비동기 작업에는Task를 선호해야합니다.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

관련 문장 - Csharp Thread

관련 문장 - Csharp Task