Il mio programma ha un thread di rendering openGL e un thread di modifica dati. Il thread di rendering accede ai dati in un branco di ArrayList, mentre il thread di modifica dei dati altera, rimuove e aggiunge oggetti agli ArrayList. I thread si aggiornano circa 60 volte al secondo e la manipolazione di ArrayList è il collo di bottiglia del programma. Ho provato i blocchi di sincronizzazione (super slow), CopyOnWriteArrayLists (abbastanza lento) e la creazione di buffer ArrayList nel thread di rendering (minore di tre mali). Qual è il modo "migliore" per ottenere la massima efficienza dalle ArrayList concorrenti?Java: qual è il modo più efficiente per sincronizzare un ArrayList?
risposta
Il meccanismo migliore è eseguire il lavoro nelle operazioni di thread GL e di coda da eseguire. Se c'è sempre un solo thread che accede all'elenco, non ci sono problemi.
Perché è meglio migrare la logica del programma nel gl thread? –
Stai scherzando con lo stato GL. Tutto lo stato del mucking-about-with dovrebbe essere fatto nel thread GL. Semplice come quella. –
Ho appena iniziato a programmare GL circa 3 giorni fa. Leggerò su GL states. Ma anche quando il programma era Java Swing, l'essenza del problema rimane la stessa, no? Non intendevo che questa fosse una domanda specifica per GL. –
List<YourObject> syncList = Collections.synchronizedList(yourList);
Sono molto stanco di questa soluzione. Prima di tutto, la raccolta deve essere sincronizzata manualmente quando viene utilizzato l'iteratore e potrebbero esserci anche altri problemi. Penso che questo sia un problema con la logica del programma. –
Questa soluzione offre una soluzione tutto-o-niente, dove la domanda riguarda il tentativo di ottenere una granularità più elevata del blocco. – Yoni
-1 Questo non risponde affatto alla domanda. Infatti, l'uso di Collection.synchronized * è sempre il modo più economico e inefficiente e spesso non corretto per sincronizzarsi su una raccolta. Sebbene possa occasionalmente "portare a termine il lavoro", è utile solo quando il lavoro non ha molta importanza. –
- 1. Qual è il modo più efficiente per ordinare un NSSet?
- 2. Qual è il modo più efficiente per filtrare un DataFrame
- 3. Java: filtro ArrayList efficiente?
- 4. Qual è il modo più efficiente per eseguire questo codice?
- 5. Qual è il modo più efficiente per creare ListBuffer vuoto?
- 6. Qual è il modo più efficiente per eseguire il bulk-copy su SQL Server da Java?
- 7. Il modo più breve per compilare ArrayList
- 8. Java: thread consumer consumer qual è il modo più efficiente per attendere la produzione dei dati
- 9. Il modo migliore per riorganizzare un ArrayList in Java
- 10. Qual è il protocollo più efficiente per il multicast affidabile?
- 11. Qual è il modo più semplice per mantenere oggetti java?
- 12. Il modo più efficace per vedere se un ArrayList contiene un oggetto in Java
- 13. Il modo migliore per incrementare l'intero in arrayList in Java
- 14. Qual è il modo più efficiente per eseguire le funzioni asincrone in PHP?
- 15. Qual è il modo più efficiente/più veloce per scorrere le righe in VBA (excel)?
- 16. Qual è il modo più efficiente per cercare un elenco milioni di volte?
- 17. Qual è il modo più efficiente per estrarre una data da un timestamp in PostgreSQL?
- 18. Qual è il modo più efficiente per svuotare un oggetto normale in javascript?
- 19. Qual è il modo più efficiente per chiamare un metodo ogni 20 secondi
- 20. Qual è il modo più efficiente per accedere al valore di un controllo?
- 21. Qual è il modo più efficiente per creare un dizionario di due colonne Dataframe di pandas?
- 22. Qual è il modo più efficiente per evitare operazioni duplicate in un array C#?
- 23. Qual è il modo più efficiente per memorizzare coppie nome/valore in un database Marklogic
- 24. Qual è il modo più efficiente per creare thread aggiuntivi da un thread?
- 25. MongoDB: qual è il modo più efficiente per interrogare un singolo documento casuale?
- 26. Il modo più efficiente per analizzare Xml
- 27. Il modo più efficiente per ripetere un vettore in Matlab
- 28. Il modo più efficiente per creare miniature?
- 29. Il modo più veloce ed efficiente per creare XML
- 30. Qual è il modo più efficiente per caricare il file JPG memorizzato in ImageView?
È necessario aggiungere ulteriori informazioni sull'algoritmo e sulla topologia del "gruppo di elenchi di array". – jmg
Avete preso in considerazione l'uso di 'ConcurrentHashMap' o' ConcurrentSkipListMap/Set'? –
hai guardato il pacchetto java.util.concurrent come alternativa ai blocchi di sincronizzazione? – Yoni