2011-08-23 2 views
11

스칼라는 Java에 비해 많은 기능과 개선점을 갖고있는 것으로 보입니다. 나는 스칼라에 대해 먼저 배우고 싶은 것들을 분리하는데 어려움을 겪고있다. 예를 들어 루프를 사용하여 여러 스레드 또는 프로세스에서 실행되도록하려는 경우 Google에서 무엇을 찾아야합니까? 나는 GPU 컴퓨팅 환경에서 일을보다 빠르게 수행하는 방법에 대한 높은 수준의 관점을 얻는 것이 정말 쉽다.멀티 스레딩에 초점을 맞춘 스칼라 튜토리얼을 찾으려는 시도

답변

21
  • 스칼라의 병렬 컬렉션 특히 쉽습니다. 정수 i <- 1 to 10에 비해 비용이 많이 드는 작업 f(i)를 병렬화하는만큼 간단

    (1 to 10).par.map(i => f(i)) 
    

    스칼라 시스템에서 사용할 수있는 코어/프로세서의 수에 필적 작업 스레드의 수를 할당하려고합니다. 다음은 자세한 내용이 담긴 비디오입니다. http://days2010.scala-lang.org/node/138/140

    Akka framework은 스레드 또는 원격 프로세스를 통한 병렬 처리를 허용하는 성숙한 주로 액터 기반의 동시성 방식입니다. 액터는 기본적으로 공유 상태가 아닌 메시지를 전달할 수있는 스레드입니다. 새로 형성된 회사 Typesafe은 스칼라 언어와 Akka를 개발하고 있습니다.

  • Scala 용 소프트웨어 트랜잭션 메모리 (STM) 라이브러리 draft release을 사용해 볼 수도 있습니다. 라이브러리는 표준 스칼라 배포판에 포함될 것을 목표로하고 있습니다. 수동으로 관리되는 스레드와 비교할 때 STM은 데드 록과 같은 오류의 가능성을 줄이는 더 단순한 동시성 모델입니다. 통신 작업 시퀀스를 단일 동기화 블록으로 그룹화하여 작동합니다. 여러 스레드가 상호 호환되지 않는 것으로 판명 된 공유 상태로 무언가를 수행하면 오류가 발생하고 롤백 될 수 있습니다. 아마도 편의를 위해 지불 할 성능 비용이 있습니다. STM이 많은 수의 스레드로 확장되는 지 잘 모르겠습니다.

  • Spark framework은 클러스터 컴퓨팅을 다루며 MapReduce의 일반화 인 것으로 보입니다.

  • 스칼라의 GPU 프로그래밍의 경우 ScalaCL이 있습니다. Java bindings을 사용할 수도 있습니다.

  • Stanford와 EPFL의 실험실 간의 공동 작업으로 진행되는 매우 흥미로운 언어 가상화 작업도 있습니다. This page에는 논문에 대한 링크가 있으며 더 많은 링크가있는 course at Stanford이 있습니다. GPU를 포함하여 이기종 컴퓨팅 환경에서 고성능 컴퓨팅을위한 DSL을 개발하는 데는 몇 가지 흥미로운 애플리케이션이 있습니다.

업데이트. Daniel Sobral은 또한 Tools and Libraries wiki을 제안했습니다.

+0

STM에 감사드립니다. 그 사실을 알지 못했습니다. 유망 해 보인다. –

+0

이 답변은 정말로 FTW입니다. 당신은 라이브러리와 도구 위키에 대한 링크를 붙여 넣었을 것입니다 ... –

+0

@Daniel, updated, thanks. –

관련 문제