실시간 강의

24. 쓰레드 01/16 (1) - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 1. 16. 12:15

1. 멀티쓰레드

  • 장점
    • 작업이 분리되어 코드가 간결해 진다.
  • 단점
    • 동기화에 주의해야 한다.
    • 교착상태(dead-lock)가 발생하지 않도록 주의해야 한다.

2. 데몬쓰레드

  • 일반 쓰레드의 작업을 돕는 보조적인 역할
  • 일반 쓰레드가 모두 종료되면 자동 종료
void suspend()	쓰레드를 일시정지 시킨다.
void resume()	suspend() 에 의해 일시정지된 쓰레드를 실행대기상태로 만든다.
void stop()	쓰레드를 즉시 종료시킨다.

 

3. Lock & Condition

  • wait() 으로 대기중인 쓰레드의 구역을 나눠준다.
// lock : 1, unlock : 0
ReentrantLock	//재진입이 가능한 lock. 가장 일반적인 베타 lock(Mutex) 
// 읽기lock : 1~n, 쓰기lock : -1, unlock : 0
// 여러사람이 읽을 수 있는 lock
ReentrantReadWriteLock	//읽기에는 공유적이고, 쓰기에는 배타적인 lock

StampedLock	// ReentrantReadWriteLock에 낙관적인 lock의 기능을 추가
  • 재진입 : 같은 객체에 대한 락을 가지고 있으면 다른 동기화 블럭도 락을 다시 얻지않고 들어갈 수 있다.
  • 낙관적인 lock : 일단 무조건 저지르고 나중에 확인 (일단 읽고 Lock을 확인)
    • 읽기 카운트가 계속 올라가면 Write가 계속 기다려야 하는데, 낙관적인 lock은 카운트 증가가 없음
  • Copy Of Read : 읽을 때는 복사본을 주고 쓰기를 할 때는 원본을 준다.
lock.lcok();
// 임계 영역
lock.unlock();

lock.lock();
try{
	// 임계 영역
} finally{
    lock.unlock();
}

 

4. volatile

  • cache와 메모리간의 불일치 해소
  • 휘발성, 자주 바뀜
  • 여러 쓰레드가 공유하는 변수에는 volatile을 붙여야 항상 메모리에서 읽어옴

5. fork & join 프레임웍

  • 작업을 여러 쓰레드가 나눠서 처리하는 것을 쉽게 해준다.