2010년쯤 되면, 기본 사양이 쿼드코어 시대를 맞이하게 될 것이다. 이것은 멀티 쓰레드 환경이 얼마나 가까이 왔는지 보여주는 증거이기도 하다. 이런 시대에 맞추어, 프로그래머는 멀티 쓰레드 환경에서 더 빨리 돌아가도록 설계하고 만들어야 할 것이다. 13, 14, 15 항목에서 설정했던 모든 것들이, 멀티 쓰레드에서 어떻게 동작을 하게 될까?
... 쓰레드를 생각하면 복잡해 지는 로직 속에서 우리는 "동기화 객체(Sync Object)"를 만들어서, 각 쓰레드를 동기화 시키려고 할 것이다. 하지만 이 "동기화 객체"를 사용 하면, 적지 않은 비용을 내야 할 것 이다.
이번 항목은 13,14,15 항목에서는 멀티쓰레드 환경에서의 최적화로 String 클래스를 정의 하는 방법을 이야기 한다.
시작 부터 말하자면, ... 동기화 구역은 최소화 시키고, "동기화 객체"사용은 최소화 한다. 로 요약 된다. 이 중 제일 좋은 것은 "동기화 객체"를 사용 하지 않고, 동기화 시키는 것인데, 방법은 참조 카운팅을 하지 않고, 무조건 복사 해서 사용 하는 방법이다.
총평
마지막 반전처럼, 멀티 쓰레드에 환경에선 지금까지 해왔던 모든 것들이 전혀 다르게 바뀔 수 있다는 것을 보여 준다.
최적화란 것은 환경에 따라 크게 변하는것이므로, "최적화를 최대한 미루고 기본 로직으로만 구성한 뒤에, 마지막에 가서야 최적화를 생각해야 되지 않을까?" 라고 되 물어보는 항목이 된거 같다.
'책 정리 > More Exceptional C++' 카테고리의 다른 글
항목 5 : typename ( 난이도 : 7 ) (0) | 2008.12.22 |
---|---|
항목 4 : 확장 가능한 템플릿 : 상속을 통해서 아니면 특성(traits) 클래스를 통해서? ( 난이도 : 7 ) (0) | 2008.12.22 |
항목 3 : 판단자(predicate) Part 2 : 상태와 판단자 ( 난이도 : 7 ) (0) | 2008.12.20 |
항목 2 : 판단자(predicate) Part 1 : remove()가 삭제 하는 것은? (난이도 : 4 ) (0) | 2008.12.19 |
항목 1 : 스트림 전환(Switching Streams) ( 난이도 : 2 ) (0) | 2008.12.19 |
항목 15 : 최적화 미루기 Part 3 : 반복자와 참조 ( 난이도 : 6 ) (0) | 2008.12.18 |
항목 14 : 최적화 미루기 Part 2 : 미루기에 대한 소개 ( 난이도 : 3 ) (0) | 2008.12.18 |
항목 13 : 최적화 미루기(lazy optiomization) Part 1 : 그저 평범한 String (난이도 : 2 ) (0) | 2008.12.18 |
항목 12 : inline ( 난이도 : 4 ) (0) | 2008.12.17 |
항목 28 : 다형성 제어하기 ( 난이도 : 3 ) (0) | 2008.12.16 |
최근댓글