2011-02-17 4 views
1

스핀 록은 CPU 사이클을 대기 (차단) 할 때 낭비하는 것만 큼 큰 것은 아닙니다. 신호가 깨어나기를 기다리는 동안 스레드가 잠자기 상태로 전환되면 회전하는 동안 CPU주기가 손실되지 않습니다.스핀 록을 사용하는 좋은 생각은 언제입니까?

잠금 장치를 잠깐 동안 유지 한 다음 스핀 록을 사용하면 시간이 절약 될 수 있습니다. 이것이 사실이라면 왜?

+0

당신은이 주제에 대한 위키 피 디아 항목 (http://en.wikipedia.org/wiki/Spinlock)를 확인 할 수 있습니다 주장하는 경우. 매우 유익한 것 같습니다. :) – gbvb

답변

3

네, 맞습니다.

컨텍스트 스위치가 값 비쌉니다. OS와 CPU는 컨텍스트 전환을 수행하기 위해 상대적으로 많은 작업을해야합니다. 이론적으로 그 사이클이 낭비 되더라도 몇 사이클 동안의 회전은 훨씬 저렴할 것입니다.

1

스핀 록은 차단하지 않으면 빠르므로 스핀 록은 잠금 장치에 경합이 매우 낮은 상황 (즉, 잠겨있을 확률이 매우 낮습니다)에서 유용합니다.

스레드가 잠자기가되면 컨텍스트 전환이 발생합니다 (즉,이 스레드는 다른 스레드가 실행될 수 있도록 다른 스레드로 스왑 됨). 스핀 락 (spinlock)이 없는지 확인하는 것보다 표준 뮤텍스를 획득하는 데 보통 더 높은 오버 헤드가 있습니다. 매우 자주 스핀 록은 잠금 장치가 해제되어있을 때 단일 원자 조작 만 필요합니다.

작은 잠금을 사용하면 각 잠금에 대한 경합이 줄어들 기 때문에 이러한 속성은 스핀 잠금을 세밀한 잠금에 유용합니다. 예를 들어, 내 프로젝트 중 하나에 16,000 개 이상의 스레드가 동시에 액세스하는 ~ 200,000 개의 항목이있는 맵 (엔터프라이즈 서버 유형)이 있습니다. 항목 당 스핀 록을 갖는 것은 매우 효율적입니다.이 앱에서 두 개의 스레드가 동시에 같은 항목을 치려고 할 가능성이 낮기 때문입니다.

0

스핀 록을 사용하면 잠금을 사용할 수있을 때보다 빠른 폴링과 더 빠른 웨이크 업이 가능합니다. @Chris가 지적한 바와 같이 비경쟁적인 자물쇠에도 좋다. 내가 사용하는 스핀 락을 말할 것이다 :

  1. 당신이 걱정하는 모두가 자신의 응용 프로그램의 성능, 그리고 다른 애플 리케이션에 굴복하지 않고 앱이 코어의 수보다 < = 스레드가있는 경우. 그러나 티켓 잠금이 캐시 누락을 최적화하기 위해 여전히 고려 될 것입니다 ... 또한 회전하지만 캐시 누락을 많이 줄입니다.

  2. 또는, 당신의 잠금이 덜

관련 문제