OS 수준에서, JVM 수준에서 스레드 동기화는 어떻게 이루어지는지 살펴보자.
동기화를 위한 OS 수준 커널 객체
OS 수준에서는 동기화할 때 쓰는 커널 객체들이 있다.
- 커널 객체는 포인터 혹은 카운터로 사용되는 메모리로 생각하면 된다.
- 대표적으로 Mutex, Semaphore → Lock이랑 연결되는 개념
- 근데 이건 좀 무거운 방법이다. 개수제한도 있어서 막 만들어서 쓸 수가 없다.
- 그에 비해 spin lock은 객체가 아니며 CPU를 계속 사용하는 반복문이다.
- 이건 가벼움, 무식한 방법이지만 성능이 꽤 잘나옴
- lock 범위가 짧다 싶으면 spin lock으로 성능을 개선할 수 있다.
- OS 기반 동기화도 결국 CPU 하드웨어 수준에서 처리를 해줘야한다.
JVM 수준에서는 동기화 객체가 있는 것이라기 보다는 인스턴스 수준에서 동기화를 한다.
synchronized 메서드와 모니터락
synchronized 제대로 활용하기
Non-Blocking 동기화 변수 및 변수 접근 원자성