멀티프로그래밍 위키로 바로가기 → http://www.devnote.net/wiki
The Art of Multiprocessor Programming” 을 다시 읽기 시작하면서, 낙관적 동기화(Optimistic synchronization) 혹은 lock-free에 대한  재미있는 비유를 발견하였습니다. 아래 원문과 제가 이것을 번역한 것을 복사하여 놓았습니다. 어딘가 잡지에서 나왔을 법한 유머지만, 멀티프로세서에서 lock-free 프로그래밍을 하는 것에 대한 적절한 비유가 아닐까 생각합니다.

A tourist takes a taxi in a foreign town. The taxi driver speeds through a red light. The tourist, frightened, asks “what are you are doing?” The driver answers: “Do not worry, I am an expert.” He speeds through more red lights, and the tourist, on the verge of hysteria, complains again, more urgently. The driver replies. “Relax. relax. you are in the hands of an expert.” Suddenly, the light turns green, the driver slams on the brakes, and the taxi skids to a halt. The tourist picks himself off the floor of the taxi and asks “For crying out loud, why stop now that the light is finally green?” The driver answers “Too dangerous. could be another expert crossing.”


한 여행자가 외국 도시에서 택시를 탔다. 택시기사는 빨간 신호등을 무시하고 속도를 내며 지나갔다. 여행자가 불안해하며 "뭐하시는 겁니까?"라고 물었다. 택시기사는 "걱정 마세요. 저는 전문가입니다." 라고 대답했다. 택시기사는 몇 개의 빨간 신호를 더 지나갔고 여행자는 겁에 질려, 보다 다급히 불평했다. 택시기사는 "당신은 전문가의 손 안에 있으니, 편하게 있으세요"라고 대답했다. 갑자기 신호가 녹색으로 바뀌자 택시기사는 급제동했고 택시는 미끄러지며 정차했다. 여행자는 택시 바닥에서 몸을 일으키며 큰 소리로 물었다. "이제 마침내 녹색불이 켜졌는데 왜 정차합니까?" 택시기사는  "너무 위험하오. 다른 전문가가 지나갈수 있습니다."라고 답했다.

크리에이티브 커먼즈 라이센스
Creative Commons License

Lock-Free에 관해 2004년 말에 CUJ에 연재되었던 기사를 소개합니다. Andrei Alexandrescu와 Maged Michael이 쓴 기사로 Lock-Free 자료구조를 처음 접하는 사람들에게 매우 유익한 내용입니다.

http://erdani.org/publications/cuj-2004-10.pdf
http://erdani.org/publications/cuj-2004-12.pdf

아래 10월 기사 중 일부를 발췌하여 번역하였습니다. 2004년말 Lock-free 프로그래밍 전문가가 대여섯명 정도일 거라고 말했으니, 지금은 몇 명이나 될까요?

In fact, there must be around half a dozen of lock-free programming experts around the world, and yours truly is not among them. With luck, however, this article will provide you with the basic tools, references, and enthusiasm to help you become one.

사실, 전세계에 lock-free 프로그래밍 전문가는 분명 대여섯명 정도 있으며, 당신은 그 중 한사람은 아닐 것입니다. 그러나, 운이 좋다면, 이 글이
당신이 lock-free 전문가가 되는데 도움을 줄 기본적인 도구와 참고자료 그리고 열정을 제공해 줄 것입니다.
크리에이티브 커먼즈 라이센스
Creative Commons License

전에 윈도우즈 비스타 힙(Heap) 메모리 관리자의 성능향상에 관해 언급한 적이 있습니다. 이 성능향상은 대부분 멀티코어나 멀티프로세서 컴퓨터에만 해당됩니다. CPU가 하나인 컴퓨터에서는 오히려 성능을 저하시킬 수도 있습니다.

저는 요즘 Maged Michael의 알고리즘에 기반한 Lock-Free 메모리 관리자를 만들고 있습니다. 조만간 멀티프로그래밍 위키에 소스 코드와 함께 공개하려고 합니다. Maged Micheal은 Lock-Free 분야에 몇 안되는 전문가로, 특히 그가 쓴 논문들은 매우 복잡하고 어려운 알고리즘을 최대한 심플하게 최적화시켜 놓았으며 바로 실제 프로그래밍에 응용할 수 있는 내용이 주를 이루고 있어, 제가 가장 좋아하는 스타일입니다.

제가 개발한 Lock-Free 메모리 관리자와 윈도우즈의 LFH(Low Fragmentation Heap)와의 성능 비교를 해본 결과 10%이상 더 빠른 것으로 나타나고 있습니다만 여러 가지 테스트 설정 변수들을 변경할 때마다 조금씩 다른 결과가 나오고 있습니다. 때로는 윈도우즈 LFH가 더 좋은 성능을 보이고 있습니다. Lock-Free 메모리 관리자를 만들다 보니 Lock-Free 프로그래밍이 얼마나 어렵고 디버깅하기 힘든 것인지 다시 깨닫고 있습니다.

윈도우즈의 LFH는 거의 Lock-Free로 이루어져 있고 이미 운영체제에서 지원되고 있어 상당히 많은 테스트를 거쳐 검증된 것으로 보입니다. 따라서, 만약 멀티스레드로 이루어진 상용 프로그램을 개발하고 있는데, 메모리 alloc/free가 병목현상을 일으킨다면, 저는 별도로 메모리 관리자를 개발하지 말고 LFH를 사용하도록 적극 권장합니다. (윈도우즈 비스타에서는 LFH를 실행시간 중에 자동으로 사용하도록 하고 있기도 합니다.) 단, LFH는 윈도우즈 XP이상에서만 지원됩니다. 그리고 Lock-Free 메모리 관리자들은 기본적으로 super block이라는 비교적 큰 메모리 블럭을 단위로 사용하고 있어 기존 memory allocator에 비해 보다 많은 메모리를 사용한다는 것을 기억하시기 바랍니다.


크리에이티브 커먼즈 라이센스
Creative Commons License