2010-08-05 21 views
6

Estoy trabajando en un pequeño proyecto que implica la creación de un programa de consola destinado a ser ejecutado en segundo plano por un producto más grande.¿Falló rápido o falló?

Se supone que el programa habla con el producto principal (IP21) por un lado y actúa como un servidor, manejando varios clientes, por el otro.

Empecé a trabajar en la arquitectura y se me ocurrió algo basado en un reactor que maneja eventos como conexiones o eventos generados por el producto principal. La parte de manejo del cliente se trata en hilos separados, uno por cliente.

Pero no estoy de acuerdo con un colega mío en esta arquitectura. Él dice que debería poner el reactor y los otros componentes corriendo en el hilo principal, en un hilo separado. El hilo principal debe ser lo más simple posible. Haría eso para que el programa no se bloquee si esta parte lo hace. Él dice que es mejor tener un programa completamente no funcional que un choque violento.

Digo que es mejor fallar rápido. Si esta parte (crítica) del programa falla, no hay razón para intentar mantenerla activa. Además, creo que puede causar problemas al usuario; Se dará cuenta de que algo está mal, pero si mira la lista de tareas (nuestro producto es una especie de administrador de tareas que enumera las tareas que se supone que se están ejecutando y permite rastrear fácilmente las que fallaron) ¡no se dará cuenta de que el programa se ha bloqueado!

espero que nos puede ayudar dando algunos argumentos a un lado o al otro;)

edición: Gracias por sus respuestas, pero lo que no estamos de acuerdo en que es acerca de la utilidad de poner el reactor y unos pocos otros componentes en una hebra separada en caso de problema serio relacionado con la programación (un problema crítico de inserción segfault/deadlock/< aquí >). Creo que sería peligroso e inútil tener el programa en ejecución sin este hilo.

+0

use el patrón Proactor :) http://en.wikipedia.org/wiki/Proactor_pattern – garik

Respuesta

1

Mientras editaba la pregunta encontré this answer en SO que, creo, también responde a esta pregunta.

0

Depende de lo que necesita hacer y de lo crítico que es. Si puede tratar ciertos pasos que fallan mientras otros funcionan, entonces falle esos pasos y continúe. (Piense en algo así como enviar correos; si un mensaje no se envió, no quiere que impida que el resto se complete). Solo falle el proceso completo si la falla de un paso hace que el resto sea imposible de realizar de manera confiable.

3

Uso Proactor patrón :)

prueba de fallos. Pero depende de las tareas (críticas o no) y de la lealtad del usuario. Estabilidad. Perdiste a un usuario o todo.