
191
3
장
주요 개념
아이템
17
: 공유 상태 병렬성에 주의하라
가장 과감한 형태의 공유조차도 러스트는 안전성을 보장한다.
에런 투론
Aaron
Turon
(
https://oreil.ly/wKFxX
)
공식 문서에 따르면 러스트는 ‘겁 없는 동시성 프로그래밍(
https
://
oreil
.
ly
/
R7eq9
)’을 제
공한다고 하지만, (아쉽게도) 아무리 러스트라 해도 동시성을 두려워해야 한다. 그 이유를 자
세히 알아보자.
이번 아이템에서는 여러 실행 스레드가 메모리 공유를 통해 서로 통신하는
공유 상태 병렬
성
shared
state
parallelism
에 대해 살펴본다. 어떤 언어를 사용하더라도 스레드끼리 상태를 공유하면
다음과 같은 두 가지 끔찍한 문제가 발생하기 쉽다.
●
데이터 경쟁
: 데이터가 손상될 수 있다.
●
교착 상태:
프로그램이 중단될 수 있다.
둘 다 거의 테러 수준으로 끔찍한 문제다. 실제로 두 문제가 발생했을 때 디버깅하기가 매우 어
렵다. 오류가 비결정론적으로
nondeterministically
나타나고 부하가 높은 상태에서 발생하기 쉽기 때
문에, 단위 테스트나 통합 테스트를 비롯한 그 어떠한 종류의 테스트 (아이템
30
)로도 걸러내
지 못하고 실전에서 갑자기 등장하는 경우가 많다.
이와 관련해 러스트는 엄청난 진전을 이뤘다. 이 두 가지 문제 중 하나를 ...