반초 지연은 양날의 검입니다. 한편으로는 짧은 활동의 일회성 버스트가 프로그램이 갑자기 불필요한 40MB(또는 그 이상)의 메모리를 소모하지 않는다는 것을 의미합니다. 반면에 데이터베이스를 쿼리하거나 WebClient.DownloadFile을 호출할 때와 같이 풀링된 스레드가 차단될 때 불필요하게 지연될 수 있습니다. 이러한 이유로, 예를 들어 SetMinThreads를 호출하여 첫 번째 x 스레드의 할당을 지연시키지 않도록 풀 관리자에게 알릴 수 있습니다: 컴퓨터 프로그래밍 용어 “thread”는 프로세서가 지정된 경로를 따르는 실행 스레드에 대한 짧은 값입니다. 코드를 참조하십시오. 한 번에 두 개 이상의 스레드를 따르는 개념은 멀티 태스킹 및 멀티 스레딩의 주제를 소개합니다. 보시다시피 먼저 스레드에서 실행해야 하는 함수를 사용하여 `ThreadStart` 인스턴스를 정의해야 합니다. 그런 다음 이 인스턴스는 `Thread` 클래스 초기화의 매개 변수로 필요합니다. `start` 메서드를 호출한 후 함수는 다른 프로세스와 병렬로 실행을 위해 호출됩니다. 단일 프로세서 컴퓨터에서 스레드 스케줄러는 시간 분할을 수행하여 각 활성 스레드 간에 실행을 빠르게 전환합니다.

Windows에서 시간 조각은 일반적으로 수십 밀리초 지역에 있으며 실제로 한 스레드와 다른 스레드 간에 컨텍스트를 전환하는 CPU 오버헤드보다 훨씬 큽니다(일반적으로 몇 마이크로초 영역). System.Threading.Thread 클래스의 새 인스턴스를 만들고 생성자에 새 스레드에서 실행하려는 메서드의 이름을 제공하여 새 스레드를 만듭니다. 생성된 스레드를 시작하려면 Thread.Start 메서드를 호출합니다. 자세한 정보 및 예제는 시작 시간 문서 및 Thread API 참조에서 스레드 만들기 및 데이터 전달을 참조하십시오. UI를 업데이트하기 위해 스레드를 만드는 또 다른 쉬운 방법이 있습니다: BackgroundWorker 그리고 이것은 스레드 풀의 작동 방식입니다. 스레드 수를 코어 수와 일치하면 스레드가 효율적으로 사용되는 한(이 경우) 성능이 저하되지 않고 작은 메모리 공간을 유지할 수 있습니다. 주 스레드는 문자 “y”를 반복적으로 인쇄하는 메서드를 실행하는 새 스레드 t를 만듭니다. 동시에 주 스레드는 문자 “x”를 반복적으로 인쇄합니다. 포그라운드 스레드는 응용 프로그램 중 하나가 실행 중인 동안 응용 프로그램을 계속 유지하지만 백그라운드 스레드는 실행되지 않습니다. 모든 전경 스레드가 완료되면 응용 프로그램이 종료되고 실행 중인 모든 백그라운드 스레드가 갑자기 종료됩니다. 멀티스레딩을 사용하는 응용 프로그램은 프로세서 집약적인 작업이 별도의 스레드에서 실행될 때 사용자 인터페이스가 활성 상태로 유지되므로 사용자 입력에 더 민감하게 반응합니다.

멀티스레딩은 워크로드가 증가함에 따라 스레드를 추가할 수 있으므로 확장 가능한 응용 프로그램을 만들 때도 유용합니다. 시작되지 않은 상태 – 스레드의 인스턴스가 생성되지만 시작 메서드가 호출되지 않는 상황입니다. 실행 가능 하지 상태 – 스레드는 실행 되지 않습니다., 때 이것은 단지 C #를 사용 하 여 멀티 스레드 프로그래밍에 대 한 소개. 지금까지 단일 스레드가 응용 프로그램의 실행 중인 인스턴스인 단일 프로세스로 실행되는 프로그램을 작성했습니다. 그러나 이렇게 하면 응용 프로그램이 한 번에 하나의 작업을 수행할 수 있습니다. 한 번에 두 개 이상의 작업을 실행하기 위해 작은 스레드로 나눌 수 있습니다. 소개에서 보았듯이 스레드는 Thread 클래스의 생성자를 사용하여 만들어지며 실행을 시작해야 하는 위치를 나타내는 ThreadStart 대리자를 전달합니다. ThreadStart 대리자가 정의되는 방법은 다음과 같습니다.

대신 스레드 풀을 입력하려면 이전 구문 중 하나를 사용해야 합니다.