나는 4개의 코어를 가진 Pentium 코어 i5 프로세서를 가지고 있습니다. C# 콘솔 프로그램에서 이 작업을 수행하면
var t1 = new Thread(Thread1);
var t2 = new Thread(Thread2);
t1.Start();
t2.Start();
t1 및 t2 스레드는 별도의 코어에서 실행되도록 보장됩니까?
답변1
Thread
.Net에서는 두 개의 s가 두 개의 개별 코어에서 실행된다는 것을 보장할 수 없습니다 . 사실은,Thread
또한 하나의 코어에서만 실행된다는 보장도 없습니다 (!).
이 때문입니다관리되는 스레드는 OS 스레드와 동일하지 않습니다.- 단일 관리 스레드는 이를 지원하기 위해 여러 OS 스레드를 사용할 수 있습니다. C#에서는 관리되는 Thread
s 만 직접 처리합니다.(적어도 절대 수행해서는 안되는 WinAPI 스레딩 기능을 호출하기 위해 p/invoke를 사용하지 않고).
그러나 .Net 및 Windows 스레드 스케줄러는 수행하는 작업에 매우 능숙합니다. 두 번째 코어가 완전히 유휴 상태인 동안 단일 코어에서 두 개의 스레드를 실행하지 않습니다. 따라서 일반적으로 걱정할 필요가 없습니다.