(프로그래밍 C # 고급에서 발췌 버전 7) 스레드 풀

1, 수요 배경
  스레드가 시간이 걸립니다 만듭니다. 다른 작은 작업이 완료되어있는 경우, 당신은이 작업을 완료해야합니다 요청에 따라 사전에 많은 스레드를 만들 수 있습니다. 이것은 당신이 리소스를 해제하는 데 필요한 시간을 줄이고, 더 많은 스레드를 필요로 할 때 스레드의 수가 최고 증가한다.
 
2, 스레드 풀 출연
  필요는 목록 자신을 만들 수 없습니다. 이 목록은 ThreadPool이 클래스에 의해 호스팅됩니다. 이 클래스는 증가 또는 스레드의 최대 수까지, 필요시 스레드 풀에서 스레드의 수를 감소합니다. 풀에서 스레드의 최대 수는 구성 할 수 있습니다.
  듀얼 코어 CPU에서 기본 설정은 1023 개 작업자 스레드 1000 I / O 스레드입니다. 쿼드 코어 CPU는 기본 설정은 2047 작업자 스레드 1000 I / O 스레드입니다.
  당신은 또한 즉시 시작하기 위해 작성해야 스레드 풀에서 스레드의 최소 수, 사용 가능한 스레드 풀에서 스레드의 최대 수를 지정할 수 있습니다.
  더 많은 일자리가 처리 할 수있는 경우, 한계 스레드 풀 스레드의 수는, 새로운 작업 큐에 그 작업을 완료하는 데 스레드까지 기다려야합니다.
 
밤 3.
  다음 예는 처음 동작 스레드 스레드 / O 스레드의 최대 수를 읽고, 콘솔에 정보를 기록하고 for 루프에서, ThreadPool.QueueUserWorkItem 호출 () 방법, WaitCallBack 델리게이트 타입의 JobForAThread 전달 ( 스레드 풀 스레드를 부여하는) 방법. 스레드 풀은이 요청을 수신하면, 상기 메소드를 호출하는 풀에서 스레드를 선택한다.
  스레드 풀 아직 실행하지 않은 경우, 스레드 풀을 생성하고 첫 번째 스레드를 시작합니다. 스레드 풀 인 경우 이미 실행하고 작업이 스레드를 넣어 전달 된 작업을 완료 무료 스레드가있다.
클래스 CLRThread2 
    { 
        공공  정적  무효 ThreadMethod () 
        { 
            INT nWorkThreads;
            int로 nCompletionPortThreads을; 
            (ThreadPool.GetMaxThreads 밖으로 nWorkThreads, 밖으로 nCompletionPortThreads); 
            Console.WriteLine ( " 최대 작업자 스레드 : {0}, I / O 완료 스레드 : {1} " , nWorkThreads, nCompletionPortThreads); 
 
            위한 ( int로 I = 0 ; i가 < 5 ; 내가 ++ ) 
            {  
                ThreadPool.QueueUserWorkItem (JobForAThread);
            } 
            에 Thread.sleep ( 3000 ); 
 
        } 
 
        정적  무효 JobForAThread ( 대상 주) 
        { 
            위해 ( int로 I = 0 ; I는 < 3 ; 내가 ++ ) 
            { 
                Console.WriteLine ( " 루프 {0}, 내부 풀링 스레드를 실행하는 {1} " , I, Thread.CurrentThread.ManagedThreadId) ; 
                Thread.sleep를 ( 50 ); 
            } 
        } 
    }

 

 
 
스레드 풀 제한하여 4
  와 스레드 풀은 간단하게 들리지만, 몇 가지 제한 사항이 있습니다 :
  • 풀의 모든 스레드는 백그라운드 스레드입니다. 온통 프로세스의 모든 전경 스레드 경우, 모든 백그라운드 스레드가 중지됩니다. 대신 전경 스레드 풀 스레드에 넣어 수 없습니다.
  • 당신은 풀 스레드 우선 순위 또는 이름을 설정할 수 없습니다
  • COM 객체의 경우, 모든 스레드 멀티 스레드 단위 (multitihreaded 아파트, MTA) 스레드 풀링됩니다. 많은 객체가 단일 스레드 COM 장치를 필요로 (단일 스레드 apartmeng, STA) 스레드
  • 짧은 시간 작업에만 사용되는 스레드 풀에. 스레드 (예 : Word의 맞춤법 검사기 스레드로)를 실행하는 경우, 당신은 스레드를 생성하기 위해 Thread 클래스를 사용해야합니다.

추천

출처www.cnblogs.com/schangxiang/p/11292949.html