Notice
Recent Posts
Recent Comments
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

Grobble

PCC, OCC에 대해서 본문

공부

PCC, OCC에 대해서

smilu97 2021. 9. 2. 16:34

병렬프로그래밍수업 1주차에서 잠깐 언급된 PCC와 OCC에 대해서 잊어버리지 않도록 간단히 정리하고 사견을 덧붙인다.

Concurrency Control

Concurrency Control, 즉 동시성 제어란 여러 쓰레드가 가까운 도메인에서 동시에 작업하고 있을 때, 같은 오브젝트에 대하여 동시에 수정을 가하거나, 규칙에 맞지 않는 PropertySet를 읽어들이는 일을 방지하는 것이다.

이것을 달성하기 위해서, 작업을 시작하기 전 미리 검사하는 방법(Pessimistic)과 우선 작업을 수행한 뒤 나중에 고치는 방법(Optimistic)이 있다.

Pessimistic Concurrency Control (PCC)

PCC에서는 주로 거대한 LockTable이 존재해서, 어떤 Transaction이 들어왔을 때 이것이 어떤 오브젝트에 어떻게 접근하는 지를 분석한 후에, 필요한 만큼 기다린 후에 해당 Transaction이 실행될 수 있도록 한다.

(Transaction을 분석하면 해당 작업에 필요한 ObjectSet을 얻을 수 있을 것인데, 이 ObjectSet간의 Intersection이 존재하는지 빠르게 알아내거나, 이미 쌓이고 쌓인 Transaction들의 대기열에 새로운 Transaction을 어느 곳에 집어넣을 수 있을 지 검사하는 것 등이 주요 이슈가 될 것 같다.)

Optimistic Concurrency Control (OCC)

OCC에서는 작업이 들어왔을 때 검사 없이 바로 필요한 작업이 수행되지만, 당연하게도 Conflict가 일어나지 않는다는 보장이 없다. 때문에, 수정할 오브젝트들의 복사본에 작업을 수행한 뒤, 다른 Transaction에서도 수정되었는지 검사해서 이러한 Conflict가 일어났다면 Rollback을 수행하고 그렇지 않다면 Commit한다.