2011-04-30 4 views
2

스레드와 프로세스에 대한 튜토리얼을 읽었습니다. 프로세스가 운영 체제 커널에 의해 스케줄되고 스레드가 사용자 모드에서 관리되고 스케줄 될 수 있다고합니다.스레드와 프로세스에 관한 질문입니다.

"스레드를 관리하고 사용자 모드에서 예약 할 수 있습니다"라는 말을 이해하지 못합니다. 예를 들어 : 생산자 및 소비자 문제가 있습니까? 이것이 "사용자 모드로 예약 된"예입니까? 또는 누군가는 저를 설명 할 수 있는가?

답변

4

찾고있는 튜토리얼은 확실하지 않지만 두 가지 방법으로 스레드를 예약 할 수 있습니다.

첫 번째는 사용자 모드 스케줄링입니다. 이는 기본적으로 Green threads 또는 아마도 fibers을 사용하는 하나의 프로세스가 다른 스레드가 운영 체제를 결정하지 않고 실행되도록 예약한다는 것을 의미합니다. 이것은 운영 체제간에 더 이식 가능하지만 일반적으로 다중 프로세서를 이용할 수 없습니다.

두 번째는 커널 스케줄링입니다. 즉, 다양한 스레드가 커널에서 볼 수 있으며 다른 스레드에서 커널에 의해 예약 될 수 있습니다. 그러나 이것은 쓰레드 생성과 스케줄링을 더 비싸게 만들 수 있습니다.

그래서 실제로 해결하려는 문제에 의존하지 않습니다. User-mode은 스레드의 스케줄링이 운영 체제와 관련없이 발생한다는 것을 의미합니다. 초기 자바 버전 중 일부는 그린/사용자 모드 스레드를 사용했지만 대부분은 현재 네이티브/커널 스레드를 사용한다고 생각합니다.

편집 : 코딩 호러는 사용자 모드와 커널 모드의 차이점이 a nice overview입니다.

+0

코딩 호러 링크 주셔서 감사합니다 :) – Sobiaholic

1

더 나은 튜토리얼을 얻으시겠습니까? 공식 자바 튜토리얼은 꽤 좋은데, lesson on concurrency을 포함하고, 또한 defines 무엇을 과정스레드을 의미합니다.

PS : 사용자 모드에서 스레드를 관리/예약할지 여부는 일반적으로 응용 프로그램 프로그래머와 관련이없는 Java 가상 머신의 구현 세부 사항입니다.

1

사용자 모드에서 예약 됨은 소프트웨어의 스레드를 제어 할 수 있음을 의미하지만 운영 체제 커널에 의해 관리됩니다. 그렇습니다. 생산자 소비자 문제는 생산자 스레드와 소비자 스레드라는 두 개의 스레드를 가짐으로써 일반적으로 스스로 처리하는 예제입니다 (그러나 사용자 모드 스케줄링과 직접적인 관련이 없음). 두 스레드는 동일한 공유 recource에 액세스합니다. 이 리소스는 스레드로부터 안전해야합니다. 즉, 두 스레드가 동시에 액세스하므로 공유 리소스가 손상되지 않도록해야합니다. 스레드 안전성은 스레드로부터 안전한 데이터 형식을 사용하거나 수동으로 리소스를 잠 그거나 동기화하여 보장 할 수 있습니다.

그러나 스레드를 제어 할 수 있다고하더라도 쓰레드를 멈추게하고, 쓰레드를 멈추게하고, 쓰레드를 잠들게한다. 운영 체제는 여전히 CPU 시간을 허용하는 스레드를 관리하고 있습니다.

관련 문제