Domanda

C'è qualche biblioteca come Intel TBB in Java che supportano parallelismo.

È stato utile?

Soluzione

Forse si potrebbe chiarire che cosa esattamente si sta cercando

  

Intel® Threading Building Blocks (Intel TBB) offre un approccio ricco e completo per esprimere il parallelismo in un programma C ++. Si tratta di una libreria che consente di approfittare di prestazioni multi-core senza dover essere un esperto di threading. Intel TBB non è solo una libreria thread-sostituzione. Rappresenta un livello superiore, parallelismo task-based che astrae i dettagli della piattaforma e meccanismi per filettare scalabilità e prestazioni.

Questo è quello che le librerie di concorrenza hanno fatto dal 1998 e sono stati fatti parte di Java 5.0 nel 2004.

EDIT: dire che si desidera un pool di thread in grado di utilizzare tutti i processori logici sul sistema

.
ExecutorService es = Executors.newFixedThreadPool(
      Runtime.getRuntime().availableProcessors);

// to add a number of tasks
for(int i=0; i<numberOfTasks; i++) {
   es.submit(new Callable<ResultType>() {
      public ResultType call() {
          return doWork(i);
      }
   }
}

Questa esegue volontà DoWork su ogni filetto libero.

Guardando le sue caratteristiche hanno un aspetto molto familiare.

Ho dato un'occhiata ad alcune delle ottimizzazioni di basso livello come l'allocazione della memoria filo consapevoli. In Java questo è chiamato TLAB (filettatura buffer allocazione locale) ed è trasparente. Ho il sospetto che la maggior parte degli sviluppatori Java non sanno nemmeno che esistono.

I risultati e le eccezioni vengono catturati per voi in un oggetto futuro che è possibile controllare in seguito.

È possibile avere "variabili di condizione" come CountdownLatch o CyclicBarrier

  

Un nuovo contenitore che mima C ++ 0x unordered_map e sulla base di una specifica congiunta attuata sia da Intel (TBB 3.0) e Microsoft (Visual Studio 2010). Ha tre vantaggi rispetto alla precedente concurrent_hash_map:

  • Un'interfaccia che assomiglia da vicino la ++ 0x unordered_map
  • C
  • Permette inserimento e attraversamento simultaneo.
  • Nessun blocco è esposto dall'interfaccia. L'attuazione può utilizzare i blocchi internamente, ma il blocco non è mai esposto in un modo che può contribuire a un punto morto. Si può tenere chiuse internamente, ma mai durante la chiamata codice definito dall'utente.

ConcurrentHashMap di Java supporta le interfacce ConcurrentMap e Mappa, permette l'inserimento e l'attraversamento concorrente e non espone alcun blocco. ;.) E 'di almeno 9 anni in modo da sapere che dovrebbe essere robusto e stabile

C'è un CodaConPriorita che si può usare in voi infilare piscina, se lo si desidera.

Altri suggerimenti

v'è un libro buono per questo tema:

Java Concurrency in Practice

Java Concurrency in Practice

E 'disponibile nel java.util.concurrent pacchetto , dal momento che Java5.

Questa edizione include una profonda revisione del modello di memoria di Java, per solidificare la base della programmazione concorrente e risolvere i problemi noti. In Java, la concorrenza è stato progettato nella lingua fin dall'inizio, non semplicemente aggiunto in seguito in una libreria.

Date un'occhiata a Akka che fornisce un quadro di concorrenza utilizzando Attori e software di memoria transazionale. Naturalmente, questo blocca solo fornisce costruzione, è ancora necessario essere in grado di scrivere del codice concorrente, ma diventa un po 'più facile.

Scopri il pacchetto java.util.concurrent. Ha un insieme di classi che sono utili per la programmazione parallela.

A proposito, si dovrebbe considerare di accettare alcune risposte. 15 domande con risposte accettati scoraggia la gente da rispondere alle vostre domande.

Alcuni di voi stanno chiedendo circa la differenza tra concorrenza e parallelismo. Concurency significa diversi programmi che simulano in esecuzione allo stesso tempo e lo scheduler decide chi è l'uno è in esecuzione. Parallelismo intende un programma diviso in compiti e quelli compito esecuzione allo stesso tempo in diversi nuclei per risolvere un problema. Quando questa attività comptete per le risorse con altri programmi (abbiamo più attività di core disponibili) allora abbiamo la concorrenza e il parallelismo al tempo stesso. Le condizioni di gara avoing è la parte meno difficile di parallelismo, il grosso problema è quello di trovare un buon modo per decomporre un compito correttamente per ottenere buoni risultati. Molto fine disintegrazione grana ha svantaggi (spese generali), ma il parallelismo a grana grossa (monotasking) presenta svantaggi troppo (non si utilizza tutta la potenza di elaborazione disponibile sul computer). Devi trovare il medio termine, esso implica facendo alcuni problemi di ottimizzazione (matematica)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top