자동 API 문서 생성 도구 인 Liveapi가 개발 중에 서버 시스템 코어 수를 기반으로 스케일링 된 강력한 대기열 메커니즘을 구현해야했습니다. 이것은 자원 기아, 충돌 및 사용자 경험이 좋지 않은 과도한 자원 사용 (메모리 및 CPU)을 방지하는 데 중요했습니다.
이 기사에서는이 도전을 해결하기 위해 Golang에서 Mutxes를 어떻게 활용했는지 설명하겠습니다.
뮤트 란 무엇입니까?
동시 프로그래밍에서 MUTEX (상호 배제)는 한 번에 하나의 고 루틴 만 공유 리소스에 액세스 할 수 있도록 경주 조건을 방지하는 잠금 메커니즘입니다. 그것은 방의 열쇠와 비슷합니다. 한 사람 만 키를 잡고 한 번에 입력 할 수 있습니다.
golang의 mutex 사용
뮤텍스가 동시 직무 실행을 어떻게 관리 할 수 있는지 설명해 봅시다 :
GO의 SYNC 패키지는 동기화를위한 몇 가지 프리미티브를 제공하며 MUTEX는 가장 일반적으로 사용되는 도구 중 하나입니다.
var ( maxConcurrentJobs int activeJobs int jobMutex sync.Mutex )
이 코드에서 ActiveJobs 변수는 현재 실행중인 작업의 수를 추적합니다. 여러 goroutines 가이 변수를 동시에 수정하려고 시도하여 레이스 조건으로 이어질 수 있으므로 뮤 테스를 사용하여 액세스를 동기화합니다.
// Check if we can process more jobs jobMutex.Lock() if activeJobs >= maxConcurrentJobs { jobMutex.Unlock() // Wait before checking again time.Sleep(time.Second) continue } jobMutex.Unlock()
MUTEX가 작동하는 방법
잠금 : lock () 메소드는 임계 섹션에 대한 독점 액세스를 얻습니다.
잠금 해제 : Unlock () 메소드는 잠금을 풀어줍니다.
Critical Section : ** 공유 리소스가 액세스되는 위치 잠금과 잠금 해제 사이의 코드.
golang의 뮤 테스 유형
sync.mutex : 이것은 기본 상호 배제 잠금입니다. 한 번에 한 번에 한 번만 임계 섹션에 액세스 할 수 있습니다.
type SafeCounter struct { mu sync.Mutex count int }
sync.rwmutex : 이것은 여러 독자가 공유 리소스에 동시에 액세스 할 수 있지만 한 번에 한 명의 작가에만 액세스 할 수있는 독자/작가 뮤테스입니다.
var rwMutex sync.RWMutex // Reader methods rwMutex.RLock() // Lock for reading rwMutex.RUnlock() // Unlock for reading // Writer methods rwMutex.Lock() // Lock for writing rwMutex.Unlock() // Unlock for writing
Mutxes는 동시 GO 프로그램에서 공유 리소스를 관리하기위한 필수 도구입니다. 코드의 중요한 섹션에 대한 액세스를 제어하여 인종 조건을 방지하고 데이터 무결성을 보장합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3