2016-12-19 1 views
0

WinAPI InterlockedPushEntrySList 을 테스트 중이지만 테스트 결과가 약간 이상합니다.InterlockedPushEntrySList의 성능

기본적으로 LockFree에서 푸시 속도는 스레드가 늘어남에 따라 빨라질 것이라고 생각했습니다. 하나의 스레드가 적어도 성공적으로 푸시됩니다. 내 테스트에서 스레드가 증가하면 InterlockedPushEntrySList의 속도가 느려집니다.

내 테스트는 매우 간단했습니다. 멀티 스레드에서 푸시 동작 만 수행하면됩니다. 필자는 미스 테스트의 원인이되는 다른 모든 요소를 ​​제거했습니다.

스레드 1 : 138,075,326 스레드 2 : 131,584,007 스레드 3 : 90,196,884 는 thereâ 4 :. 82699521

그것은

이 PLZ 말해 오초

에 대한 푸시의 카운트가 왜 ㅠ 한 아무도 시험이?

+1

이해가 안 해결한다. 작업은 승자에게 동일한 시간이 걸리고 패자에게는 더 오랜 시간이 걸립니다. –

+0

내 실수였다. 실제로 N 개의 스레드로 경합을 만들 때 적어도 1 개의 스레드와 동일한 속도를 의미한다. – chfhrqnfRhc

답변

1

기본적으로 LockFree에서 푸시 속도가 더 빠를 것이라고 생각했습니다. 가 증가합니다.

모든 경우 잠금 해제 코드를 작성하고 무한 속도의 수천 개의 스레드를 시작합니다. 그렇지 않습니까?

"잠금없는"이란 알고리즘이 동기화를 달성하기 위해 잠금을 사용하지 않고 대신 원자 적 조작 (가장 눈에 띄는 CAS 루프)을 사용한다는 것을 의미합니다.

잠금이없는 알고리즘이 잠금이없는 알고리즘 (일반적으로 그렇게하는 것)보다 빠르게 실행된다는 것은 아닙니다. 그것은 스레드의 수에 따라 느리게 또는 빠르게 될 것입니다 무료 잠이

을 의미하지 않는다 더 많은 스레드가, 그들은 것, 귀하의 경우에는

(보통 스레드 수 증가로 느려집니다) 그들의 작업을 성공시키기 위해 "싸우는"것이 더 어려워야만합니다. 이것은 일반적으로 멀티 스레드 코드의 경우입니다. 스레드 간의 공유가 많을수록 더 많은 스레드가 존재하므로 경쟁으로 인해 성능이 저하됩니다. 에게 문제를 완화 할 수 있습니다 무료 잠금 있지만 당신이 작업이 당신이 더 빨리 더 많은 경쟁을 얻을 생각하는 이유는

+0

답변 해 주셔서 감사합니다. 내 경우에는 스레드가 많아서 싸울 것입니다! 항상 우승자가 있습니다. 따라서 멀티 스레드는 동일한 속도를 가지거나 적어도 1 스레드보다 빠릅니다. 그것은 LockFreeAlgorithm에 대한 나의 기본적인 이론입니다. 맞지 않아? ㅠ – chfhrqnfRhc

+0

"이기는"글씨는 논쟁의 여지가없는 글과 똑같은 속도로 빠르다고 생각합니다. 그렇다고 생각하지 않습니다. 하드웨어는 경쟁에 대처하기 위해 추가 작업을해야합니다. 즉, 각 CPU가 성공했는지 또는 잃어 버렸는지를 알기 위해서입니다. 그리고 느린 일이 느껴질 것 같습니다. –

+0

감사합니다! "추가 작업"에 대한 링크 나 정보를 얻을 수 있습니까? 나는 세부 사항을 더 ... 싶다! – chfhrqnfRhc