Doubles
의 콜렉션 (간단히하기 위해 목록이라고 함)을 포함하는 데이터 구조에 대해이 순차적 절차를 고려하십시오. 한 나는 느낌처럼 들어 :동시성을 통한 시뮬레이션 성능 향상
- 선택 두 개의 서로 다른 목록을 구조에서 임의
- 에서 그 목록을 기반으로 통계를 계산
- 그 통계를 기반으로 동전을 플립
- 아마도 수정 동전 던지기의 결과에 근거한 목록 중 하나
목표는 결국 무언가에 수렴을 달성하는 것이므로 '해결책'은 반복 횟수가 선형입니다. 이 절차의 구현은 SO 여기 here에 의문을 제기하고에서 볼 수있는 것은 직관적 인 시각화 :
은이 절차를 더 잘 수행 할 수 있다는 것 - 즉, 융합이 빠르게 얻을 수있는 -에 의해 별도의 OS 스레드에서 동시에 실행되는 여러 노동자를 사용, 예 :
나는이의 완벽-실현 구현에 솔루션을 달성 할 수있을 것 같아요 O (N/P) 시간, P은 사용 가능한 컴퓨팅 리소스의 수입니다. 하스켈 동시성에 최대 읽기
는 같은 조건을 내 머리 회전을 떠난 MVar
, TVar
, 분명한 것 같습니다 것은이 절차의 동시 구현이 the one I linked above 매우 다를 것입니다 등 TChan
, acid-state
. 그러나 프로 시저 자체는 근본적으로 인 메모리 데이터베이스에 관한 꽤 길들인 알고리즘 인 것으로 보이는데, 이는 누군가가 전에 우연히 만났던 문제라고 생각합니다.
나는 내가 & 수정 (임의 유휴 요소 즉,) 괜찮은 랜덤 액세스를 지원 변경 가능, 동시 데이터 구조의 어떤 종류를 사용해야 할 것 같은데요. 성능 향상을 위해 필요한 모든 것을 함께 모으려고 할 때 약간의 손실이 발생합니다 (예 : STM이 모호한 것처럼 보임).
목표가 순차적 구현보다 성능이 향상되는 경우 이러한 유형의 작업에 적합한 데이터 구조, 동시성 개념 등은 무엇입니까?
'MVars'보다 덜 고통스러운 'STM'을 사용하여 감았습니다. 일부 코드의 스냅 샷은 http://hpaste.org/69045입니다. 매우 많은 수의 반복을 사용하지 않는다면 순차 구현을 이길 수는 없지만 구현하기가 얼마나 쉬운 지 놀라게되었습니다. – jtobin