엘릭서 - 동시성

오픈소스·2023년 2월 27일
0
post-thumbnail

https://product.kyobobook.co.kr/detail/S000001810492

추천사

첫부분

저는 하드웨어의 발달이 소프트웨어 개발에 어떤 영향을 미치는지에 항상 주목해 왔습니다.

수십년 전에는 메모리가 대단히 귀중한 자원이었습니다. 그 시절에는 프로그램이 메모리를 필요한 만큼 할당받고 필요할 때마다 수정하는 게 일반적이었습니다. 하지만 메모리를 할당하고 사용하지 않는 메모리를 정리하는 작업은 잦은 오류를 동반했습니다. 어떤 메모리 영역은 영원히 해제되지 않았고, 때로는 이미 사용 중인 영역에 할당되어 프로그램을 고장 내기도 했습니다. 당시에도 가비지 컬렉션(garbage collection)이라는 개념은 알려져 있었지만, 이를 일반적인 소프트웨어 개발에 사용해 수동 메모리 관리에서 벗어나기에는 더 빠른 CPU가 필요했습니다. 시간이 흘러 이윽고 CPU의 속도가 향상되었고, 우리가 사용하는 대부분의 프로그래밍 언어들은 이제 가비지 컬렉션을 지원합니다.

최근에는 비슷한 현상이 일어나고 있습니다. CPU의 속도를 올리는 일이 한계에 부딪히자 코어 개수가 늘어나기 시작했습니다. 이제 머신을 최대한 사용하기 위해서는 가능한 한 많은 코어를 사용해야 하지만, 이 방식은 현재 우리가 프로그램을 작성하는 방식과 크게 다릅니다.

실제로 여러 코어를 사용하는 프로그램에서 메모리의 상태를 수정하는 것은 소프트웨어의 성능을 떨어뜨립니다. 만약 4개의 코어가 같은 메모리 영역을 참조하고 수정하려 한다면 서로 간에 충돌이 일어날 겁니다. 어떤 동기화 로직이 들어가지 않는 이상 언젠가는 메모리의 값을 깨뜨릴 겁니다.

저는 이 동기화가 수동이고 오류를 쉽게 발생시키며 성가신 작업인 데다가 퍼포먼스에도 좋을게 없음을 금세 깨달았습니다. 앞으로 커리어 내내 이렇게 시간을 낭비하고 싶지는 않다는 생각이 들어서 새로운 언어와 기술을 공부해보기로 했습니다.

이것이 제가 얼랭 가상 머신(Erlang VM)과 그 생태계에 빠지기까지의 이야기입니다.

...

조제 발림(Jose Valim), 엘렉서 창시자

0개의 댓글