|
Concurrency(병행성)와 parallelim(병렬성), 또는 concurrent programming(병행 프로그래밍)과 parallel programming(병렬 프로그래밍)의 차이를 지금까지 깊게 생각해본 적이 없었다. 막연히 concurrent programming은 예전 운영체제 시간에 뮤텍스와 데드락을 배울 때 봤었고, 병렬 프로그래밍은 OpenMP, MPI를 배울 때 자주 봤었다. 그런데 이 둘은 생각보다 구분이 뚜렷이 되고 있었다. 그걸 지금까지 제대로 몰랐다. 참고 글: Concurrent and Parallel Are Not The Same 위의 글을 보면 concurrent와 parallel이 같지 않다고 명확히 말하고 있다. 사실 이 둘은 경계가 모호하게 느껴져 아무렇게나 사용되었다. 일단 한 줄로 요약하면: Concurrency는 프로그램의 성질이고 parallel execution은 기계의 성질이다. 이것만 가지고는 여전히 긴가민가 한다. 먼저 concurrency부터 이야기를 하면, 어떤 프로그램이나 알고리즘이 순서에 상관없이 동시에 수행될 수 있다면 concurrent하다고 말한다. 예를 들어, 1부터 100까지 숫자를 더하는 과정을 생각해보면 숫자 100개를 여러 부분 집합으로 나눈 뒤 동시에 부분합을 구한다. 그리고 이 부분합을 다시 더하면 원래 얻고자 하는 값을 얻을 수 있다. 이 때 이 알고리즘은 concurrent하다라고 말한다. 그런데 이 알고리즘이 정말 물리적으로 병렬로 돌아갈지 아닐지는 이 알고리즘이 어떤 하드웨어 위에서 돌아갈지 알아야만 확답할 수 있다. 방금 이야기한 알고리즘이 멀티 프로세서 머신에서 돌아가야 병렬 실행된다라고 말한다. Parallel execution은 따라서 프로그램의 성질보다는 하드웨어의 성질이다. Concurrent한 프로그램은 싱글코어 머신에서도 분명 돌아간다. 뮤텍스, 데드락은 싱글코어에서도 얼마든지 그 의미를 갖는다. 멀티스레드 프로그램이 비록 물리적인 제약으로 싱글코어에서 시분할 형태로 돌아가지만 겉으로는 concurrent하게 작동한다고 속일 수 있다. 반대로 아무리 멀티스레드로 작성된 프로그램이라 하더라도 멀티코어가 아니면 병렬로 작동한다고 말하지 못한다. 대충 이 정도면 병행과 병렬, concurrent와 parallel의 차이가 다소 이해가 되었을 것이다. 몇 가지 실제 예를 적용해보면:
이제 위키 설명에서 이러한 미묘한 차이를 느낄 수 있다 (영어 번역은 귀찮아서 안 했음 죄송..)
최근 등록된 덧글
개발자 입장에서의 수많은 ..
by Jiyoon at 02/04 저도 아들 돌잔치때 돌잡이 .. by 박상욱 at 01/18 미국 대학원 원서 작성중에 p.. by 태클사이야 at 01/13 TO: 박PD 로그인 하지 않아.. by 박응용 at 01/10 http://gigglehd.com/zbx.. by dhunter at 12/28 우와.. 좋네요. 태반이 .. by 윤광배 at 12/17 항상 좋은 글 잘 보고 있습니.. by y2k at 11/23 글이 좋아서 제 블로그에 담.. by 쏭섭 at 11/23 최근 등록된 트랙백
메뉴릿
이글루 파인더
|