[나크21] 캐주얼 미니스커트 치마바지 NK21-P-10
BLOG main image
분류 전체보기 (540)
▩▩ 개인공간 ▩▩ (124)
▩▩ 문화생활 ▩▩ (45)
▩▩ 게임 ▩▩ (211)
▩▩ 일러스트 ▩▩ (46)
▩▩ 프로그래밍 ▩▩ (73)
▩▩ 코스메틱 ▩▩ (1)
▩▩ 여행 ▩▩ (0)
* 셈틀 롤드컵 * (1)
반응형
Total
Today hit
Yesterday hit
▩▩ 프로그래밍 ▩▩/C#
반응형

간략한 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
반응형