0

동기화 된 공유 리소스에 대해 너무 많은 스레드가 경쟁하는 간단한 시나리오를 이해하고 싶습니다. 하나의 스레드 만이 자원에 대한 잠금을 확실히 획득하고 나머지는 모두 대기해야합니다. 이제 자원 대기 상태에서 각 대기 스레드는 다시 잠금을 획득하려고 시도하고 실패하면 다음 시도를 위해 일시 ​​중단됩니다. 스레드가 일시 중단되고 자원을 다시 얻기 위해 다시 시작하기 때문에이 시나리오에서는 컨텍스트 전환 오버 헤드가 증가하지 않습니다. 그저 1) 동기화 오버 헤드와 컨텍스트 스위치 오버 헤드간에 직접적인 비례 관계가 있는지 물어보고 싶습니다. 2) 모든 알고리즘에서 잠금으로 더 많은 공유 변수를 도입하면 컨텍스트 스위치 오버 헤드가 증가합니다. 즉 공유 리소스의 수와 컨텍스트 전환 오버 헤드컨텍스트 swich 오버 헤드와 동기화 오버 헤드 사이의 관계는 무엇입니까?


맞습니까?


지금 내 두 번째 질문은 비 차단 알고리즘 원자 변수가 공유 리소스로 사용하는 경우 즉, 위의 시나리오에서 동기화에 사용하는 경우 "입니다 다음 공유 원자의 경우 컨텍스트 스위치 오버 헤드의 효과는 무엇인가 리소스 ". 공유 리소스에 대한 경쟁 스레드는 일시 중지되거나 다시 시작되지 않습니다. 즉, 이러한 비 차단 동기화 현상이 어떻게 처리됩니까?

+0

이것은 숙제와 같습니다. – colti

+0

집에서 할 일이 아닙니다. 나는 단지 내 개념을 깨끗하게하고 싶다.만약 당신이 대답 할 수있는 경우에만 plz 회신 –

+0

어떻게 동기'실제로 JVM을에서 작동 모르겠지만 _guessing_ 때마다 하나 이상의 CPU가, 그것은 하이브리드 구현 인종의 패배자가 잠글 수있는 뮤텍스는 짧은 시간 동안 _spin_ 될 것이고, 뮤텍스의 소유자가 오랫동안 그것을 보유하고 있다면 yield() (즉, 타임 슬라이스를 포기) 만 할 것입니다. (http://en.wikipedia.org/wiki/Spinlock) –

답변

0

대기 스레드는 영구적 인 컨텍스트 스위치의 원인이 질문이 표시되지 않는 : context switching thread waiting

(편집 : a를 스레드에 중단되는 동안 후 JVM이 spinlock에 시도 짧은 시간 동안 만 : 일부 컨텍스트 스위칭이 발생할 수 있습니다 OS 레벨, 그리고 퀀텀이 만료되기 전에 발생하면 여분의 컨텍스트 스위치 임)

관련된 모든 상태 변수는 단일 원자 작업 (예 : 단일 동기화 된 블록)에서 업데이트해야하므로 동기화로 인한 컨텍스트 전환은 변수의 수에 비례하지 않아야합니다.

원자 변수는 원 자성을 달성하기 위해 special CPU instructions을 사용하려고하므로 여기서 컨텍스트 스위치가 없어야합니다.

0

wait() 또는 notify() 메소드가 사용되지 않는다고 가정합니다. 귀하의 질문에 이러한 내용이 포함되어 있지 않은 것으로 보입니다. 그렇지 않은 경우 수정하십시오.

이 경우 모든 스레드는 실행 가능 상태가되어 실행되도록 예약되고 컨텍스트 스위치가 있으므로 컨텍스트 스위치가 있습니다. 이를 줄이기 위해 대기 알림 방법을 사용할 수 있습니다.

더 많은 잠금이있는 경우 더 많은 오버 헤드가 발생합니다.

원자 변수를 사용하는 경우 compareAndSet 접근 방식을 사용합니다. 즉, 할당 된 프로세서 슬라이스에 원자 증분 등을 제공하도록 스핀을 시도합니다 (Linux의 경우 : http://en.wikipedia.org/wiki/Completely_Fair_Scheduler 참조). 그것이 원자적인 증분을 할 수없는 경우 문맥 전환이 없을 것입니다. 그렇지 않으면이 스레드가 다시 전환 될 때 다시 방문해야합니다.

희망이 도움이됩니다.