c# 스레드풀 예제

Thread.Sleep 메서드에 대한 호출을 주석으로 지정하면 메서드가 스레드 풀 스레드에서 실행되기 전에 주 스레드가 종료됩니다. 스레드 풀은 모든 포그라운드 스레드가 종료된 경우 응용 프로그램을 계속 실행하지 않는 백그라운드 스레드를 사용합니다. (이것은 레이스 조건의 간단한 예입니다.) C# 프레임워크는 ThreadPool 클래스를 제공하여 스레드 풀을 만들고 작업을 할당합니다. “QueueUserWorkItem()” 메서드는 스레드 풀에 작업을 제출 하는 데 사용 됩니다. “SetMaxThreads()” 및 “SetMinThreads()” 메서드는 스레드 풀의 부하를 제어하는 데 사용됩니다. 이 예제에서는 50개의 계산 작업을 만들고 ThreadPool에 큐에 대기할 것입니다. 여기서 TaskCallBack은 ThreadPool에 큐에 대기할 작업에 불과한 함수입니다. 이 스레드 작업 함수는 작업 또는 스레드의 이름을 지정하는 매개 변수를 받습니다. 실제 매개 변수는 작업 완료에 필요한 데이터로 압축됩니다. 이 예제에서는 10번 실행되고 계수를 인쇄하는 루프를 시작합니다.

계산이 완료되면 스레드에 할당된 작업이 완료되도록 인쇄합니다. 스레드 네임스페이스를 사용한 후 스레드 풀 클래스를 호출해야 하며 스레드 풀 개체를 사용하여 메서드 즉 ” QueueUserWorkItem”을 호출해야 합니다. 제네릭 태스크 클래스는 비제네릭 태스크의 하위 클래스입니다. 실행이 완료된 후 작업에서 반환 값을 다시 얻을 수 있습니다. 다음 예제에서는 Task 사용 하 여 웹 페이지를 다운로드 합니다. ThreadProc 메서드는 단순히 메시지를 표시합니다. 다음 예제에서는 QueueUserWorkItem(WaitCallback) 메서드 오버로드를 사용하여 ThreadProc 메서드로 표시되는 작업을 큐에 대기하여 스레드를 사용할 수 있게 되면 실행합니다. 이 오버로드와 함께 작업 정보가 제공되지 않습니다. 따라서 ThreadProc 메서드에서 사용할 수 있는 정보는 메서드가 속한 개체로 제한됩니다. ThreadPool 크기를 설정하려면 시스템 안정성을 유지하기 위해 많은 실험이 필요합니다.

Comments are closed.