안녕하세요 TIL 세번째 시간입니다. 2023/06/14
배운것을 정리해보겠습니다 👨💻
Shared Resources(공유 자원) 에 대한 Concurrency(동시성) 문제는 여러 프로세스 또는 쓰레드가 동시에 공유 자원에 접근하려고 할 때 발생합니다.
물론 Concurrent 하게 여러 프로세스 및 쓰레드로 동작하는 방식은 굉장히 효율적이지만 이러한 문제를 야기합니다 🤔
이때 Mutex(상호 배제)
와 record lock(레코드 잠금)
은 공유 자원의 안전한 동시 접근을 보장하기 위해 사용되는 동기화 매커니즘입니다.
Mutex
는 상호 배제라는 개념을 기반으로 한 동기화 매커니즘입니다. 특정 순간에는 오직 하나의 프로세스 혹은 쓰레드 만이 특정 자원에 접근할 수 있도록 제어합니다.
만약 특정 프로세스 혹은 쓰레드가 공유 자원에 접근하려면 먼저 Mutex
을 획득해야 하고, 접근이 끝나면 Mutex
를 해제해야 다른 프로세스 및 쓰레드가 접근가능합니다 🔐
해당 이미지는 Mutex
의 동작원리를 소개하는 이미지입니다.
Record Lock
은 주로 데이터베이스 시스템에서 사용되는 동기화 매커니즘입니다.
Record Lock
은 데이터베이스의 특정 데이터 레코드에 대한 동시 접근을 제어하는데 이때 레코드 잠금에는 Writer Lock(쓰기 잠금)
과 Reader Lock(읽기 잠금)
으로 나뉩니다.
잘 생각해보면 여러 읽기 작업은 데이터베이스의 상태를 변화시키는 것이 아니라 단순히 기존의 데이터 레코드를 읽어오는 것이기에 읽기 작업끼리는 상호 배제적으로 제어할 필요가 없습니다.
따라서 읽기 작업에는 Shared Lock
을 제공하며 쓰기 작업 요청이 들어오는 경우에는 Exclusive Lock(=Mutex)
을 제공합니다.
만약 쓰기 작업 요청으로 Exclusive Lock
이 걸린 경우 다른 쓰기 작업은 물론 읽기 작업 또한 Blocking 됩니다 🔥
정리하자면
Mutex
는 엄격한 동기화 제어 매커니즘으로 어떤 Process 든지 one by one accesses 만 허용합니다.Mutex
는 안전성 측면에서 보았을때 매우 뛰어난 매커니즘이지만,
효율성 측면에서는 떨어지는 매커니즘입니다. 데이터베이스 작업을 보았을 때 약 80%는 읽기 작업이기 때문입니다.
Record Lock
은Mutex
의 이러한 비효율적인 측면을 개선해서 읽기 작업과 쓰기 작업에 따른 Lock 을 다르게 제공하는 매커니즘입니다.
🔐 Writer's lock(Exclusive Lock)
🔐 Reader's lock(Shared Lock)