잠금 호송과 잠금 / 스레드 경합의 차이점은 무엇입니까?

Aug 18 2020

자물쇠 호송에 관한 위키 백과에서 :

잠금 호송은 동일한 우선 순위의 여러 스레드가 동일한 잠금에 대해 반복적으로 경합 할 때 발생합니다. 교착 상태 및 라이브 록 상황과 달리 잠금 호송의 스레드는 진행됩니다. 그러나 스레드가 잠금을 획득하려고 시도하고 실패 할 때마다 나머지 스케줄링 퀀텀을 포기하고 컨텍스트 전환을 강제합니다. 반복되는 컨텍스트 전환의 오버 헤드와 스케줄링 퀀텀의 활용도가 낮 으면 전체 성능이 저하됩니다.

잠금 / 스레드 경합 경합에 대한 wikipedia에서 :

잠금 경합 : 한 프로세스 또는 스레드가 다른 프로세스 나 스레드가 보유한 잠금을 획득하려고 할 때마다 발생합니다. 사용 가능한 잠금이 세분화 될수록 한 프로세스 / 스레드가 다른 프로세스 / 스레드가 보유한 잠금을 요청할 가능성이 줄어 듭니다. (예를 들어, 전체 테이블이 아닌 행을 잠 그거나 전체 행이 아닌 셀을 잠급니다.);

누군가이 두 가지에 대해 좀 더 자세히 설명해 주시겠습니까? 나에게 본질적으로 동일하거나 그렇지 않은 경우 잠금 경합으로 인해 잠금 호송이 발생합니다. 그게 사실입니까, 아니면 분리되고 독립적 인 개념입니까? 또한 "나머지 스케줄링 퀀텀을 포기하고 컨텍스트 전환을 강제한다"는 문장을 이해하지 못합니다.

답변

1 ajit Sep 03 2020 at 13:30

잠금이 사용 중일 때 잠금 알고리즘에 사용되는 두 가지 차단 방법이 있습니다 . 스핀 대기 또는 차단 (잠자기 상태로 전환하고 프로세서를 포기하고 OS가 스레드를 깨우고 다시 예약 할 때까지 기다립니다). 차단 전략을 사용할 때 언급 한대로 잠금 호송이 발생합니다.
OS는 시간 분할 방식으로 코어의 스레드를 예약합니다 . 모든 스레드는 결정된 시간 분할 (예 : 2ms)에 대한 프로세서를 얻습니다. 라운드 로빈의 OS패션은 준비 대기열의 모든 스레드를 하나씩 예약합니다. 일정을 얻은 후 스레드를 말하고 실행을 시작하면, 예를 들어 100 분 후에 잠금을 요청합니다. 잠금이 사용 중이면 스레드가 잠금을 얻을 수없고 프로세서를 차단하고 포기합니다. 따라서 남은 1.9ms (2ms-100us) 타임 슬라이스는 스레드에서 사용되지 않습니다. 잠금이 해제되었을 때 OS에 의해 깨어 난 후에도 스레드는 라운드 로빈 대기열에서 차례를 기다려야합니다. 활성 스레드의 수는 100 개가 될 수 있습니다.

잠금 경합은 호송 효과를 유발합니다.