2010-11-07 13 views

risposta

11

Java ha il pacchetto java.util.concurrent e c'è anche lo fork/join framework. Forcella/join è scheduled for inclusion in Java 7, ma può essere utilizzato con downloaded now e Java 6.

Un buon libro per sempre alle prese con la concorrenza in Java è Java Concurrency in Practice, da Brian Goetz e altri.

+1

Il framework fork/join ha qualcosa a che fare con la libreria parallela delle attività? – Nemo

+6

Non sono uno sviluppatore .NET, ma da quello che ho letto su TPL (ad esempio, questo: http://msdn.microsoft.com/en-us/library/dd460717.aspx), fork/join sembra hanno molto in comune con TPL. Ad esempio, "Il TPL scala dinamicamente il grado di concorrenza per utilizzare in modo più efficiente tutti i processori disponibili". In confronto, ciò deriva dalla documentazione di fork/join: "I candidati per l'elaborazione fork/join includono principalmente quelli che possono essere espressi usando tecniche parallele divide et impera: ... suddividerlo in due (o più) parti, quindi risolvere quelle parti in parallelo " –

+0

Il capitolo di esempio disponibile tramite il collegamento è davvero bello. Mi ha fatto venire voglia di prendere il libro, ma è stato pubblicato l'ultima volta nel 2006, quindi non sono sicuro di quanto sia aggiornato. – Philippe

3

Habanero-Java library (HJ-lib) è la nuova implementazione di libreria di Habanero-Java (HJ), un modello di programmazione parallela pedagogica in fase di sviluppo a Rice University. HJ-lib è in grado di esprimere molte forme diverse di pattern paralleli tra cui parallelismo dei dati, parallelismo delle condutture, parallelismo dei flussi, parallelismo dei loop e parallelismo divide e conquista.

HJ-lib integra una vasta gamma di costrutti paralleli di programmazione (ad esempio, le attività asincrone, futures, le attività basate sui dati, Forall, barriere, phaser, transazioni, attori) in un unico modello di programmazione che consente combinazioni uniche di questi costrutti (ad esempio, combinazioni annidate di parallelismo tra attività e attore).

HJ-lib è costruito utilizzando lambda expressions e può essere eseguito su qualsiasi JVM Java 8. Le JVM più vecchie possono essere mirate facendo affidamento su strumenti di trasformazione di bytecode esterni per la compatibilità. Il runtime HJ è responsabile dell'orchestrazione della creazione, dell'esecuzione e della terminazione delle attività HJ e include sia gli scheduler per la condivisione del lavoro che quelli per il furto del lavoro.

HJ-lib è anche uno strumento interessante per gli educatori con numerose risorse educative disponibili dal livello del secondo anno COMP 322 course offerto presso la Rice University. Queste risorse possono anche essere utilizzate per conoscere l'API della libreria. Javadoc per l'API è also available.

Ecco una semplice versione HelloWorld:

import static edu.rice.hj.Module1.*; 

public class HelloWorld { 

    public static void main(final String[] args) { 

     launchHabaneroApp(() -> { 

      finish(() -> { 
       async(() -> System.out.println("Hello")); 
       async(() -> System.out.println("World")); 
       async(() -> System.out.println("in")); 
       async(() -> System.out.println("HJ-lib")); 
      }); 

     }); 
    } 
} 

Ulteriori esempi per i vari costrutti paralleli sono disponibili presso il COMP 322 course website.

Problemi correlati