새 스레드를 생성 할 때 메모리 할당 방법, 즉 메모리 힙, 메모리 스택 및 스레드의 관련성은 어떻게됩니까? 나는 이것이 근본적인 것임을 안다. (.net framework 개념) 그러나 어떻게 든이 개념을 많이 알지 못한다.스레딩 힙 및 스택
7
A
답변
2
.Net 스레드가 구현되어있어이 질문에 대답하기가 정말 어렵습니다. 관리되는 스레드와 해당하는 네이티브 스레드 사이에는 반드시 1-1 구현이 필요하지 않습니다. CLR은 여러 고유 스레드를 사용하여 단일 관리 스레드를 자유롭게 구현할 수 있습니다. 따라서 새 관리되는 스레드를 할당한다고해서 반드시 네이티브 스레드가 생성되는 것은 아닙니다. 기존의 것을 쉽게 추측 할 수 있습니다.
왜 이것이 당신에게 중요한지 말해 줄 수 있습니까? 아마 그것은 우리를 더 나은 대답으로 인도 할 것입니다.
0
각 스레드에는 자체 스택이 있지만 모든 스레드는 힙을 공유합니다.
1
스택은 스레드 컨텍스트에 속합니다. 힙은 프로세스에 속하므로 스레드간에 공유됩니다.
1
.net보다 훨씬 더 근본적입니다. 스레드는 OS 원시 객체입니다. Managed Thread는 네이티브 스레드를 감싸는 래퍼입니다.
그래서 질문에 답하십시오. 메모리 힙은 단일 가상 메모리 공간에 있기 때문에 동일한 프로세스의 스레드에서 공유됩니다. 스택은 개별적입니다.
나는 ms 창 CLR 스레드 구현이 매우 원시에 가깝다고 생각합니다. 1-1이 아닌 매핑이 일어나는 예제를 지정하십시오. – Andrey
@Andrey 이것은 불행히도 사실이 아닙니다. 2.0에서 Thread.ManagedThreadId를 추가하는 것을 고려하십시오. 이 속성은 관리되는 스레드를 잠재적 인 많은 기본 지원자와 구별 할 목적으로 정확하게 추가되었습니다. – JaredPar
관리되는 스레드가 STA 일 때 @Andrey (cont) CL 객체가 생성 된 COM 객체가 네이티브 스레드에 대한 스레드 선호도를 가지므로 CLR이 변경 될 수 있거나 변경되지 않는다고 생각하지 않습니다. 그러나 MTA에서는 선호도 문제가 없으며 CLR은 원래 기본 스레드를 자유롭게 변경할 수 있습니다. – JaredPar