2010-12-14 9 views
5

¿Hay alguna guía para probar código de subprocesos múltiples (que no sea arrojar un montón de hilos al problema y cruzar los dedos).Directrices para probar el código multiproceso o asegurarse de que el código sea seguro para subprocesos

Básicamente, estoy buscando buenas formas de probar la corrupción de datos, interbloqueos y otros problemas de concurrencia. Básicamente, quiero poder demostrar que el código es seguro para subprocesos a través de una prueba.

¿Hay marcos en Java que le permitan escribir fácilmente pruebas para un escenario multiproceso?

+4

¿Qué hay de hacer revisiones de códigos? Muchos errores comunes son relativamente fáciles de detectar una vez que asume que están ahí. –

+0

Se trata de herramientas de prueba, no de directrices, pero tal vez lo ayude: http://stackoverflow.com/questions/3256064/how-to-write-multi-thunded-unit-tests – Todd

+0

Puede que quiera consultar los siguientes documentos relacionados. pregunta: http://stackoverflow.com/questions/1634378/is-there-a-tool-for-java-similar-to-microsofts-chess – Guy

Respuesta

3

He escrito una gran cantidad de código de subprocesos múltiples y nunca he encontrado nada que pueda comprobar fácilmente los problemas de corrección de concurrencia que no predije. La mayoría de las veces tengo que pensar sobre el escenario en el que puede romperse y cómo podría demostrar su corrección en una versión extrema de esto (a menudo usando CountDownLatches o similar para doblarlo de la manera en que creo que se puede romper.

Utilice definitivamente FindBugs y herramientas de análisis estático similares para ayudar a encontrar problemas potenciales, y definitivamente mantenga sus problemas de simultaneidad lo más simples posible. Los problemas de memoria mutable compartida son difíciles, pero en realidad es bastante fácil redefinir el problema para que no se pueda compartir estado, solo estado inmutable. Eso hace la vida mucho más simple. Ah, y lea JCiP - luego léelo de nuevo. Y obtenga su código revisado.

Cuestiones relacionadas