주제
- recursion 과 stack overflow
- 분할 정복 – 카라츠바 알고리즘
주제
금번 스터디는 구종만 님의 매우 명저 “알고리즘 문제해결 전략” 으로 8주간 진행합니다.
개인적으로는 분량도 짧고(!) 내용도 알찬 한주영 님의 “개미수열을 푸는 10가지 방법”으로 진행하길 원했으나 다수결에 밀려(ㅜㅜ) “알고리즘 문제해결 전략” 으로 선정되었습니다.
사실 “알고리즘 문제해결전략”은 매우 명저이고 저도 참 좋아하는 책입니다. 저자분이 그 유명한 알고스팟 운영자시기도 하구요. 많은 분들께서 아주 의욕적으로 알고리즘 주제를 깊이 있게 공부하길 원한다는 의미인 듯 하여 매우 기쁩니다.
아래는 스터디 ppt 입니다.
코딩 소림사 정기 세미나 발표자료
코딩소림사 스터디 ppt
금번 스터디 주제는 concurrent programming 입니다.
멀티코어 환경에서 코어 갯수가 2배로 늘어나면 성능도 2배로 늘어나기를 기대하지만, 실제로 thread가 어떤 구조로 되어있고, 어떤 자원들이 공유되며, 해당 공유 자원을 코어가 어떻게 처리하는지에 대한 정확한 이해가 없으면 이러한 성능향상은 있을 수 없습니다. 때문에 멀티코어 환경에서 프로그램의 성능을 높이려면 concurrent 한 데이터 처리 기법에 대한 이해가 반드시 필요합니다.
스터디 시작 전 미리 알아두어야 할 사전 지식에 대하여
를 이 페이지에 정리해 두었으니 스터디 시작 전에 미리 공부를 해두었으면 합니다.
사전 학습 내용은 모두 java 및 jvm 내용이지만, 다른 언어/os 도 비슷비슷합니다. 하나만 제대로 알고 있으면 나머지는 쉽게 이해가능합니다.
jvm의 메모리 구조를 잘 이해하려면 java process가 어떻게 동작하는지 알아야 합니다. 근데 아이러니하게도 java process가 어떻게 동작하는지 알려면 jvm의 메모리 구조를 이해하고 있어야 합니다. 이러한 모순적 상황에서 이해의 수준을 높이려면 메모리 구조와 process 의 동작 원리를 반복적으로 여러번 공부하는 방법 밖에는 없습니다.
jvm 내에서 프로세스의 흐름을 기술하기 위한 저장 영역을 run-time data area 라고 합니다. 어떤 process가 실행되어 종료될 때 까지 사용되는 모든 데이터는 이 영역에 기록됩니다.
지금부터 설명하는 내용이 중요합니다. run-time data area 내에서 어떤 영역은 프로세스 내의 모든 thread 들이 공유하는 반면, 어떤 영역은 각 thread 마다 독립적으로 생성됩니다. 여기서 thread 간에 공유되는 리소스 영역이 중요합니다. 극단적으로 말하면 모든 쓰레드 문제는 동기화 문제이며, 모든 동기화 문제는 공유 리소스로부터 발생합니다.
run-time data area 에서 다음 영역은 process 내 모든 thread가 공유합니다.
다음 영역은 thread 1개 마다 독립적으로 1개씩 생성되며, 데이터는 공유되지 않습니다.
process 를 간결하고 정확하게 정의하자면, “program in execution”(=실행중인 프로그램)입니다.
process 가 실행되는 순서는 다음과 같습니다.
java process의 동작 원리를 자세하게 설명하는 것은 본 문서의 목적을 넘어서므로 무얼 보고 공부해야 하는지 링크만 제공합니다.