Skip to content

Commit 596b5f0

Browse files
authored
[week2][도율] - 2주차 (#15)
1 parent ad6c0ff commit 596b5f0

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

doyul/week2.md

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
### Volatile 키워드의 동작 원리와 한계점
2+
3+
> 가시성(visibility) 문제를 해결
4+
5+
Volatile 변수에 대한 읽기와 쓰기는 항상 메인 메모리에서 직접 이루어지기 때문에, CPU 캐시를 거치지 않고 직접 메인 메모리와 통신하여 최신 값 보장.
6+
7+
Volatile 변수 접근 전후로 메모리 장벽(memory barrier) 생성으로 명령어 재배치를 방지한다.
8+
9+
하지만, 단일 변수 read/write 작업에 대해서만 원자성을 보장하기 때문에, 복합 연산에 대해서는 원자성을 보장하지 않는다. 또한 여러 스레드가 동시에 값을 변경한다면 race condition이 발생할 수 있다.
10+
11+
### Synchronized 키워드와 ReentrantLock의 차이점
12+
13+
| 특징 | Synchronized | ReentrantLock |
14+
|------|--------------|---------------|
15+
| 유연성 | 블록 또는 메소드에 적용되는 선언적 방식 | lock()과 unlock() 메소드를 통해 명시적 제어 가능 |
16+
| 공정성 | 공정성 보장하지 않음 | 생성자 파라미터를 통해 공정한 Lock 생성 가능 |
17+
| 인터럽트 처리 | 인터럽트에 반응하지 않음 | lockInterruptibly() 메소드로 인터럽트에 반응 가능 |
18+
| 타임아웃 | 락 획득 시도에 대한 타임아웃 미지원 | tryLock(long time, TimeUnit unit) 메소드로 타임아웃 지원 |
19+
| 성능 | 일반적인 상황에서 ReentrantLock과 비슷 | 경쟁이 심한 상황에서 더 나은 성능 가능 |
20+
| 조건 변수 | Object의 wait(), notify() 메소드 사용 | Condition 객체를 통해 더 세밀한 조건 제어 가능 |
21+
22+
### LockSupport 클래스의 park()와 unpark() 메소드
23+
24+
> LockSupport는 저수준 동기화
25+
26+
- `park()`: 현재 스레드를 WAITING 상태로 만들어 CPU 자원을 사용하지 않게 한다.
27+
- `unpark(Thread t)`: 지정된 스레드를 깨워 RUNNABLE 상태로 만든다.
28+
29+
- 특징
30+
- permit 개념을 사용하기 때문에 순서 독립성을 갖는다.
31+
- `park()`는 `thread.interrupt()`에 의해 중단 될 수 있다.
32+
- `parkNanos()`를 통해 타임아웃
33+
34+
- 주의점
35+
- Spurious Wakeup 가능성으로 인해 조건 검사 추가가 권장된다.
36+
- 데드락
37+
- volatile이나 동기화 없이는 가시성 문제도 발생 가능
38+
39+
고수준 `concurrent` 패키지를 이용하는 것이 권장된다.
40+
41+
### Java Memory Model(JMM)과 happens-before 관계
42+
43+
> JMM은 멀티스레드 환경에서 변수의 가시성, 원자성, 순서성을 보장하기 위한 규칙을 정의한다.
44+
45+
- JMM 특징
46+
- 공유 변수는 메인 메모리에 저장
47+
- 각 스레드는 CPU 캐시를 이용하여 작업에 속한 변수의 복사본을 가질 수 있다.
48+
- 변수 값이 언제 메인 메모리로 read/write 되는지 정한다.
49+
50+
> `A happens-before B`는, A의 메모리 작업 결과가 B에서 보이는 것을 보장한다.

0 commit comments

Comments
 (0)