무엇을 공유하느냐로 가르고 기법을 잇는 결
프로세스와 스레드를 저는 무엇을 공유하느냐로 가릅니다. 프로세스는 각자 메모리를 따로 가져 서로 간섭이 적은 대신 주고받는 비용이 큽니다. 스레드는 같은 메모리를 공유해 가볍고 빠른 대신, 여럿이 같은 데이터를 동시에 건드려 꼬이는 문제가 생깁니다. 동시성 제어가 필요한 건 바로 이 공유 때문입니다. 과제에서 여러 스레드가 같은 카운터를 동시에 올리다 값이 어긋난 적이 있는데, 그때 그 구간을 한 번에 하나만 들어가게 잠그는 방식으로 막았습니다. 다만 잠금은 공짜가 아닙니다.
너무 넓게 잠그면 느려지고, 잘못 얽으면 서로 기다리다 멈추는 교착이 생깁니다. 그래서 저는 잠금을 최소 구간에만 걸고, 가능하면 공유 자체를 줄이는 쪽을 먼저 봅니다. 공유를 안 하면 막을 일도 없기 때문입니다.