Mi programa tiene un hilo de renderizado OpenGL y un hilo de modificación de datos. El subproceso de representación accede a los datos en un conjunto de ArrayLists, mientras que el subproceso de modificación de datos altera, elimina y agrega objetos a los ArrayLists. Los hilos se actualizan aproximadamente 60 veces por segundo, y la manipulación de ArrayList es el cuello de botella del programa. Intenté sincronizar bloques (super lento), CopyOnWriteArrayLists (bastante lento) y crear ArrayLists en el subproceso (menos de tres males). ¿Cuál es la "mejor" forma de obtener la máxima eficacia de ArrayLists concurrentes?Java: ¿Cuál es la forma más eficiente de sincronizar una ArrayList?
Respuesta
El mejor mecanismo es hacer su trabajo en las operaciones de hilo y cola GL que se ejecutarán. Si solo hay un solo subproceso que acceda a la lista, no hay problema.
¿Por qué es mejor migrar la lógica del programa al hilo gl? –
Estás haciendo mucking con el estado GL. Todo el estado mucking-about-with debería hacerse en el hilo GL. Simple como eso. –
Acabo de comenzar a programar GL hace 3 días. Voy a leer sobre los estados GL. Pero incluso cuando el programa era Java Swing, la esencia del problema sigue siendo la misma, ¿no? No intenté que esto fuera una pregunta específica de GL. –
List<YourObject> syncList = Collections.synchronizedList(yourList);
Estoy extremadamente cansado de esta solución. En primer lugar, la colección debe sincronizarse manualmente cuando se usa el iterador, y también puede haber otros problemas. Creo que esto es un problema con la lógica del programa. –
Esto le da una solución general de todo o nada, mientras que la cuestión es tratar de lograr una mayor granularidad de bloqueo – Yoni
-1 Esto no responde la pregunta en absoluto. De hecho, el uso de Collection.synchronized * siempre es la forma más barata e ineficiente, y muchas veces incorrecta, de sincronizar en una colección. Aunque ocasionalmente puede "hacer el trabajo", solo es bueno usarlo cuando el trabajo realmente no importa. –
- 1. Forma correcta de sincronizar ArrayList en java
- 2. Java: ¿Filtrado Eficiente ArrayList?
- 3. ¿Cuál es la forma más eficiente de copiar de forma masiva a SQL Server desde Java?
- 4. ¿Cuál es la forma más eficiente de ordenar un NSSet?
- 5. ¿Cuál es la forma más eficiente de crear ListBuffer vacío?
- 6. La forma más eficiente de ver si un ArrayList contiene un objeto en Java
- 7. La forma más rápida de completar ArrayList
- 8. Inicializando ... ¿cuál es más eficiente?
- 9. ¿Cuál es la expresión regular más eficiente?
- 10. ¿Cuál es la forma más eficiente de almacenar una matriz de enteros en una columna MySQL?
- 11. La forma más eficiente de leer datos de una secuencia
- 12. ¿Cuál es la forma más eficiente de iterar a través de una lista en python?
- 13. ¿Cuál es la forma más eficiente de encontrar una de varias subcadenas en Python?
- 14. ¿Cuál es la forma más eficiente/elegante de eliminar elementos de una matriz en MATLAB?
- 15. ¿Cuál es la forma más eficiente de evitar operaciones duplicadas en una matriz de C#?
- 16. La forma más eficiente de implementar una búsqueda fonética
- 17. ¿Cuál es una forma eficiente de comparar objetos StringBuilder?
- 18. Cuál es la forma más eficiente de hacer operaciones bit a bit en una matriz C
- 19. ¿Cuál es la forma más eficiente de truncar un número para una precisión específica?
- 20. ¿Cuál es la forma más eficiente de ejecutar funciones asíncronas en PHP?
- 21. Mapa/ArrayList: cuál es más rápido para buscar un elemento
- 22. booleano [] vs. BitSet: ¿Cuál es más eficiente?
- 23. ¿Cuál es la forma más eficiente de formatear la siguiente cadena?
- 24. ¿Cuál es una forma eficiente de concatenar listas?
- 25. ¿Cuál es la versión C++ de ArrayList de Java?
- 26. ¿Cuál es una forma eficiente de analizar una cadena en Java?
- 27. ¿Cuál es la forma más eficiente de crear un sistema de bombilla de foro (no leída)?
- 28. ¿Cuál es el estilo de CSS más rápido/más eficiente
- 29. ¿Cuál es la forma más eficiente de hacer tabla de consulta en C#
- 30. ¿Cuál es la forma más eficiente de mover datos de Hive a MongoDB?
Necesita contar más sobre el algoritmo y la topología de la "manada de ArrayLists". – jmg
¿Ha considerado aprovechar 'ConcurrentHashMap' o' ConcurrentSkipListMap/Set'? –
¿ha mirado el paquete java.util.concurrent como una alternativa para sincronizar bloques? – Yoni