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
클래스를 사용하여thread1
및thread2
스레드를 생성했습니다.
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
클래스를 사용하여task1
및task2
작업을 생성했습니다.
C#의 스레드 대 작업
Thread
클래스와Task
클래스는 모두 C#의 병렬 프로그래밍에 사용됩니다. Thread
는 하위 수준 구현이고Task
는 상위 수준 구현입니다. 작업
은 그렇지 않지만 리소스가 필요합니다. 또한Task
클래스보다 더 많은 제어를 제공합니다. 장기 실행 작업에는Thread
를 선호하고 다른 비동기 작업에는Task
를 선호해야합니다.
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