Haskell 멀티 스레딩은 얼마나 어렵습니까?
Haskell에서 다중 스레드 응용 프로그램을 만드는 것은 표준 Haskell 응용 프로그램을 가져 와서 -threaded
플래그로 컴파일하는 것만 큼 쉽다고 들었습니다 . 그러나 다른 경우 par
에는 실제 소스 코드 내에서 명령 사용을 설명했습니다 .
Haskell 멀티 스레딩 상태는 어떻습니까? 프로그램 소개가 얼마나 쉬운가요? 이러한 다양한 명령과 그 용도를 다루는 좋은 멀티 스레딩 자습서가 있습니까?
Haskell 멀티 스레딩 상태는 어떻습니까?
성숙한. 구현은 약 15 년 전이며 트랜잭션 메모리는 5 년입니다. GHC는 널리 사용되는 컴파일러이며 대규모 오픈 소스 지원 및 상용 지원을 제공합니다.
프로그램 소개가 얼마나 쉬운가요?
이것은 알고리즘에 따라 다릅니다. 때로는 par
병렬 처리를 얻기 위해 한 줄로 사용할 수 있습니다 . 때때로 새로운 알고리즘을 개발해야합니다. 일반적으로 일반적인 언어보다 Haskell에서 안전한 병렬성과 동시성을 도입하는 것이 더 쉬울 것이며 성능도 좋습니다.
이러한 다양한 명령과 그 용도를 다루는 좋은 멀티 스레딩 자습서가 있습니까?
Haskell에는 3 가지 주요 병렬 및 동시 프로그래밍 모델이 있습니다.
- 암시 적 병렬 처리
par
- forkIO / MVar 및 소프트웨어 트랜잭션 메모리를 통한 명시 적 동시성 및 병렬 처리
- DPH 라이브러리를 통한 데이터 병렬 처리
이것이 주요한 것입니다. 모든 경우에 멀티 코어 런타임을 사용하기 위해 -threaded로 컴파일하지만 특정 문제를 병렬화하는 것이 얼마나 쉬운지는 사용하는 알고리즘과 해당 목록에서 채택한 병렬 프로그래밍 모델에 따라 다릅니다.
다음은 Haskell의 주요 병렬 프로그래밍 모델에 대한 소개 와 속도 향상 방법입니다.
Real World Haskell의 24 장은 좋은 튜토리얼 이라고 생각 합니다.
동시성 용어도 있습니다.
코드의 변경없이 하스켈 RTS는 일부 내부 프로세스를 사용하려고하지만 응용 프로그램에서 사용하는 당신은에 의해 이루어집니다 힌트를 제공한다 par b (f a b)
힘 하스켈의 caculation에 너무 게으른되지 않게되는 b
경우에도 f
그것을 필요로하지 않습니다를 결과.
모든 인수 (예 :)를 필요로하는 모든 함수에 대해이를 수행하지 않는 이유 중 하나는 a+b
동기화 (계산 예약 및 결과 대기)가 약간의 오버 헤드를 제공 (2*3)+(3*4)
하기 때문에 추가 틱을 사용하고 싶지 않기 때문입니다. 병렬로 곱셈을 계산할 수 있습니다. 그리고 아마도 캐시 적중이나 이와 비슷한 것 또는 단일 프로세서에서 수행 할 때 수행되는 최적화를 잃게 될 것입니다 (즉, 어쨌든 한 프로세서에서 다른 프로세서로 결과를 전달해야합니다).
물론 사용되는 코드 par
는 추악하며 가벼운 하위 요소로 목록이나 다른 데이터 구조를 접을 때 오버 헤드 / 계산이 정말 작은 지 확인하기 위해 해당 가벼운 요소의 일부 청크를 계산하고 싶을 것입니다. 이를 해결하려면 병렬로 볼 수 있습니다 .
DPH (Data Parallel Haskell)도 있습니다.
프로그램이 IO 모나드에 관한 것보다 많은 변경이 필요한 경우. forkIO
, 소프트웨어 트랜잭션 메모리 (STM) 및 동시성 범주의 기타 여러 항목을 참조하십시오 .
참고 URL : https://stackoverflow.com/questions/3011668/how-difficult-is-haskell-multi-threading
'IT Share you' 카테고리의 다른 글
Intellij 2017.2 / out 디렉토리로 빌드하면 / build 디렉토리의 파일이 중복됩니다. (0) | 2020.12.01 |
---|---|
jQuery 표준 및 모범 사례 (0) | 2020.12.01 |
printfs로 Haskell을 "디버그"하는 방법? (0) | 2020.12.01 |
서로 다른 데이터베이스 간의 MySQL InnoDB 외래 키 (0) | 2020.12.01 |
git rm --cached 파일 대 git 재설정 파일 (0) | 2020.12.01 |