lock-free 회의론

저도 이전에 lock-free에 대해 관심이 많이 생겨서 이것 저것 많이 알아보고 구현도 해본적이 있습니다만 현재는 회의적인 입장입니다. 이유는 2가지 입니다.
  1. 사용하는데 제약이 너무 많음
  2. 들인 노력에 비해 향상되는 성능이 크지 않음
제약이 너무 많음
lock-free 알고리즘의 하나인 SpinBuffer의 경우 두가지 제약이 있습니다. 하나는 소비자 스레드와 생산자 스레드가 각각 하나씩이어야 한다는 것이고 다른 하나는 두 스레드가 블럭되지 않고 SpinBuffer의 생산, 소비 함수를 주기적으로 호출을 해야 한다는 점입니다. 이 두 조건을 모두 만족하는 상황에서만 SpinBuffer를 사용해야 합니다. 그외에 대부분의 lock-free 알고리즘은 이러한 자기만의 제약사항이 있습니다. 거기에 공통적인 문제점인 ABA 문제도 있죠. 이런 문제점을 잘 이해하고 사용하지 않으면 큰 낭패를 볼 수 있습니다.

노력대 성능비
이렇게 제약사항을 모두 충족시키며 적용을 했음에도 불구하고 lock-free 알고리즘을 적용하여 향상되는 성능은 미미한 편이었습니다. 그보다는 busy wait나 context switching을 줄임으로서 얻는 성능의 향상이 더 컸습니다.

Proactor 패턴
Half-Sync/Half-Async 패턴
바람직한 Producer-Consumer 모델

lock-free 알고리즘을 이해하고 구현하는데 시간을 들이는 것보다는 기존의 concurrent 패턴을 잘 이해하고, 그안에서 성능을 향상시키는게 가격대 성능비(?)로 낫다고 판단했습니다. 그래서 요즘은 concurrent 패턴들을 조금 더이상적으로 구현하는데 신경을 쓰고 있습니다. 성급하게 응용을 하기 보다는 원저자의 의도에 가깝게 FM대로 구현을 하는 것이지요.

by 자바워크 | 2009/10/02 05:54 | 기타 | 트랙백(1) | 덧글(0)

트랙백 주소 : http://javawork.egloos.com/tb/2439670
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Tracked from Confluence: .. at 2009/10/05 10:45

제목 :
http://javawork.egloos.com/2439670 "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil" Sir Charles Antony Richard Hoare ;Donald Knuth가 한 말이 아니라는군요. ;(http://en.wikipedia.org/wiki/C.A......more

:         :

:

비공개 덧글

<< 이전 페이지     다음 페이지 >>