스래드는 운영체제에서 프로세서 시간을 할당하는 기본 단위이며, 기본 단위로 2개 이상의 스래드가 해당 프로세스 내에서 코드를 실행할 수 있다. 스래드 컨텍스트(Thread context)는 스래드에서 사용하는 CPU레지스터, 스택 정보를 비롯하여 스래드에서 사용되는 모든 정보들을 포함하며, 이는 해당 호스트 프로세스의 주소 공간에 포함된다.

 

생성된 스레드는 아래의 그림과 같이 관리되는 프로세스 내의 하나 이상의 응용 프로그램 도메인에서 실행 될 수 있다. 각 응용 프로그램 도메인은 단일 스레드로 시작되지만, 사용자가 직접 응용 프로그램 도메인과 스래드를 생성할 수 있다. 동일한 응용 프로그램 도메인 안에서 생성된 스레드들은 생성된 응용 프로그램 도메인 내부에서는 자유롭게 이동(데이터 공유)이 가능하다.

process1(2).png 

 

현재 실행 중인 스레드가 할당받은 시간이 경과 되면 중단되고, 다른 스레드가 할당 받은 시간만큼 실행한다. 시스템이 한 스레드에서 다른 스레드로 전환(스위칭)될 때 섬점 스레드의 스레드 컨텍스트를 저장하고 스레드 큐에 저장된 다음 스레드의 스레드 컨텍스트를 다시 실행한다. 이런 과정이 사람이 느끼지 못할 정도의 시간안에 실행되다 보니 동시에 실행되는 느낌을 받게 되는 것이다.

 

다중 스레드의 장점

 두 개 이상의 스레드를 사용하는 것을 다중 스레드라고 한다. 다중 스레드를 사용하면 하나의 프로세서에서 여러개의 프로세서를 사용하는 효과를 볼 수 있다. 생성된 스레드들이 빠른 속도로 스위칭 되면서 마치 여러개의 프로세서들이 동시에 데이터를 처리하는 것 처럼 보이게 되는 것이다. 이는 사용자에 대한 응답성을 향상시키고, 작업을 동시에 완료시킬 수 있다.

 

다중 스레드의 단점

 스레드들은 프로세스 내의 데이터를 서로 공유하기 때문에, 생성된 스레드들이 공유자원을 사용하다 서로 충돌될 수 가 있다. 이런 공유 자원을 제대로 동기화 하지 못한다면, 교착 상태 또는 경쟁 상태와 같은 문제가 발생할 수 있다. 또한 많은 수의 스레드로 코드를 실행시키면 시스템의 성능이 저하되고, 그 구성이 복잡하여 버그가 많이 발생할 수 가있다. 때문에 스레드는 가능한 최대한 적게 사용하여 운영체제 리소스 사용을 최소화하고 성능을 향상시키는데 주력해야한다. AppDomain(응용 프로그램 도메인) 개채 및 스레드에서 필요한 컨텍스트 정보는 시스템 메모리에 저장된다. 때문에 AppDomain 개체 및 스레드의 수는 사용 가능한 메모리에 의해 제한된다.

 

- 동기화가 필요한 리소스

 시스템 리소스(예: 통신 포트)

 여러 프로세스에서 공유하는 리소스(예: 파일 처리)

 다중 스레드에서 액세스하는 단일 응용 프로그램 도메인의 리소스(예: 전역, 정적, 인스턴스 필드)


http://msdn.microsoft.com/ko-kr/library/6kac2kdh(VS.80).aspx

 

이 글은 스프링노트에서 작성되었습니다.

'닷넷 프레임워크' 카테고리의 다른 글

background  (0) 2009.04.27
3. 스레드 생성 및 종료  (0) 2009.04.27
1. 프로세스의 형태  (0) 2009.04.27
Managed Code 개요  (0) 2009.04.27
IFormatProvider 인터페이스  (0) 2009.04.27

+ Recent posts