2009-08-27 20 views
16

Me considero consciente de los conceptos de subprocesamiento y por qué cierto código es o no "seguro para subprocesos", pero como alguien que trabaja principalmente con ASP.NET, el subproceso y la seguridad de subprocesos es algo en lo que casi nunca pienso. Sin embargo, parezco encontrar numerosos comentarios y respuestas (no necesariamente para ASP.NET) en Stack Overflow con el efecto de "advertencia - ¡eso no es seguro para subprocesos!, "y me hace adivinar si he escrito un código similar que en realidad podría causar un problema en mis aplicaciones. [Shock, horror, etc.] Así que estoy obligado a preguntar: desarrolladores¿Realmente los desarrolladores de ASP.NET deben preocuparse por la seguridad de los hilos?

Do ASP.NET realmente tienen que preocuparse por la seguridad de rosca?

Mi opinión: Si bien una aplicación web es inherentemente multi-hilo, cada solicitud en particular viene adentro en un solo hilo, y todos no estáticos tipos que crear, modificar o destruir son exclusivos que solo hilo/solicitud. Si la solicitud crea una instancia de un objeto DAL que crea una instancia de un objeto comercial y I want to lazy-initialize a collection within this object, , no importa si no es seguro para subprocesos, ya que nunca será tocado por otro subproceso. ...¿Derecha? (Supongamos que no estoy iniciando un nuevo hilo para iniciar un proceso asíncrono de larga ejecución durante la solicitud. Estoy consciente de que eso lo cambia todo)

Por supuesto, las clases estáticas, los métodos y las variables son solo opuesto. Se comparten por cada solicitud, y el desarrollador debe tener mucho cuidado de no tener un código "inseguro" que cuando se ejecuta por un usuario, puede tener un efecto involuntario en todos los demás.

Pero eso es todo, y por lo tanto la seguridad de las cadenas en ASP.NET se reduce principalmente a esto: tenga cuidado de cómo diseña y usa estadísticas. Aparte de eso, no necesitas preocuparte demasiado por eso.

¿Me equivoco acerca de esto? ¿Estás en desacuerdo? ¡Iluminame!

Respuesta

8

Hay ciertos objetos además de los elementos estáticos que se comparten en todas las solicitudes a una aplicación.Tenga cuidado al colocar elementos en el caché de la aplicación que no sean seguros para subprocesos, por ejemplo. Además, nada le impide generar sus propios hilos para el procesamiento en segundo plano mientras maneja una solicitud.

+1

No olvide los valores de la sesión. :) – Randolpho

+0

¿En qué punto se accederá a los valores de la sesión por más de un hilo? –

3

Creo que cubriste todo muy bien. Estoy de acuerdo contigo. Al estar enfocado en ASP.NET solo en raras ocasiones (si es que lo hace) se trata de problemas de subprocesos múltiples.

Sin embargo, la situación cambia cuando se trata de optimizaciones. Cada vez que inicie una consulta de larga duración, a menudo querrá dejar que se ejecute en un hilo separado para que la carga de la página no se detenga hasta que el servidor informe el tiempo de espera de la conexión. Es posible que desee que esta página compruebe periódicamente el estado de finalización para notificar al usuario. Aquí donde se trata de problemas de múltiples hilos.

4

Existen diferentes niveles de desarrolladores de ASP.NET. Podrías hacer una carrera perfecta como desarrollador ASP.NET sin saber nada de hilos, mutexes, bloqueos, semáforos e incluso patrones de diseño porque un alto porcentaje de las aplicaciones ASP.NET son básicamente aplicaciones CRUD con poca o ninguna lógica comercial adicional.

Sin embargo, la mayoría de los grandes desarrolladores de ASP.NET con los que me he encontrado no son solo desarrolladores de ASP.NET, sus habilidades abarcan toda la gama, así que saben todo sobre el enhebrado y otras cosas buenas porque no se limitan a ASP. .RED.

Así que no, en su mayoría, los desarrolladores de ASP.NET no necesitan saber acerca de la seguridad de los hilos. ¿Pero qué divertido es saber solo lo mínimo?

+1

Me gusta que lo haya señalado, estoy de acuerdo, y no quise sugerir que el desarrollador como persona no deba aprender los matices de enhebrar. Es solo que sigo corriendo por "¡no a prueba de hilos!" mensajes de advertencia con tanta frecuencia, es un poco molesto cuando puede no ser realmente una preocupación para la mayoría de las aplicaciones ASP.NET. –

3

Solo si crea, dentro de la secuencia de procesamiento para una sola HTTPRequest, varios hilos propios ... Por ejemplo, si la página web mostrará cotizaciones de acciones para un conjunto de acciones, y usted hace llamadas separadas a un servicio de cotización de acciones, en subprocesos independientes, para recuperar las comillas, antes de generar la página para enviar de vuelta al cliente ... Entonces debería asegurarse de que el código que está ejecutando en sus hilos es seguro para subprocesos.

Cuestiones relacionadas