4

Java에서 불변의 데이터 구조를 사용하여 프로그램을 작성한다고 가정 해보십시오. 함수형 언어는 아니지만 병렬 적으로 실행할 수 있어야합니다. 프로그램이 내 프로세서의 모든 코어를 사용하여 실행되고 있는지 어떻게 확인할 수 있습니까? 컴퓨터가 병렬 적으로 실행할 수있는 코드를 어떻게 결정합니까?기능이없는 언어로 기능 프로그램 작성

P. 이 질문을하는 내 의도는 자바 프로그램을 병렬화하는 방법을 찾는 것이 아니 었습니다. 그러나 알아 두어야 할 것은 컴퓨터가 코드를 어떻게 병렬화 하는가하는 것입니다. 비 기능적 언어로 작성된 기능적 프로그램에서이 작업을 수행 할 수 있습니까?

답변

3

JVM이 프로그램을 병렬 처리하도록 강제 할 수는 없지만 각 "작업"을 실행하는 별도의 스레드가있는 경우, 프로그램을 이렇게 분해 할 수 있다면 대부분의 경우 트릭을 수행 할 수 있습니까? 그러나 병렬 처리는 여전히 보장되지 않습니다.

8

Java 프로그램은 스레드를 통해 병렬 처리됩니다. 컴퓨터는 Java와 같이 명령형으로 모든 코어에 응용 프로그램 조각을 배포하는 방법을 마술처럼 생각할 수 없습니다. Erlang이나 Haskell과 같은 기능 언어 만이 그렇게 할 수 있습니다. Java 스레드에서 읽기.

+2

:-) 다른 문제이다. –

+0

당신 말이 맞아, 나는 왜 거기에 넣을지 모르겠다. –

+1

Erlang이나 Haskell에서 immutable 구조를 사용하는 프로그램은 마술처럼 병렬 처리되지 않는다. 병렬화 도구는 사용하기가 훨씬 쉬우나 명시 적으로 사용해야합니다. –

5

나는 automatic parallelization JVM을 알지 못합니다. 이들은 FORTRAN과 같은 다른 언어에도 존재합니다.

JSR166y fork-join framework이 흥미로운 JDK7로 예정되어 있습니다.

+0

자동 병렬 연결 링크가 유용했습니다. 감사합니다! – Pranav

1

자동 병렬 처리 작업을 사용하여 함수를 작성할 수 있지만 특정 경우에는 매우 쉽게 수행 할 수 있습니다. 그러나이 작업을 수행하는 기본 제공 Java API는 알지 못합니다. (아마도 집행자/ExecutorService 제외)

0

나는 학교에서 당신을 위해 일하는 것을 많이 사용했습니다.

http://www.cs.rit.edu/~ark/pj.shtml

그것은 SMP 또는 메시지 기반 병렬 처리를 할 수있는 기능이 있습니다. 그것은 당신에게 유용 여부

은이 (가) "순수 기능"언어의 보존해야하는 이유가 표시되지 않습니다

관련 문제