저는 병렬로 계산을 수행하는 Java 프로그램을 가지고 있습니다. 하나의 컴퓨터에서 실행하거나 여러 대의 다른 컴퓨터를 사용하여 실행할 수 있습니다.배리어와의 프로세스 간 동기화
단일 시스템에서 실행될 때 스레드 동기화는 java.util.concurrent.CyclicBarrier 패키지의 CyclicBarrier 클래스를 사용하여 성공적으로 수행됩니다. 아이디어는 계산을 계속하기 전에 모든 스레드가 다른 스레드가 같은 지점에 도착할 때까지 기다려야한다는 것입니다.
여러 대의 다른 컴퓨터에서 실행될 때 프로세스 간 통신은 RMI (Remote Method Invocation)를 통해 구현됩니다. 이 상황에서 같은 문제가 생겼고 계속 진행하기 전에 다른 프로세스가 같은 지점에 도착할 때까지 프로세스의 스레드가 기다려야합니다. 이 클래스는 직렬화되지 않기 때문에 서로 다른 프로세스간에 공유 된 CyclicBarrier 개체를 사용할 수 없습니다.
여러 컴퓨터에서 서로 다른 프로세스에서 실행되는 스레드에서이 장벽 동작을 얻으려면 어떻게해야합니까?
감사합니다.
이 작업이 덜 복잡해 보이는 환경을 설정할 수 있습니다. 즉, 도착한 파티를 계산하기 위해 분산 된 'AtomicNumber'를 사용하는 [Hazelcast의 샘플 구현] (https://code.google.com/p/hazelcast/issues/detail?id=435)입니다. –
직렬화가 가능하더라도 공유되지 않습니다. 이를 직렬화하면 공유 객체가 아닌 대상에 새로운 사본이 작성됩니다. – EJP