개요
Mutex와, Spin Lock, SRWLock(Slim-Reader-Writer Lock)의 성능 차이를 체크해본다.
프로젝트 정보(Project Informaion)
CPU | Intel I7-6700 3.40Ghz 4코어 8스레드 |
OS | Windows 10 |
IDE | Visual Studio 2019 x86 |
Language | C++11 |
Sum | 10000000 |
SRW Lock
SRW Lock(Slim Reader-Writer-Lock)은 윈도우 비스타부터 추가된 윈도 API이다. 윈도우 비타 전 운영체제 나 혹은 윈도우 가 아니라면 사용할 수 없는 API이다.
SRW는 사용하기 전에 초기화를 진행해야 하며
1
2
3
4
|
CSrwLock::CSrwLock() {
//Initialization SRWLock
InitializeSRWLock(&srwlock_);
}
|
SRW는 읽기 스레드와 쓰기 스레드를 구별하기 위한 Lock으로 4개의 함수를 제공한다.
읽기 스레드 | 쓰기 스레드 |
AcquireSRWLockShared() | AcquireSRWLockExclusive() |
ReleaseSRWLockShared() | ReleaseSRWLockExclusive() |
여기서는 쓰기 스레드에 쓰는 Exclusive() 함수만 사용해서 테스트를 진행한다.
성능 체크
테스트 방식은 동일한 조건으로 Sum을 계산하며 Sum을 시작하기 전과 후에 시간을 측정해서 얼마나 시간이 걸렸는지 확인한다.
Sum 10000000개의 해당하는 Core별 경과 시간은 다음과 같다.
단위는 초 단위이며 컴퓨터가 8 코어 이기 때문에 사실상 16부터는 의미가 크게 없는 수치이다.
SpinLock과 SRWLock가 비슷한 성능을 내는 것을 확인할 수 있다.
후기
Windows에서 제공하는 SRWLock이 가장 성능이 빠르다는 것을 확인할 수 있었다. SPinLock과 비슷해 보이지만 SRWLock은 Read와 Write를 따로 구별해서 Lock을 거는 또 하나의 장점이 있기 때문에 실제 성능은 이 보다 더 많이 차이 날 것으로 예상된다.
유의사항
* 해당 프로젝트는 예외 처리를 최소한으로 했기 때문에 버그가 있을 수 있습니다.
* 만약 이 블로그 글을 보고 잘못된 점이나 참고 가능한 것 등 공부가 가능한 게 있다면 댓글이나
메일(SnowFleur0128@gmail.com) 로 보내주시면 감사하겠습니다.
출처 및 소스코드 링크
git: github.com/SnowFleur/2020-Operator-System/tree/master/%EB%B3%91%ED%96%89%EC%84%B1(Parallelism)/Lock
'운영체제(Operator System)' 카테고리의 다른 글
[운영체제] CAS 기반 SpinLock (0) | 2020.10.15 |
---|---|
[운영체제] 메모리(Memory) (0) | 2020.09.20 |
[운영체제] 피터슨 알고리즘(Peterson's algorithm) (2) | 2020.06.03 |
[운영체제] 임계구역( Critical Section) (0) | 2020.06.03 |