2010-08-18 4 views
5

동시 사용 프로그래밍에 대한 패러다임과 방법이 많이 있습니다. 소프트웨어 트랜잭션 메모리, 액터, 공유 상태 동시성, 튜플 공간 및 기타 여러 가지.동시 계산의 예제 문제

그러나 내가 찾지 못한 것은 동시성에 대한 흥미로운 테스트 문제 라이브러리입니다. 잘 알려진 사례 중 하나는 "식사 철학자 문제"입니다.이 문제는 충분히 복잡하거나 동기가 없으며 현실적인 문제도 아닙니다. 그렇다면 단지 작업 분포 만 필요로하는 많은 병렬 알고리즘 (행렬 곱셈, 렌더링, 일반 중첩 데이터 병렬 처리)이 있지만 실행 스레드 간의 통신에는 실제 동시성이 없습니다.

그렇다면 동시성 패러다임의 예제로 사용할 수있을만큼 간단한 대화식, 심지어 분산 환경에서도 실제 동시성이 필요한 몇 가지 흥미로운 문제를 지적 해 줄 수 있습니까? 이상적으로, 나는 동시성 패러다임을위한 (또는 모든 패러다임이 강점과 약점을 가지고 있기 때문에 그들의 차이점을 강조하기위한) "부족 테스트"로 작용할 일련의 문제를 찾고 싶다.

어떤 도움을 많이 감사합니다 :)

답변

3

나는 이전에 일부 동시 프로그래밍 자신 패러다임 이전에 제시 한이 정확한 문제를 고려했습니다 페이지 그때 도달 한 결론은 테스트 세트 아무튼이다

실제로 언어 독립적 인 방식으로 존재하는 것 같습니다. 그것이 존재하는 것이 도움이 될 수 있지만, (내 지식을 최대한 지키지 않는 한) 꽤 좋은 이유가있는 것 같습니다.

동시 프로그래밍 내의 대부분의 초점은 동일한 조작이 동일한 데이터 세트의 다른 부분에 병렬로 적용되도록 데이터 병렬 처리에있는 경향이 있습니다. 내가 말하고있는 것처럼 생각하는 작업 수준의 병렬 처리 (즉, 병렬로 수행되는 여러 작업, 아마도 데이터 공유)의 종류는 실제로 그렇게 많이 수행되지 않습니다. 나는 그것이 다소 힘들 기 때문에 이것이라고 생각한다. 그러나 대부분의 문제가 이런 종류의 동시성에 특히 잘 맞지 않기 때문에 다소 어렵다고 생각합니다. 동시성 프리미티브와 관련하여 분산 시스템을 설명하는 것이 유용 할 수 있지만 이러한 시스템은 의사 소통을 조정하는 프로토콜 (서술되거나 암시 된)이 분리되도록 경향이 있습니다. 사람들은 이러한 유형의 시스템을 올바른 프레임 내에서 보았을지라도 (즉, "클라이언트"와 "서버"를 어떤 점에서는 동기화와 병행하여 작동하는 에이전트로 간주 할지라도) 명백하게 "동시"프로그래밍 상황으로 생각하지 않는 경향이 있습니다. .

영감의 원천을 찾을 수있는 유일한 곳은 개별 구현 내입니다. Erlang, Occam (Occam-pi), Alice, CML, Concurrent Haskell 등은 모두 작은 테스트 코퍼스를 가질 가능성이 있지만 문제와 구현 모두 특정 언어 내에서 구현 가능한쪽으로 편향 될 것입니다 (분명히 해당 언어로 구현 가능!). 아마도 multi-party session types에서 일하는 커뮤니티와 pi-calculus, CCS 및 CSP와 같은 다양한 process calculi을보고 그들이 사용하는 시스템의 종류를 예제 모델로 볼 수도 있습니다. 동시에 시스템을 통신하는 것을 설명하기위한 표준 언어에 의존하지 않는 일련의 문제에 대한 아이디어는 매력적이지만,이 시점에서는 다소 애매합니다.

+0

또한 테스트 문제의 코퍼스를 컴파일하는 데 관심이있는 경우 알려주십시오. 나는 도움이 될지도 모른다. 내 프로필에 링크 된 웹 사이트에서 사용할 수있는 연락처 정보가 있습니다. – Gian