2017-02-04 1 views
0

내 교과서 상태 : 순수한 ULT (사용자 수준 스레드) 전략에서순수 사용자 수준의 스레드 전략에서 다중 스레드 응용 프로그램이 다중 처리를 이용할 수없는 이유는 무엇입니까? 다음

는 멀티 스레드 응용 프로그램이 멀티 프로세싱을 이용할 수 없습니다. 커널은 한 번에 하나의 프로세서에만 하나의 프로세스 을 할당합니다. 따라서 한 프로세스에 하나의 스레드 만 실행할 수 있습니다. 실제로 단일 프로세스 내에서 응용 프로그램 수준의 멀티 프로그래밍이 가능합니다. 이 멀티 프로그래밍을 사용하면 응용 프로그램의 속도가 상당히 빨라지지만 코드를 동시에 실행할 수있는 응용 프로그램이 있습니다.

사용자 수준 스레드, 다중 스레드 및 다중 처리 같은 기본 개념을 이해합니다. 그러나 멀티 스레드 응용 프로그램이 순수 ULT 전략에서 다중 처리를 이용할 수없는 이유에 대해서는 위의 칭의을 이해하지 못합니다.

누군가가 시간을내어 명확하게 설명해 주시면 감사하겠습니다.

+2

커널이 스레드를 인식하지 못하기 때문입니다. 프로세스를 실행하고 스레드를 실행하도록 예약하기 위해 사용자 수준 라이브러리의 작업 만 할당합니다. 따라서 5 개의 쓰레드가있는 프로세스가 있다면, 같은 'CPU'에서 실행중인 시간을 공유하게됩니다. –

답변

1

사용자 수준 스레드 (또는 녹색 스레드)은 프로그래밍 언어에서 처리되며 운영 체제에 노출되지 않습니다. 예 : 파이썬 (또는 루비)에서는 스레드가 완전히 "파이썬 런타임 내에 숨겨져 있습니다". 이것은 파이썬이 쓰레드를 완전히 제어 할 수 있다는 장점이 있습니다. 파이썬에서 메모리를 읽고 쓰는 것이 OS에 의해 처리된다면 안전하지 않을 수 있습니다. OS에 프로그램은 단일 스레드처럼 보이므로 한 번에 하나의 코어에서만 실행됩니다.

한편, 커널 스레드은 OS에서 처리합니다. 그들은 수 있습니다 다른 코어에서 즉시 실행 하고이 속도 향상의 혜택. 단점은 "스레드 안전 메모리 액세스"와 같은 것들이 스레드 자체에 의해 처리되어야하고 스레드 안전성을 보장 할 수있는 "외부 언어 스케줄러"(사용자 레벨 스레드와 같은)가 없다는 것입니다.

간단히 요약하면 다음과 같습니다. 더 많은 것을 알고 싶다면 "global interpreter lock"(파이썬, 루비) 또는 see this answer을 찾아보십시오.