Transcript Thread

C#.NET EPISODE
Multi - Thread
학습 목표

1.Process 와 Thread

2.Thread 생성

3.Process목록과 Thread 목록 알아내기

4.Thread Class 주요 method

5.Thread 우선순위

6.Thread 동기화
1.Process 와 Thread

Process : 단일 application이 사용하는 자원

Thread : Process에 의해 할당된 자원내에서 특정명령을
수행하는 모듈

모든 Process의 내부에는 최소한 하나이상의 thread(Main
thread)가 작동되면, thread는 Main thread로 부터 생성
(thread : 보통 CPU에 대한 선점형 스케줄링 / fiber : 비 선점형 스케줄링 기법)
프로세스 B
프로세스 A
프로세스 C
스
레
드
스
레
드
스
레
드
스
레
드
스
레
드
스
레
드
스
레
드
스
레
드
스
레
드
A1
A2
A3
B1
B2
B3
C1
C2
C3
CPU 사이클
Context Switching
2.Thread 생성
① Thread클래스를 이용한 생성
② ThreadPool 클래스를 이용한 생성
③ Timer 클래스를 이용한 생성

Thread 클래스를 이용한 생성
Delegate void ThreadStart();
Thread th = new Thread(new ThreadStart(start));
Th.Start();

예제(ThreadExam1.cs)
2.Thread 생성

ThreadPool클래스를 이용한 생성
Thread
Pool
ThreadPool.QueueWorkItem을
이용한 처리요청
-Thread클래스를 이용해 발생된 스레드들은 과도한 Context Switching으로 시스템의 성능저하
-Process별로 일정량의 Thread를 수용할 수 있는 Pool을 만들어,적절한 Thread수를 유지함
=> ThreadPool 클래스 이용시
-ThreadPool클래스는 QueueUserWorkItem 메서드를 갖고 있고, 이 메서드는 WaitCallBack
위임형 인자를 요구

예제(ThreadExam2.cs)
2.Thread 생성

Timer 클래스를 이용한 스레드 생성(예제.ThreadExam3.cs)

System.WinForms.Timer
단일 스레드 환경에서 사용하는 Winform Tool Box인 Timer로 주어진
기간마다 Tick이벤트를 발생시킵니다.

System.Timer.Timer
멀티스레드환경에서 사용가능하며 Server Timer, Component 툴 박스의
Timer에 사용되며 주어진 기간마다 Tick이벤트를 발생시킵니다.

System.Threading.Timer
Timer를 이용한 스레드는 주로 System.Threading.Timer클래스를 사용해
발생시킵니다.
Timer클래스 객체를 생성한 후 TimerCallback 위임형 인자와 메서드로
전달할 인자, 기간을 지정해 스레드를 생성합니다.
Delegate void TimerCallback(object o);
Timer timer = new Timer(new TimerCallback(count),null,2000,1000);
//스레드가 실행될 메서드(count)와 Timer에 전달할 인자(null 값), 스레드지연시간
//(2000), callback 호출사이의 시간간격(1000)을 설정
3.Process목록과 Thread목록 알아내기

Process목록 알아내기
System.Dianostics.Process 클래스
GetCurrentProcess() //현재 실행중인 프로세스 정보
GetProcesses() //시스템에서 실행중인 모든 프로세스정보
예제 > ProcessInfo.cs

Thread 목록 알아내기
System.Dianostics.ProcessThread 클래스
예제 > ThreadInfo.cs
4.Thread 클래스 주요 method

프로그램에서 Thread를 생성하는 방법은 Thread 클래스의 생성자에
ThreadStart 대리자를 지정한 후 Start()를 호출
ThreadStart 대리자에 새 Thread가 실행할 method영역을 지정.
Thread(ThreadStart startPoint)

Thread클래스의 주요 Method
Method
설
명
Abort()
Thread를 강제 종료합니다.
Interrupt()
대기 thread 상태에 있는 thread를 중단합니다.
Join()
Thread가 종료될 때까지 호출 Thread를 중지합니다.
Resume()
일시 중지된 Thread를 다시 실행합니다.
Start()
현재 Thread의 상태를 running으로 변경합니다.
Stop()
현재 Thread를 stopped 시킵니다.
Suspend()
Thread의 실행을 일시 중단합니다.
ToString()
Thread객체를 문자열로 반환합니다.
4.Thread 클래스 주요 method

Thread 상태
Resume()
Start()
Started
Suspend()
Suspend
Interrupt()
Sleep()
WaitJoinSleep
Wait()
WaitJoinSleep
Interrupt()
Join()
WaitJoinSleep
Notify()
Stop()
StopRequest
TargetThreadDied
TimeExpires
UnStarted
Abort()/
종료시권장
WorkComplete
Stopped
5.Thread 우선순위(ThreadPriority )

스레드 우선 순위는 한 스레드의 다른 스레드에 대한 상대적 우선
순위를 지정합니다.

복수개의 Thread를 실행하면 Thread간에 우선순위는
모든 동일하게 설정

특정 Thread에 우선순위를 부여하고 자 할 경우
속성에 ThreadPriorty 열거형의 멤버값을 설정
멤버이름
ThreadPriority.Highest
가장 높음
ThreadPriority.AboveNormal
ThreadPriority.Normal
기본우선순위
ThreadPriority.BelowNormal
ThreadPriority.Lowest

예제(ThreadExam5~6.cs)
가장 낮음
Normal 로서
Thread의 Priority
6.Thread 동기화(ThreadPriority )
동기화란 여러 스레드가 공유 데이터 영역에 접근할 때 한 시점에 오직
하나의 스레드만 데이터를 사용할 수 있도록 하는 기법

Interlocked Class

The lock keyword

Monitor Class

Synchronization Events and Wait Handles

Mutex Object(=MUTually EXclusive)

참고문서(http://msdn2.microsoft.com/en-us/library/ms173179.aspx#)
-Thread Synchronization
(C# Programming Guide)