잡학다식/코딩 공부

[C#] Chat GTP가 알려주는 쓰레드(Thread) 종류

아잇쿠 2023. 3. 23. 15:38
반응형

 

C#

 

안녕하세요 :)

요즘 Chat GTP를 계속 사용해보고 있습니다.

쳇봇이 은근 공부에 도움되네요 ㅎㅎ
아래 내용은 프로그램에 관련해서 물어보는게 많은데

그 중 C# 쓰레드 종류를 물어보고 예시를 알려달라고 한 결과입니다.

앞으로는 전공 서적은 없어 질수도 있다고 생각되네요.

 


 

C# Thread 종류

 

C#에서 다양한 쓰레드 종류를 사용할 수 있습니다. 여기에는 다음과 같은 것들이 있습니다:

1. Foreground Threads: 이것은 기본적인 쓰레드로, 주로 메인 쓰레드가 포그라운드 쓰레드입니다. 프로그램이 실행 중일 때 이 쓰레드가 실행됩니다. 포그라운드 쓰레드가 실행 중일 때는 백그라운드 쓰레드가 실행되지 않습니다.


2. Background Threads: 백그라운드 쓰레드는 포그라운드 쓰레드와 다릅니다. 이 쓰레드는 애플리케이션이 실행 중일 때 백그라운드에서 실행됩니다. 이 쓰레드는 프로그램이 종료될 때까지 실행됩니다.


3. ThreadPool Threads: ThreadPool는 애플리케이션에서 실행되는 여러 쓰레드를 관리하는 데 사용됩니다. ThreadPool에 대한 작업을 할 때는 ThreadPool.QueueUserWorkItem 메소드를 사용하여 대기열에 작업을 추가합니다. ThreadPool은 필요한 쓰레드를 만들어 작업을 처리합니다.


4. Task Parallel Library (TPL) Threads: TPL은 .NET 4.0에서 소개되었습니다. 이것은 병렬 처리 작업을 쉽게 수행할 수 있는 라이브러리입니다. TPL을 사용하면 코드를 간단하게 작성하고, 병렬 처리 작업을 쉽게 수행할 수 있습니다.


5. Async/Await Threads: Async/Await은 비동기 코드를 작성할 수 있는 방법을 제공합니다. 이것은 C# 5.0에서 소개되었습니다. Async/Await을 사용하면 UI 스레드를 차단하지 않고 비동기 코드를 실행할 수 있습니다. 이 기능은 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있습니다.


6. Timer Threads: 타이머는 특정 시간 간격으로 코드를 실행하도록 설정할 수 있습니다. 타이머는 백그라운드 쓰레드에서 실행됩니다.

이러한 쓰레드 종류는 C#에서 매우 유용하게 사용됩니다. 각 쓰레드 종류는 서로 다른 목적과 상황에서 사용될 수 있습니다.

 


 

1. Foreground Threads 예제

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        Thread foregroundThread = new Thread(ForegroundThreadFunction);
        foregroundThread.Start();

        Console.WriteLine("Main Thread completed");
    }

    static void ForegroundThreadFunction()
    {
        Console.WriteLine("Foreground Thread started");
        Thread.Sleep(1000);
        Console.WriteLine("Foreground Thread completed");
    }
}

2. Background Threads 예제

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        Thread backgroundThread = new Thread(BackgroundThreadFunction);
        backgroundThread.IsBackground = true;
        backgroundThread.Start();

        Console.WriteLine("Main Thread completed");
    }

    static void BackgroundThreadFunction()
    {
        Console.WriteLine("Background Thread started");
        Thread.Sleep(1000);
        Console.WriteLine("Background Thread completed");
    }
}

 

3.ThreadPool Threads 예제

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        for (int i = 0; i < 10; i++)
        {
            ThreadPool.QueueUserWorkItem(ThreadPoolThreadFunction, i);
        }

        Console.WriteLine("Main Thread completed");
    }

    static void ThreadPoolThreadFunction(object state)
    {
        int threadNumber = (int)state;
        Console.WriteLine("Thread {0} started", threadNumber);
        Thread.Sleep(1000);
        Console.WriteLine("Thread {0} completed", threadNumber);
    }
}

 

4. Task Parallel Library (TPL) Threads 예제

using System;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        Task.Run(() => TPLThreadFunction());

        Console.WriteLine("Main Thread completed");
    }

    static void TPLThreadFunction()
    {
        Console.WriteLine("TPL Thread started");
        Task.Delay(1000).Wait();
        Console.WriteLine("TPL Thread completed");
    }
}

 

5. Async/Await Threads: Async/Await 예제

using System;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        Console.WriteLine("Async/Await Thread started");
        await Task.Delay(1000);
        Console.WriteLine("Async/Await Thread completed");
    }
}

 

6. Timer Threads 예제

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        Timer timer = new Timer(TimerThreadFunction, null, 0, 1000);

        Console.WriteLine("Main Thread completed");
    }

    static void TimerThreadFunction(object state)
    {
        Console.WriteLine("Timer Thread executed at {0}", DateTime.Now);
    }
}

 

728x90