티스토리 뷰

Thread

- Main Threading ? 여러 코어에서 한번에 여러개의 스레드를 처리하는 CPU 성능을 활용하는 프로그래밍의 유형 

- 한번에 하나가 아니라 동시에 여러개 작업을 실행

 

Thread 포그라운드(Foreground) && 백그라운드(Background) ?

.NET에서 관리되는 쓰레드는 백그라운드, 포그라운드 스레드 

백그라운드 스레드는 관리되는 실행환경을 계속 실행하지 않음 

백그라운드 스레드는 기본(default)로 false값을 가지고 있으며  fasle로 설정시 메인함수에 끝나는것없이 계속 실행되지만 true로 설정시 main함수가 끝나면 자동으로 thread가 종료된다. 

 

Join 메서드는

 

 

Thread클래스의 인스턴스를 생성하고, 생성자 파라미터로는 반환값과 반환값이 없는 Delegate로 받는다. 

        ....
        Thread thread11 = new Thread(ThreadFunc);
        thread11.Start();
        ...

 

    private static void ThreadFunc()
    {
        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine("서브스레드 : " + (i + 1));
            Thread.Sleep(100);
        }

    }

 

 

 

Thread에는 변수를 전달할 수 없기 때문에, 람다식 및 Closure 기능을 사용함 

    int sum = 0; 
    var thread2 = new Thread(() =>
    {
        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ssss"));
            sum++; 
        }
    });
    thread2.Start();
    Console.WriteLine("Thread 2");
    thread2.Join(); //Join이 있어야 Thread를 Waiting...

 

 

Thread Abort()와 Interrupt()

Thread는 수명이 다해 스스로 종료되는 것이 가장 좋지만, 스레드를 강제로 종료시켜야할 경우 Abort()방법이나 Interrupt 방법을 사용할 수 있다. 

 

Abort()를 사용하는 경우? 

-> 도중에 강제로 중단된다고 해도 프로세스 자신이나 시스템에 영향을 받지 않는 작업에 한해 사용하는 것이 좋다

 

Abort()대신 Interrupt()? 

Interrupt()의 경우 Running상태를 피해서 WaitJoinSleep상태에 들어갔을때는 즉시 중단시키지만, 이 상태가 아닌경우에는 스레드를 지켜보고 있는 작업을 한다.

- Thread가 WaitSleepJoin상태일때, Interrupt() 호출시 ThreadInteeruptedException 발생

- Thread가 Running 상태일때, Inteerupt() 호출 시 WaitSleepJoin 상태가 되었을때 ThreadInteeruptedException 발생

 

 

 

Thread lock &  Monitor

 

lock

 

 

Monitor

Enter 메소드는 잠금 상황으로, Exit 메소드는 잠금을 해제

 

 

 

Thread Mutex

공유 리소스에 대해 하나의 Thread만이 사용가능하도록 지원, Critical Section을 서로 다른 Process간 배타적으로 Locking 하는 기능을 가짐 

Monitor클래스와 유사하지만 Monitor클래스는 하나의 프로세스안에서만 사용 가능 

 

 

Thread Semaphore

 

 

 

Thread SpinLock

 

 

 

 

Thread ReaderWriterLock 


(1) Locking으로 공유 리소스에 대한 접근을 제한하는 방식

 -> lock, Monitor, Mutex, Semaphore, SpinLock, ReaderWriterLock

 

(2) 타 쓰레드에 신호(Signal)을 보내 쓰레드 흐름을 제어

-> AutoResetEvent, ManualResetEvent, CountdownEvent 등

 

 

<출처>

1. https://nowonbun.tistory.com/136?category=507214

2. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=leejongcheol2018&logNo=221449892016

3. https://docs.microsoft.com/ko-kr/dotnet/standard/threading/foreground-and-background-threads

4. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함