c# threadpool 예제

다음 예제에서 주 응용 프로그램 스레드는 ThreadProc라는 메서드를 큐에 넣고 스레드 풀 스레드에서 실행하고 1초 동안 절전 모드로 이동한 다음 종료합니다. ThreadProc 메서드는 단순히 메시지를 표시합니다. 제네릭 태스크 클래스는 비제네릭 태스크의 하위 클래스입니다. 실행이 완료된 후 작업에서 반환 값을 다시 얻을 수 있습니다. 다음 예제에서는 Task 를 사용하여 웹 페이지를 다운로드합니다: 출력에서 풀에서 스레드가 어떻게 실행되는지 확인할 수 있습니다. 위의 하나는 단일 테스트 실행이 있는 샘플 출력일 뿐입니다. 다음에 실행하면 출력이 동일하지 않습니다. 예를 들어 첫 번째 실행에서 스레드 45가 마지막으로 완료된 것을 볼 수 있다고 가정해 보겠습니다. 그러나 다른 실행에서는 다른 스레드가 마지막으로 유지되는 것을 볼 수 있습니다. C# 프레임워크는 ThreadPool 클래스를 제공하여 스레드 풀을 만들고 작업을 할당합니다. „QueueUserWorkItem()” 메서드는 스레드 풀에 작업을 제출 하는 데 사용 됩니다. „SetMaxThreads()” 및 „SetMinThreads()” 메서드는 스레드 풀의 부하를 제어하는 데 사용됩니다. 이 예제에서는 50개의 계산 작업을 만들고 ThreadPool에 큐에 대기할 것입니다.

여기서 TaskCallBack은 ThreadPool에 큐에 대기할 작업에 불과한 함수입니다. 이 스레드 작업 함수는 작업 또는 스레드의 이름을 지정하는 매개 변수를 받습니다. 실제 매개 변수는 작업 완료에 필요한 데이터로 압축됩니다. 이 예제에서는 10번 실행되고 계수를 인쇄하는 루프를 시작합니다. 계산이 완료되면 스레드에 할당된 작업이 완료되도록 인쇄합니다. 다음 예제에서는 .NET 스레드 풀을 사용하여 20에서 40 사이의 다섯 숫자에 대한 피보나치 결과를 계산합니다. 각 피보나치 결과는 계산을 수행하는 ThreadPoolCallback이라는 메서드를 제공하는 피보나치 클래스로 표시됩니다. 각 피보나치 값을 나타내는 개체가 만들어지고 ThreadPoolCallback 메서드가 큐유저워크Item에 전달되어 메서드를 실행하기 위해 풀에서 사용 가능한 스레드를 할당합니다. 다음 예제에서는 QueueUserWorkItem(WaitCallback) 메서드 오버로드를 사용하여 ThreadProc 메서드로 표시되는 작업을 큐에 대기하여 스레드를 사용할 수 있게 되면 실행합니다. 이 오버로드와 함께 작업 정보가 제공되지 않습니다. 따라서 ThreadProc 메서드에서 사용할 수 있는 정보는 메서드가 속한 개체로 제한됩니다.

다음 예제에서는 수동ResetEvent Event 개체를 사용 하 여 주 스레드가 종료 되도록 신호를 보올 합니다. 스레드 네임스페이스를 사용한 후 스레드 풀 클래스를 호출해야 하며 스레드 풀 개체를 사용하여 메서드 즉 ” QueueUserWorkItem”을 호출해야 합니다. ThreadPool 크기를 설정하려면 시스템 안정성을 유지하기 위해 많은 실험이 필요합니다. 이 예제에서는 DotNet CLR에 그대로 둡습니다. Thread.Sleep 메서드에 대한 호출을 주석으로 지정하면 메서드가 스레드 풀 스레드에서 실행되기 전에 주 스레드가 종료됩니다. 스레드 풀은 모든 포그라운드 스레드가 종료된 경우 응용 프로그램을 계속 실행하지 않는 백그라운드 스레드를 사용합니다. (이것은 레이스 조건의 간단한 예입니다.) 클래스 Akshay { 정적 보이드 실행() { Console.WriteLine(„C# 코너 스레드 풀에 오신 것을 환영합니다!”); } 정적 보이드 Main() // 작업 클래스가 System.Threading.Task {Task.FactoryNew(실행)에 있음); 콘솔.읽기(); } } .

c# threadpool 예제