[자바 7] Fork/Join 프로그래밍
http://www.javacodegeeks.com/2011/02/java-forkjoin-parallel-programming.html
http://www.ibm.com/developerworks/java/library/j-jtp11137/index.html
http://www.ibm.com/developerworks/java/library/j-jtp03048/index.html
http://www.coopsoft.com/ar/ForkJoinArticle.html
자바의 Thread 프로그래밍을 조금 더 간편하게 도와줄 API가 추가된다. 조금 일정 영역에 특화된 API로 보인다. request-response 형태의 웹 요청 처리용으로는 어떨지 모르겠지만... 어떤 작업이 여러 독립적인 하위 작업으로 나뉘어 처리가 가능한 작업일때 Fork/Join을 적용할 수 있겠다. 가장 흔히 등장하는 예로, merge sorting과 배열에서 가장 큰 값을 찾아내는 작업이 있는데, 조금 더 실무에 가까운 예제가 언뜻 머리에 떠오르지 않는다. 이런건 어떨까... 1년간 거래된 상품 중에서 가장 많이 팔린 상품을 찾는 작업이라던지.. 가장 많은 댓글이 달린 볼르그 글을 찾는 작업은 어떨까..
거래 내역이 엄청나게 많을 테니까 월별로 쪼개서 가장 많이 팔린 상품 데이터를 찾아내고 각 월별로 찾아낸 상품 정보를 다시 합쳐서 그 안에서 다시 또 가장 많이 팔린 상품을 찾아내면 되겠다. 댓글 많이 달린 글 찾기도 마찬가지다.
갑자기 Map/Reduce가 떠오른다. Fork/Join 이라는 단어를 봤을 때 부터 떠올랐던 단어들이다. 하둡 책 1장에 Map/Reduce 설명이 잘 나와있는데, Fork/Join은 Map/Reduce와 거의 같아 보이지만, 그것 보다 더 많은 제어권을 개발자에게 주는 것처럼 보인다. 그렇게 차이를 보이는 핵심 개념이 Fork/Join에 예제에 자주 등장하는 Threshold라는 것인데, 이것을 기준으로 Fork 할지 말지를 결정하게 된다. Threshold 값 이하의 리소스는 단순 처리하며, 그 이상의 경우에만 병렬 처리를 하도록 설정한다. 물론 뭐 이것도 코딩하기 나름이겠지만 보통 저런식으로 하게 마련일텐데, 저 형태 자체를 템플릿-콜백 스타일로 만들어 볼 수 있지 않을까 싶다.
코딩하는 방법은 제일 위에 있는 링크에 잘 나와있어서 굳이 내가 다시 정리해야 할 필요는 못 느끼겠다. 그냥 한번 돌려본 스크린 캡춰로 대신한다.
맨 위에 있는 글이 가장 정리가 잘 되어 있고, 주요한 링크들이 많다. 그 아래 두개의 링크는 너무 오래된 글들이라서 API가 지금과는 다르지만, 주요 개념 파악하기는 좋다. 그보다 조금 더 근본적인 개념이 알고 싶다면 맨 마지막 링크를 보는게 좋다.