뮤 테스는 주로 경량 특성과 경합 및 동기화를 관리하는 방식으로 인해 특정 사용 사례의 채널보다 훨씬 빠를 수 있습니다. 다음은 뮤트가 채널을 능가하는 컨텍스트에 대한 자세한 설명입니다.
성능에 영향을 미치는 근본적인 차이
Mutxes는 하나의 스레드 또는 고 루틴 만 한 번에 중요한 섹션에 액세스 할 수 있도록하여 상호 배제를 제공합니다. 내부적으로 MUTEX 작업에는 일반적으로 원자 지침이 포함되며 경합이있을 때만 커널 수준 차단이 포함될 수 있습니다. 이로 인해 사용되지 않은 뮤텍스 잠금/잠금 해제 작업은 종종 몇 나노초에 불과합니다.
대조적으로 채널은 고 루틴 또는 스레드 간의 통신을 위해 설계된 고급 추상화입니다. 채널을 보내거나받는 데는 대기열 관리, 메모리 할당 가능한 일정, 고어 라인 스케줄링 및 잠자는 경우 깨어나는 것입니다. 이 오버 헤드는 컨텍스트 전환 및 조정 작업으로 인해 뮤 테스에 비해 더 많은 비용이 발생한 채널에 의해 보호 된 단순한 상태 돌연변이조차도 의미합니다.
이러한 근본적인 차이는 이미 간단한 공유 변수 보호 또는 임계 섹션의 경우 일반적으로 뮤트가 더 빠른 이유를 나타냅니다.
뮤텍스가 더 빠른 사용 사례
간단한 공유 상태 보호
프로그램이 카운터, 맵 또는 간단한 플래그와 같은 공유 변수를 보호 해야하는 경우 뮤트는 중요 섹션이 최소한의 동기화 오버 헤드와 관련하여 훨씬 빠릅니다. 예제는 다음과 같습니다.
- 웹 서버의 요청 계산 : 각 요청 증분 작업은 채널을 통해 메시지를 전송하는 오버 헤드가 필요하지 않고 뮤트 X에 의해 보호 및 일정 지연이 추가됩니다. 뮤 테스는 간단하고 직접적인 접근을 허용하며 양 이상으로 처리량을 향상시키는 것으로 나타났습니다.
- 공유 캐시 또는 맵에 액세스 : Mutxes를 사용하여 데이터 구조를 보호하면 최소한의 오버 헤드로 읽기 및 쓰기를 제공합니다. 모든 액세스가 요청-응답 왕복이되므로 채널을 중개자로 사용하면 추가 대기 시간이 소개됩니다.
벤치 마크 테스트에 따르면 동기화의 오버 헤드가 줄어들고 큐 관리 비용 및 채널에 내재 된 컨텍스트 전환을 피하기 때문에 MUTEX 기반 카운터가 채널 기반 카운터보다 대략 75 배 빠를 수 있습니다.
낮은 경합 또는 사용되지 않은 시나리오
낮은 경합 환경에서 Mutex Lock 및 Unlock Operations는 대기 시간이없는 거의 원자 운영 일뿐입니다. 사용되지 않은 케이스는 잠금이 가볍고 일반적으로 커널 레벨 스케줄링을 유발하지 않기 때문에 뮤 테스가 빛나는 곳입니다.
그러나 채널은 각 발송/수신이보다 복잡한 관리, 버퍼링 및 동기화를 포함하기 때문에 낮은 경합에서도 비용이 발생합니다. 따라서 소수의 고루틴 또는 경합이 거의없는 시나리오의 경우 뮤 테스가 채널보다 훨씬 성능이 우수합니다.
간단한 잠금 장치가있는 높은 동시성
많은 고 루틴이 공유 상태를 수정하는 매우 짧은 중요한 섹션을 수행하는 시나리오에서는 뮤텍스가 여전히 채널보다 더 효율적인 경향이 있습니다. 주요 이유는 뮤텍스가 커널에 고루틴을 경합하여 효율적인 스케줄링을 허용하고 잠금 해제 할 때 정확히 하나의 goroutine을 깨울 수 있기 때문입니다. 반면에 채널에는 활성 고어로 틴 스케줄링 및 큐 관리가 포함되어로드 하에서 오버 헤드를 만듭니다.
예를 들어, 최대 10 개의 고루틴이 관여하는 벤치 마크는 뮤 테스가 여러 배 더 빠른 것으로 나타 났으며, 수백 개의 고 루틴에서도 뮤트는 경쟁력을 유지합니다.
상태 돌연변이가 최소 일 때 작업 분포
슬라이스 또는 작업 목록을 관리하려면 간단히 잠그면 작업을 푸시하거나 푸시 할 때 뮤 테스가 더 빠를 수 있습니다. 채널은 작업 배포에 매우 자연 스럽지만 중요 섹션이 짧고 공유 상태가 빠른 잠금 및 잠금 해제가 필요하면 뮤트는 채널 조정의 여분의 오버 헤드를 피하고 처리량이 향상됩니다.
작업자 풀 또는 작업 대기열과 같은 많은 실제 시스템에서는 채널과 비교하여 작업 목록을 관리하기에 뮤 테스가 더 간단하고 빠를 수 있습니다.
###이 경우 뮤트가 더 빠른 이유
- 오버 헤드가 낮아짐 : Mutexes는 종종 컨텍스트 스위치 나 비용이 많이 드는 예약 결정없이 잠금 및 잠금 해제에 원자 CPU 지침을 직접 사용합니다.
- 대기열이있는 커널 차단 : 뮤 테스에서 뮤 테스에서 수면이 효율적으로 자고 대기열을 형성하고 스케줄러가 연속적으로 깨어납니다. 채널은보다 복잡한 웨이크 업 및 스케줄링 패턴을 유발합니다.
- 메시지 전달 비용 없음 : 채널은 버퍼 또는 대기열 항목 및 복사/전송 데이터를 할당해야하며, 이는 단순한 소유권과 독점 성이 충분할 때 불필요합니다.
- 직접 메모리 액세스 : Mutxes는 임계 섹션 내에서 직접 메모리 액세스를 허용하는 반면, 채널은 통신 매체를 통해 데이터를 전송하여 간접 및 대기 시간을 추가해야합니다.
컨텍스트는 채널에 적합하지 않습니다
채널은 고로 스틴간에 통신하는 우아하고 안전한 방법을 제공하고 파이프 라인 처리 및 이벤트 처리에 매우 유용하지만, 오버 헤드는 간단하고 빈번한 공유 상태 돌연변이에 덜 적합합니다.
전달한 의미론이 자연스럽고 유익한 여러 고어 라틴과 관련된 복잡한 계산을 동기화 할 때 채널이 이상적입니다. 그러나 간단한 잠금의 경우 뮤텍스가 빛납니다.
실험 및 벤치 마크 증거
- GO의 동기화 프리미티브가있는 벤치 마크는 MUTEX 카운터가 나노초 범위의 대기 시간과 함께 작동하는 반면 채널 카운터는 더 느린 순서입니다 (예 : 0.8 NS 대 조작 당 60 NS).
- 채널이 오버 헤드 잠금을 피하고 더 나은 모델 동시 파이프 라인을 피하기 때문에 채널이 뮤 테스를 능가 할 수있는 경우, 매우 높은 규모 (예 : 수천 개의 고루 스틴)에서만 성능이 역전됩니다.
- 경합에서 뮤 테스는 커널 레벨 스케줄링 효율로 인해 스핀 락보다 성능이 우수합니다.
- 뮤 테스는 메모리 할당과 컨텍스트 전환을 피하기 위해 채널에 존재하는 컨텍스트 전환을 피하기 때문에 공유 변수를 보호하기 위해 처리량이 상당히 높아지고 CPU 사용량이 낮아집니다.
사용 사례 권장 사항 요약
- 특히 중요한 섹션이 짧고 간단한 작업이 포함 된 경우 공유 메모리 또는 돌연변이 상태에 액세스 할 때 MUTEXE를 사용하십시오.
- 메시지가 비동기식으로 처리 할 상태 또는 작업을 나타내는 계산, 파이프 라인 및 이벤트 중심 아키텍처를 조정하는 데 채널을 사용하십시오.
- 여러 스레드 또는 고어 라틴에 의한 직접 상태 돌연변이를 포함하는 성능 크리티컬 코드의 경우, 뮤 테스는 일반적으로 우수한 처리량과 낮은 대기 시간을 제공합니다.
- 동시 논리가 의미를 전달하면 동시 논리가 혜택을받을 때 채널을 고려하지만 고주파 단순 잠금 요구를 피하십시오.
기술 딥 다이빙
Mutxes는 일반적으로 사용자 공간에서 잠금 및 잠금 해제를 위해 CAS (Compar-and-Swap)와 같은 원자 작업을 사용하며 스레드를 차단하기 위해 경합이 발생할 때만 커널을 입력합니다. 이로 인해 사용되지 않은 경우 컨텍스트 전환 및 오버 헤드가 최소화됩니다.
채널은 메시지 용 FIFO 대기열을 구현하며 종종 크기를 조정할 수있는 버퍼로 뒷받침됩니다. 채널을 보내려면 수신기가 준비되었는지 확인하고, 버퍼에 데이터를 복사하거나, 차단하고, 수신 고르 라틴을 예약하는 것과 관련이 있습니다. 이 단계는 운영 빈도에 곱하는 비용을 추가합니다.
뮤 테스는 수면이 경합 된 실을 수면하고 큐를 유지하므로 한 번에 하나의 스레드 만 깨어납니다. 메시지를 사용할 수있게되면 채널은 여러 고어 라인을 깨울 수 있으며,보다 복잡한 스케줄링 및 컨텍스트 전환 비용이 발생할 수 있습니다.
결론
요약하면, 뮤텍스는 빠르고 단순하며 빈번한 공유 상태 돌연변이가 낮거나 비판적 섹션이 짧은 시나리오에서 채널보다 상당히 빠릅니다. 가벼운 원자 조작 구현, 효율적인 커널 차단 및 스레드 및 직접 메모리 액세스는 스케줄링, 복사 및 메시지 전달 오버 헤드 채널에 비해 우수한 성능을 제공합니다. 채널은 복잡한 작업을 통신하고 조정을 조정하는 데 더 적합하지만 원시 동기화 속도로 비용을 지불합니다.
이러한 이해는 생산 시스템 및 실험 결과의 여러 벤치 마크 및 실제 사례에 의해 뒷받침됩니다. 따라서 뮤 테스와 채널 사이의 결정은 워크로드 특성과 동기화 요구를 기반으로해야하며, 공유 메모리를 보호하는 데있어 원시 속도와 고급 조정 및 통신 패턴을 위해 예약 된 채널을 선호합니다.