루비 컨퍼런스 2008 - 둘째날
둘째날 가장 흥미롭게 들은 발표는 짐 와이릭의 "What Every Rubyist Should Know About Threads"입니다. 짐은 루비의 Rake 빌드 유틸리티를 만든 분으로 루비 커뮤니티의 유명인사죠. "무어의 법칙"의 종말, 멀티코어 CPU의 등장 등 병렬 프로그래밍이 중요해진 배경과 함께 쓰레드를 통한 병렬 프로그래밍, 그리고 쓰레딩 모델의 문제점과 대안에 대해 쉽고 명쾌하게 설명하시더군요.
짐은 발표 마지막 무렵에 Erlang의 병렬 처리 모델과 Clojure의 병렬 처리 모델을 예로 들었습니다. 기본적으로 쓰레딩 모델의 문제점은 과연 공유된 메모리를 안전하게 업데이트할 수 있는냐는 건데, Erlang의 경우에는 모든 변수를 상수로 만들어 버리는 방식으로 이 문제를 피해갑니다. 즉 모든 공유 메모리를 읽기 접근만 가능하게 강제하는 방식으로 문제의 소지를 없애버리는 거죠.
Clojure의 경우는 조금 더 절충적인 접근 방식을 사용하는데, 공유가 불가능한 쓰레드 로컬 변수와 트랜스액션을 통해서만 접근 가능한 레퍼런스 변수 등 두가지 종류의 변수를 통해 메모리 공유 문제를 해결하고 있습니다. 짐은 병렬 처리를 위해서는 멀티 쓰레딩 보다는 그에 특화된 프로그래밍 언어를 활용하는 전략을 권하고 싶다고 합니다.
이어지는 발표는 일리야 그리고릭의 "Ruby Heavy-Lifting: Lazy load it, Event it, Defer it, and then Optimize it"였는데, 마침 주제가 짐의 발표와 이어져 재밌게 들었습니다. 다중 프로세싱, 메세지 큐, Map Reduce, 이벤트 등 루비에서의 분산 처리와 퍼포먼스를 위한 다양한 전략이 주제로 다뤄졌습니다. 최근 루비로 개발된 대용량 서비스들이 많이 등장하면서, 병렬/분산 처리가 이번 컨퍼런스의 중요한 화두가 된 듯 합니다.
올랜도에는 디즈니월드, 유니버셜 스튜디오 등의 유명 테마파크가 여럿 있습니다. 이틀간 쏟아져 들어온 정보의 압박으로 복잡해진 머리도 식힐겸 저녁에는 디즈니월드에 다녀왔습니다. 밤에 하는 불꽃놀이가 기대이상으로 근사하더군요.

혹시 제각기 날아가는 수십개의 불꽃을 보고 컴퓨터 쓰레드를 연상하신 분은 없는지요? 어떤 면에서 우리가 사는 세상은 하나의 거대한 병렬 머신입니다. 걸어다니는 사람들도, 공기 중의 분자들도 모두 실시간으로 병렬 운동을 하고 있죠. 저리도 당연한 병렬 처리가 컴퓨터에서는 뭐그리도 복잡한 걸까요? ;)
