다음을 통해 공유


스레드 및 스레드 처리

다중 스레딩을 사용하면 애플리케이션의 응답성을 높이고 애플리케이션이 다중 프로세서 또는 다중 코어 시스템에서 실행되는 경우 처리량을 늘릴 수 있습니다.

프로세스 및 스레드

프로세스는 실행 중인 프로그램입니다. 운영 체제는 프로세스를 사용하여 실행 중인 애플리케이션을 분리합니다. 스레드는 운영 체제에서 프로세서 시간을 할당하는 기본 단위입니다. 각 스레드는 예약 우선 순위를 가지며 스레드 실행이 일시 중지될 때 시스템에서 스레드 컨텍스트를 저장하는 데 사용하는 구조 집합을 유지 관리합니다. 스레드 컨텍스트에는 스레드의 CPU 레지스터 및 스택 집합을 포함하여 스레드가 실행을 원활하게 다시 시작하는 데 필요한 모든 정보가 포함됩니다. 프로세스의 컨텍스트에서 여러 스레드를 실행할 수 있습니다. 프로세스의 모든 스레드는 가상 주소 공간을 공유합니다. 스레드는 현재 다른 스레드에서 실행 중인 파트를 포함하여 프로그램 코드의 모든 부분을 실행할 수 있습니다.

비고

.NET Framework는 애플리케이션 도메인을 사용하여 프로세스 내에서 애플리케이션을 격리하는 방법을 제공합니다. (애플리케이션 도메인은 .NET Core에서 사용할 수 없습니다.) 자세한 내용은 애플리케이션 도메인 문서의 애플리케이션 도메인 및 스레드 섹션 을 참조하세요 .

기본적으로 .NET 프로그램은 기본 스레드라고도 하는 단일 스레드로 시작됩니다. 그러나 코드를 병렬로 실행하거나 주 스레드와 동시에 실행하는 추가 스레드를 만들 수 있습니다. 이러한 스레드를 작업자 스레드라고도 합니다.

여러 스레드를 사용하는 경우

여러 스레드를 사용하여 애플리케이션의 응답성을 높이고 다중 프로세서 또는 다중 코어 시스템을 활용하여 애플리케이션의 처리량을 높입니다.

기본 스레드가 사용자 인터페이스 요소를 담당하고 사용자 작업에 응답하는 데스크톱 애플리케이션을 고려합니다. 시간이 많이 걸리는 작업을 수행하기 위해 작업자 스레드를 사용하여, 주 스레드가 점유되어 사용자 인터페이스가 응답하지 않게 되는 것을 방지합니다. 네트워크 또는 디바이스 통신에 전용 스레드를 사용하여 들어오는 메시지 또는 이벤트에 더 응답할 수도 있습니다.

프로그램에서 병렬로 수행할 수 있는 작업을 수행하는 경우 개별 스레드에서 해당 작업을 수행하고 다중 프로세서 또는 다중 코어 시스템에서 프로그램을 실행하여 총 실행 시간을 줄일 수 있습니다. 이러한 시스템에서는 다중 스레딩을 사용하면 응답성 증가와 함께 처리량이 증가할 수 있습니다.

.NET에서 멀티스레딩을 사용하는 방법

.NET Framework 4부터 다중 스레딩을 활용하는 권장 방법은 TPL(작업 병렬 라이브러리)PLINQ(병렬 LINQ)를 사용하는 것입니다. 자세한 내용은 병렬 프로그래밍을 참조하세요.

TPL과 PLINQ는 모두 스레드를 ThreadPool 사용합니다. 클래스는 System.Threading.ThreadPool 작업자 스레드 풀이 있는 .NET 애플리케이션을 제공합니다. 스레드 풀 스레드를 사용할 수도 있습니다. 자세한 내용은 관리되는 스레드 풀을 참조하세요.

마지막으로 관리되는 스레드를 System.Threading.Thread 나타내는 클래스를 사용할 수 있습니다. 자세한 내용은 스레드 및 스레딩 사용을 참조하세요.

여러 스레드가 공유 리소스에 액세스해야 할 수 있습니다. 리소스를 무정전 상태로 유지하고 경합 상태를 방지하려면 스레드 액세스를 동기화해야 합니다. 여러 스레드의 상호 작용을 조정할 수도 있습니다. .NET은 공유 리소스에 대한 액세스를 동기화하거나 스레드 상호 작용을 조정하는 데 사용할 수 있는 다양한 형식을 제공합니다. 자세한 내용은 동기화 기본 형식 개요를 참조하세요.

스레드에서 예외를 처리합니다. 스레드에서 처리되지 않은 예외는 일반적으로 프로세스를 종료합니다. 자세한 내용은 관리되는 스레드의 예외를 참조하세요.

참고하십시오