프로세스가 서로 다른 코어 간에 전환됩니까?

프로세스가 서로 다른 코어 간에 전환됩니까?

성능을 높이기 위해 프로세스가 다른 코어 간에 전환됩니까? 프로세스가 코어 간에 점프하는 경우 어떤 구성 요소가 코어 간에 공유됩니까? L1-L3 캐시, 레지스터 또는 메모리?

답변1

부하가 거의 100%에 달하는 2코어 시스템을 갖춘 바쁜 단일 CPU를 상상해 보겠습니다.

PID 1234가 있는 프로세스에는 스레드가 하나만 있습니다(예: 모노스레드 오디오 압축을 수행하는 콘솔 애플리케이션).

이러한 종류의 프로세스를 위해 시스템은 캐시 오류를 최소화하기 위해 동일한 코어에서 스레드를 실행하려고 최선을 다합니다. 그러나 시스템 사용량이 매우 많은 경우 유사한 다른 프로세스도 동일한 코어에서 실행을 시도할 수 있습니다. 이 경우 원칙적으로 단일 스레드 프로세스는 코어 #1에서 먼저 실행된 다음 코어 #2 등에서 실행될 수 있습니다.

답변2

성능을 높이기 위해 프로세스가 다른 코어 간에 전환됩니까?

이는 프로세스가 멀티스레딩 프로세스인지 여부에 따라 달라집니다. 프로세스 자체는 기본적으로 스레드에 대한 "컨테이너"일 뿐이므로 실행하려면 최소한 하나가 있어야 합니다. 각 스레드는 CPU 코어를 사용할 수 있으므로 프로세스에 2개의 스레드(GUI 및 작업 스레드)가 있는 경우 2개의 CPU 코어에서 실행됩니다.

"다른 코어 간 전환을 처리할 것입니다"라는 질문은 정확하게 정확하지 않습니다. 이러한 전환은 프로세스 자체가 아닌 운영 체제(OS)에 의해 예약되기 때문입니다!

답변3

CPU 간의 프로세스 전환은 성능을 저하시킵니다. 전환은 프로세스 정보와 레지스터를 메모리에 저장한 다음 이를 다른 CPU에 로드하는 것을 의미하기 때문입니다.

이러한 저장 및 로드 명령은 CPU에서 가장 느린 명령 중 하나이지만 매우 자주 실행되지 않으면 눈에 띄지 않습니다.

이 프로세스는 프로세스가 해당 시간 조각을 종료하고 운영 체제에 의해 일시 중지된 다음 새 시간 조각으로 다시 시작되는 경우와 정확히 동일합니다.

관련 정보