멀티코어와 동기화
커다란 자료구조 전체를 하나의 락으로 보호하는 「거친 단위(coarse-grained) 락」과, 부분별로 다른 락으로 보호하는 「세밀한 단위(fine-grained) 락」을 비교한 설명으로 올바른 것은?
- A거친 단위 락이 언제나 병렬성이 높다
- B세밀한 단위 락으로 하면 락의 수가 줄어든다
- C세밀한 단위는 여러 스레드가 서로 다른 부분을 동시에 사용할 수 있어 병렬성이 높지만, 설계가 복잡해지고 데드락의 위험도 늘어난다
정답과 해설 보기
정답: C. 세밀한 단위는 여러 스레드가 서로 다른 부분을 동시에 사용할 수 있어 병렬성이 높지만, 설계가 복잡해지고 데드락의 위험도 늘어난다
거친 단위 락은 단순하고 실수하기 어려운 반면, 관계없는 부분을 사용하는 스레드끼리도 서로 기다리게 되어 코어가 늘어도 빨라지기 어렵습니다. 해시 테이블의 버킷마다 락을 나누는 것과 같은 세밀한 단위로 하면 다른 부분은 동시에 조작할 수 있습니다. 다만 여러 락을 잡는 상황이 늘어나, 잡는 순서의 관리나 락 자체의 부담이 문제가 됩니다.
- A. 거친 락에서는 한 번에 하나의 스레드만 들어갈 수 있습니다.
- B. 락의 수는 늘어납니다.
- C. 맞습니다. 단순함과 병렬성의 균형을 고려하여 선택합니다.