2011-12-09 13 views
9

Sto eseguendo un programma di assemblaggio del genoma * Trinity, http://trinityrnaseq.sourceforge.net/, se interessato) su una delle risorse XSEDE. L'hardware limita il numero di thread a 2500, che il programma vuole sempre superare ... C'è un modo semplice per limitare il numero di thread eseguiti? Ho provato -XX:ParallelGCThreads=16, ma questo sembra introdurre nuovi errori.In fase di runtime, come limitare il numero di thread java

Quindi, esiste un comando runtime per limitare il numero totale di thread ??

+4

Il problema è che, anche se si potesse dire alla JVM di limitare il numero di thread, la logica dell'applicazione Trinity tenterebbe comunque di ottenere più thread e quindi fallirebbe (o bloccherebbe) in fase di esecuzione. Sembra che tu voglia veramente aggiustare la base di codice Trinity per usare una strategia di creazione di thread/thread diversa, e ciò richiederebbe la loro fonte e la sua modifica. –

+0

Ho sfogliato i documenti Trinity e ho visto un'opzione --CPU. Hai provato? – user949300

+0

Ho sfogliato i documenti Trinity e ho visto un'opzione --CPU. Hai provato? – user949300

risposta

0

È possibile utilizzare una coda personalizzata che viene eseguita come processo separato che gestisce la limitazione del numero di thread. Il vantaggio di questo è che puoi scegliere di limitare i thread o continuare ad aggiungere il numero di thread. Probabilmente avrai una classe addToQueue(Thread t) e successivamente un consumatore che consuma tutti questi thread. La coda saprà quanti thread sono in esecuzione attivamente. Il processo daemon attiverà il metodo consume() di questa coda a piacere se i thread sono all'interno dell'intervallo. E al termine di ogni thread o compelte il lavoro, riporta alla coda. La coda che mantieni può essere una coda di priorità se ritieni che ci dovrebbe essere una priorità nelle attività in esecuzione. Ciò non solo rimuove la dipendenza dalla JVM, ma rende anche il tuo programma più pulito.

2

Utilizzare un Executor o ExecutorService. Fa quello che bragboy suggerisce ma è integrato in Java.

Problemi correlati