Thread.yield 원리 분석
4167 단어 병발 하 다자바Thread.yield 원리
JVM_ENTRY(void, JVM_Yield(JNIEnv *env, jclass threadClass))
JVMWrapper("JVM_Yield");
// Yield, false
if (os::dont_yield()) return;
HOTSPOT_THREAD_YIELD();
// When ConvertYieldToSleep is off (default), this matches the classic VM use of yield.
// Critical for similar threading behaviour
// , , Yield Sleep ( false), , sleep , , naked_yield 。
if (ConvertYieldToSleep) {
os::sleep(thread, MinSleepInterval, false);
} else {
os::naked_yield();
}
JVM_END
원본 코드 에서 볼 수 있 듯 이 yield 의 실현 은 두 가지 로 나 뉜 다.Yield 작업 을 Sleep 작업 으로 전환 할 수 있다 면(기본 값 은 false)운영 체제 의 sleep 방법 을 호출 하고 허용 되 지 않 으 면 운영 체제 의 naked 를 호출 한다.yield 방법.
만약 에 Sleep 방법 을 사용한다 면 이것 은 우리 가 모두 잘 알 고 있 습 니 다.그것 은 바로 현재 스 레 드 를 한 동안 수면 시 켜 CPU 의 점유 효 과 를 실현 하 는 것 입 니 다.여기 서 수면 시간 은 최소 수면 간격 으로 1MS 입 니 다.
naked 호출 이 라면yield,naked_yield 방법 은 Liux 에서 다음 과 같 습 니 다.
void os::naked_yield() {
sched_yield();
}
그 중 schedyield 는 운영 체제 의 스 레 드 스케줄 링 방법 입 니 다.
그럼 sleep 와 schedyield 는 도대체 어떤 차이 가 있 습 니까?sleep:현재 스 레 드 를 잠 들 게 하고 수면 기간 에 CPU 의 점유 권 을 방출 합 니 다.시간 이 되면 다시 CPU 를 차지 합 니 다.sched_yield:현재 스 레 드 에 CPU 점유 권 을 양보 한 다음 에 스 레 드 를 같은 우선 순위 대기 열의 끝 에 추가 한 다음 에 다른 단계 가 현재 스 레 드 보다 같 거나 높 은 스 레 드 를 먼저 실행 합 니 다.조건 에 맞 는 스 레 드 가 없 으 면 이 함 수 는 즉시 돌아 와 현재 스 레 드 프로그램 을 계속 실행 합 니 다.따라서 sleep 는 현재 스 레 드 의 CPU 점용 권 을 반드시 방출 합 니 다.그리고 schedyield,다른 스 레 드 의 우선 순위 가 현재 스 레 드 와 같 거나 높 은 경우 에 만 CPU 점유 권 을 양보 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Y 분 에 에 랑 배우 기.[] 은 빈 목록 입 니 다.목록 에 있 는 요 소 를 추출 하기 위해 서 패턴 일치 동작 을 사용 할 수 있 습 니 다.만약 에 우리 가 비어 있 지 않 은 목록 L 이 있다 면 [X|Y] = L 은 L 의 hea...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.