c# 스레드풀 예제

스레드 네임스페이스를 사용한 후 스레드 풀 클래스를 호출해야 하며 스레드 풀 개체를 사용하여 메서드 즉 ” QueueUserWorkItem”을 호출해야 합니다. 다음 예제에서 주 응용 프로그램 스레드는 ThreadProc라는 메서드를 큐에 넣고 스레드 풀 스레드에서 실행하고 1초 동안 절전 모드로 이동한 다음 종료합니다. ThreadProc 메서드는 단순히 메시지를 표시합니다. 제네릭 태스크 클래스는 비제네릭 태스크의 하위 클래스입니다. 실행이 완료된 후 작업에서 반환 값을 다시 얻을 수 있습니다. 다음 예제에서는 Task 사용 하 여 웹 페이지를 다운로드 합니다. 다음 예제에서는 QueueUserWorkItem (WaitCallback) 메서드 오버로드를 사용 하 여 작업을 큐에 스레드Proc 메서드에 의해 표시 되는 스레드를 사용할 수 있게 될 때 실행 합니다. 이 오버로드와 함께 작업 정보가 제공되지 않습니다. 따라서 ThreadProc 메서드에서 사용할 수 있는 정보는 메서드가 속한 개체로 제한됩니다. 다음 예제에서는 수동ResetEvent Event 개체를 사용 하 여 주 스레드가 종료 되도록 신호를 보올 합니다. Thread.Sleep 메서드에 대한 호출을 주석으로 지정하면 메서드가 스레드 풀 스레드에서 실행되기 전에 주 스레드가 종료됩니다. 스레드 풀은 모든 포그라운드 스레드가 종료된 경우 응용 프로그램을 계속 실행하지 않는 백그라운드 스레드를 사용합니다.

(이것은 레이스 조건의 간단한 예입니다.) 출력에서 스레드가 풀에서 실행되는 방법을 볼 수 있습니다. 위의 하나는 단일 테스트 실행이 있는 샘플 출력일 뿐입니다. 다음에 실행하면 출력이 동일하지 않습니다. 예를 들어 첫 번째 실행에서 스레드 45가 마지막으로 완료된 것을 볼 수 있다고 가정해 보겠습니다. 그러나 다른 실행에서는 다른 스레드가 마지막으로 유지되는 것을 볼 수 있습니다. C# 프레임워크는 ThreadPool 클래스를 제공하여 스레드 풀을 만들고 작업을 할당합니다. “QueueUserWorkItem()” 메서드는 스레드 풀에 작업을 제출 하는 데 사용 됩니다. “SetMaxThreads()” 및 “SetMinThreads()” 메서드는 스레드 풀의 부하를 제어하는 데 사용됩니다. 이 예제에서는 50개의 계산 작업을 만들고 ThreadPool에 큐에 대기할 것입니다. 다음 예제에서는 .NET 스레드 풀을 사용하여 20에서 40 사이의 다섯 숫자에 대한 피보나치 결과를 계산합니다.

각 피보나치 결과는 계산을 수행하는 ThreadPoolCallback이라는 메서드를 제공하는 피보나치 클래스로 표시됩니다. 각 피보나치 값을 나타내는 개체가 만들어지고 ThreadPoolCallback 메서드가 큐유저워크Item에 전달되어 메서드를 실행하기 위해 풀에서 사용 가능한 스레드를 할당합니다. ThreadPool 크기를 설정하려면 시스템 안정성을 유지하기 위해 많은 실험이 필요합니다. 이 예제에서는 DotNet CLR에 그대로 둡습니다. 여기서 TaskCallBack은 ThreadPool에 큐에 대기할 작업에 불과한 함수입니다. 이 스레드 작업 함수는 작업 또는 스레드의 이름을 지정하는 매개 변수를 받습니다. 실제 매개 변수는 작업 완료에 필요한 데이터로 압축됩니다. 이 예제에서는 10번 실행되고 계수를 인쇄하는 루프를 시작합니다. 계산이 완료되면 스레드에 할당된 작업이 완료되도록 인쇄합니다.

Sorry, comments are closed for this post.