반응형
간략한 ThreadPool 설명.
Thread 클래스의 경우에는 Thread를 실행하면 독립적인 스레드로부터 벗어난다.
Thread를 실행시킨 상태에서 Main()이 꺼지게 되더라도 Thread는 돈다.
Main을 끌 때 하나하나 Abort()로 종료를 시켜야 프로세스가 종료가 된다. 여러개의 Thread를 사용하게 되면 하나하나 관리가 힘들다.
하지만 ThreadPool로 Thread를 실행시키면 독립적인 스레드가 아닌 호출된 메소드 안에 상주하게 된다.
즉 호출된 메소드가 종료를 하게되면 실행된 메소드들이 종료가 되겄다.
메모리 반환과 반환 하지 않느냐의 차이는 엄청난 차이. 프로그램의 성능차이가 여기서 결정되기 때문.
Thread는 선언하기 쉽고 사용하기 편하지만 메모리 반환이라던가 크로싱 문제에 대해서 복잡한게 많다.
ThreadPool은 메모리 반환이 쉽고 크로싱 문제에 대해서 많은 부분이 해결되나 메소드의 생명주기를 잘 따져야 하는 점이 있단다.
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace test_thread { class Program { static void Main(string[] args) { new Program(); } public Program() { Thread _thread1 = new Thread(new ThreadStart(new Thread_Exam().Thread_Method)); _thread1.Start(); //ThreadPool.QueueUserWorkItem(new WaitCallback(new Thread_Exam().ThreadPool_Method)); Console.WriteLine("메소드 종료됩니다."); } } class Thread_Exam { public void Thread_Method() { for(int i = 0 ; i<30 ; i++) { Console.WriteLine("Thread{0}", i.ToString()); Thread.Sleep(1000); } } public void ThreadPool_Method(object obj){ for(int i = 0 ; i<100 ;i++) { Console.WriteLine("ThreadPool {0}", i.ToString()); Thread.Sleep(10); } } } }Thread로 사용
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace test_thread { class Program { static void Main(string[] args) { new Program(); } public Program() { //Thread _thread1 = new Thread(new ThreadStart(new Thread_Exam().Thread_Method)); //_thread1.Start(); ThreadPool.QueueUserWorkItem(new WaitCallback(new Thread_Exam().ThreadPool_Method)); Console.WriteLine("메소드 종료됩니다."); } } class Thread_Exam { public void Thread_Method() { for(int i = 0 ; i<30 ; i++) { Console.WriteLine("Thread{0}", i.ToString()); Thread.Sleep(1000); } } public void ThreadPool_Method(object obj){ for(int i = 0 ; i<100 ;i++) { Console.WriteLine("ThreadPool {0}", i.ToString()); Thread.Sleep(10); } } } }Thread부분 주석하고 ThreadPool 사용
출처 : http://nowonbun.tistory.com/136
반응형
'▩▩ 프로그래밍 ▩▩ > C#' 카테고리의 다른 글
[C#] 이미지 <-> byte[] (0) | 2013.06.26 |
---|---|
[GMap] 도구상자에 GMap 컨트롤 추가 (2) | 2013.05.30 |
[C#] byte[] 를 구조체로 바꾸기 (0) | 2013.04.18 |
[C#] 폼 x버튼 누를 때, 폼 종료시 (1) | 2013.04.01 |
[C#] 텍스트박스(TextBox)에서 엔터(Enter)쳐서 이벤트 실행할 때 (0) | 2013.03.27 |
[C#] 폼 크기 조절 못하게하기 (2) | 2013.03.27 |
[C#] 스레드(thread) 사용 시 매개변수 넘기기 (delegate) (0) | 2013.03.27 |
[C#] 스레드 기초 예제, Thread (2) | 2013.03.14 |