2010년쯤 되면, 기본 사양이 쿼드코어 시대를 맞이하게 될 것이다. 이것은 멀티 쓰레드 환경이 얼마나 가까이 왔는지 보여주는 증거이기도 하다. 이런 시대에 맞추어, 프로그래머는 멀티 쓰레드 환경에서 더 빨리 돌아가도록 설계하고 만들어야 할 것이다. 13, 14, 15 항목에서 설정했던 모든 것들이, 멀티 쓰레드에서 어떻게 동작을 하게 될까?

... 쓰레드를 생각하면 복잡해 지는 로직 속에서 우리는 "동기화 객체(Sync Object)"를 만들어서, 각 쓰레드를 동기화 시키려고 할 것이다. 하지만 이 "동기화 객체"를 사용 하면, 적지 않은 비용을 내야 할 것 이다.


이번 항목은 13,14,15 항목에서는 멀티쓰레드 환경에서의 최적화로 String 클래스를 정의 하는 방법을 이야기 한다.


시작 부터 말하자면, ... 동기화 구역은 최소화 시키고, "동기화 객체"사용은 최소화 한다. 로 요약 된다. 이 중 제일 좋은 것은 "동기화 객체"를 사용 하지 않고, 동기화 시키는 것인데, 방법은 참조 카운팅을 하지 않고, 무조건 복사 해서 사용 하는 방법이다.


총평

마지막 반전처럼, 멀티 쓰레드에 환경에선 지금까지 해왔던 모든 것들이 전혀 다르게 바뀔 수 있다는 것을 보여 준다.

최적화란 것은 환경에 따라 크게 변하는것이므로, "최적화를 최대한 미루고 기본 로직으로만 구성한 뒤에, 마지막에 가서야 최적화를 생각해야 되지 않을까?" 라고 되 물어보는 항목이 된거 같다.



posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요