728x90
태스크(Task)와 코루틴(Coroutine)
태스크 (Task)
특징
- 병렬 실행: 태스크는 주로 병렬 실행을 관리하기 위한 개념으로 사용됩니다. 여러 개의 테스크가 동시에 실행되며, 각 테스크는 독립적인 작업을 수행합니다.
- 스레드와 프로세스 내에서 사용: 태스크는 멀티스레딩 환경이나 멀티프로세스 환경에서 사용됩니다. 다른 스레드 또는 프로세스와 동시에 실행될 수 있습니다.
- 동시성 제어: 태스크는 일반적으로 스레드 또는 프로세스 간에 데이터 공유와 동시성 문제를 다루기 위한 메커니즘을 제공합니다.
예시)
using System;
using System.Threading.Tasks;
class Program
{
static async Task FooAsync()
{
Console.WriteLine("Start Foo");
await Task.Delay(2000); // 비동기 대기
Console.WriteLine("End Foo");
}
static async Task BarAsync()
{
Console.WriteLine("Start Bar");
await Task.Delay(1000); // 비동기 대기
Console.WriteLine("End Bar");
}
static async Task Main()
{
var task1 = FooAsync();
var task2 = BarAsync();
await Task.WhenAll(task1, task2);
}
static void Main(string[] args)
{
Main().Wait();
}
}
코루틴 (Coroutine)
특징
- 동시 실행: 코루틴은 여러 함수 또는 코드 블록이 동시에 실행될 수 있는 개념으로 사용됩니다. 하나의 스레드 내에서 실행되며, 스레드 간의 병렬 처리가 아닙니다.
- 동일 스레드 내에서 사용: 코루틴은 동일한 스레드 내에서 실행되며, 다른 스레드와 병렬로 실행되지 않습니다.
- 동작 일시 중지와 재개: 코루틴은 동작을 일시 중지하고 나중에 재개할 수 있는 능력을 제공하며, 비동기 작업을 처리하거나 이벤트 루프와 함께 사용됩니다.
예시)
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
foreach (var value in Coroutine())
{
Console.WriteLine("Start Coroutine");
await Task.Delay(2000); // 비동기 대기
Console.WriteLine("End Coroutine");
}
}
static async IAsyncEnumerable<int> Coroutine()
{
yield return 0;
}
}
감사합니다.
728x90
반응형
'개발 > 기타' 카테고리의 다른 글
[개발 상식] 값 타입(Value Type)과 참조 타입(Refrence Type) (0) | 2023.11.08 |
---|---|
[개발 상식]박싱(Boxing)과 언박싱(Unboxing)에 대해 (0) | 2023.11.07 |
[개발 상식]JSON, XML, CSV의 각 장단점 (0) | 2023.11.05 |
[개발 상식]오버로딩(Overloading)과 오버라이딩(Overriding) (0) | 2023.11.04 |
[개발 상식]프로세스(Process)와 스레드(Thread) (0) | 2023.11.03 |
댓글