흐르는 시간의 블로그...

7가지 동시성 모델

2016. 9. 22. 10:42


읽은 책에 대해 다 정리하고 있지는 못하지만...

우쨋건 지난주까지 우격다짐으로 읽어보긴 한 책이다.


출판사링크: http://www.hanbit.co.kr/store/books/look.php?p_code=B3745244799


책에 대해서는 페북의 광고와 팟캐스트 나프다에서 접했다.

오래전부터 동시성 코딩에 대해 관심이 많기는 했다.


이미 15년 전쯤? 구매해서 가장 많이 활용했던 책도 Thread 관련 책이었다.


Multithreading Applications in Win32

Multithreading Applications in Win32

 

저 책의 저자 서문즈음에 나온다. 원문은 기억나지 않지만 대략 이런 내용이다.

"쓰레드는 반드시 네 손 위에서 쓰도록 하라"

모르거나 능력밖의 범주 혹은 통제범위 밖에서는 절대 사용하지 말라는 경고였다.

개인적인 학습의 목적이라면 저런 경고가 괜한 걱정일지 모른다.

그러나 상용 프로그래밍 개발에서는 진리와 같다.


쓸 얘기도 별로 없지만 다시 "7가지 동시성 모델"에 대해 얘기해보자.

내가 걸어온 개발자의 길에서는 상당히 생소한 책이었다.

내용은 충분히 가치가 있었다.

그러나 해당 언어들에 대해 생소하고 예제를 직접 다 실행하고 분석해보지 않은다면 와 닿지 않을 수 있다.


책에서 설명하는 언어에 대해 간단히 적어보자.

  • 클로저 - Java VM 기반의 함수형 언어
  • Elixir - Erlang 기반의 함수형 언어 

클로저 예제를 돌려 보기 위해 이것저것 뒤져보았다.


Elixir도 편하게 예제를 실행해 볼 수 없을까 찾아봤다.

  • http://elixir-lang.org/install.html - Elixir 설치
  • http://elixir-lang.org/getting-started/introduction.html#installation - 시작 부분으로 윈도우에서는 설치 후 iex.bat --werl 명령을 통해 얼랭의 콘솔을 이용하여 더 편리하게 작업 가능하다

참고로 Elixir의 몇몇 예제들은 버전문제인지 모르겠으나 책의 내용처럼 실행이 되진 않았다.
Clojure의 경우 자바의 jar 파일을 요구하는? 경우 환경 설정에 오래걸릴듯 하여 지나쳤다.


  "7가지 동시성 모델"을 한번에 이해하지 못하더라도 분명 읽어볼만 하다. 나처럼 평생 C와 C++로 함수형 언어를 겪어보지 못한 경우라면 말이다. 최근 Modern C++ 책을 보면서 람다와 같은 경우를 접하긴 했으나 저 책은 개념적으로 이해하기에 충분한 도움을 준다.

새롭게 "GO 언어"를 접해보고 있는 "7가지 동시성 모델"책에서 다루는 통신 순차 프로세스( CSP, Communicating Sequential Processes)에 대한 설명이 조금 나온다. 동시성에 대한 부분은 빅 데이터와 그 분석에 기인한바가 크다고 생각한다. map-reduce... 

책에서 얻은 아이디어 중 하나는 GPGPU에 대한 부분이다.
GIS 영역의 일과 GPGPU에서 처리하고자 했던 이미지 프로세싱은 같은 영역의 일이다.
지도와 이미지를 표시한다고 해서 같다고 생각하는 것이 아니라
이미지 프로세싱 자체가 위치와 경계, 계산의 영역이고 GIS 영역 또한 동일하다.

http://philliplemons.com/2014/09/14/ray-casting-algorithm/ - Ray Casting 알고리즘에 대한 부분이다. 실제로 이미지 프로세싱에서도 쓰이지만 GIS에서 2D Polygon 내의 점의 유무를 확인하는데 쓰인다.

이런 부분을 GPU를 이용할 경우 좋은 성능을 낼것이다. 물론 GPU를 활용할 수 있을때에 해당하겠지만...

HW의 변화에 따라 앞으로 동시성 프로그래밍에 대한 요구는 거세게 불어닥칠 것이고 5년 내에 일반화 될 것이다.
개발자로 그에 대한 대비는 분명히 해야할 것으로 보인다.
...