본문 바로가기
Today I learned

Concurrency Patterns

by soheemon 2021. 8. 9.

Single Threaded Execution

한번에 한 Thread만 접근할 수 있도록 하자 = 이런 영역을 임계영역이라고 한다.

JAVA에서는 synchronized 키워드로 임계영역 구현 가능.

Thread간의 Conflict 발생 있음. (하나의 Thread가 lock을 점유해서 다른 Thead들이 기다리는 상태)


LockObject


Guarded Suspension

처리 될때까지 기다린다.

wait(), notify() 메서드를 이용해서 다른 Thread의 작업이 끝날때까지 기다렸다(wait) 작업이 끝났다는 알림이 오면(notify) 실행한다.

https://en.wikipedia.org/wiki/Guarded_suspension

 

Balking

Guarded Suspension와 비슷하지만 다른점은 기다리지 않는다는것.

준비가 안됐으면 그냥 실행하지 않는다.

https://en.wikipedia.org/wiki/Balking_pattern

 

Scheduler


Read/Write

공유 자원에 대해서 여러 쓰레드가 읽기만 하면 상관이 없는데, 아직 다 안썼는데 읽게되는것은 문제가 생긴다.

이 문제를 해결하기 위해서 synchronized 키워드로 임계영역을 만들어서 자원에 대해 락을 걸 수 있지만 이는 최적의 방법이 아니다.

왜냐하면.. synchronized 키워드는 읽기에도 락을 걸기 때문이다.

풀어말하면 쓰레드A가 자원을 읽고있을동안, 쓰레드B가 읽기를 원한다면 쓰레드B는 쓰레드A가 자원을 다 사용할 때까지 대기해야 한다. ==> 이는 성능적으로 좋지 않다..

 

언제사용할까?

* 읽기 빈도가 쓰기 빈도보다 높을때

* 읽기 처리가 무거울때

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReadWriteLock.html

--> 예제 코드를 봐도 잘 이해가 안간다 -ㅁ-;;


LockObject
Producer-Consumer
Two-Pahse Termination
Double Buffering
Asychronous Processing
Future

 

댓글