Actualmente soy un desarrollador de C # con una comprensión bastante inestable de los subprocesos.
Ambos enlaces se han sugerido en otras publicaciones:
http://www.yoda.arachsys.com/csharp/threads/
http://www.albahari.com/threading/
¿Debo volver a lo básico y tal vez mirar algunos textos de informática sobre el tema?
Realmente siento que si salto y uso las bibliotecas de C #, realmente no tendré una base sólida de conocimiento sobre la cual construir. Creo que necesito aprender este tema desde cero como un estudiante de ciencias, luego usar las bibliotecas C #.
¿Alguien puede sugerir un enfoque para el aprendizaje de subprocesos, tal vez algunos enlaces o ideas de proyectos?
¡Gracias por adelantado!
Editar, gracias por todas las respuestas. Algunas personas han mencionado que un libro puede ser una buena idea, ¿alguien puede sugerir uno? Prefiero algo agnóstico del lenguaje. ¿Alguien sabe en qué clase se cubrirían estas cosas en un título en Informática? Estoy tratando de buscar en Google algunas notas y tareas gratuitas en línea.
Respuestas:
Escriba un servidor web multiproceso. Aprenderás una TONELADA . Y no solo sobre enhebrar.
fuente
El problema del productor-consumidor es un ejemplo clásico, y le ayuda a comprender no solo los subprocesos, sino también la programación del procesador (se puede demostrar usando fork () para procesos secundarios en lugar de subprocesos) y cómo sus programas interactúan con el sistema operativo detrás las escenas.
Aquí hay un resumen de las cosas importantes que debe comprender con respecto al enhebrado / bifurcación 1. Cómo el sistema operativo programa las tareas (algoritmo round robin, por ejemplo) 2. Bloqueo de recursos (Si varios subprocesos están utilizando el mismo recurso, no desea que lo hagan) estar accediendo a ellos al mismo tiempo - MALAS COSAS SUCEDEN)
Aquí hay un artículo wiki sobre este problema clásico: http://en.wikipedia.org/wiki/Producer-consumer_problem
Básicamente, cree un "Productor" que genere hilos de "Consumidores". El productor produce un "recurso" y los consumidores lo consumen. Ponlo en un bucle y mira lo que sucede (te sorprenderá que eventualmente los consumidores consuman más recursos de los que están disponibles debido a métodos no sincronizados).
fuente
Elija uno de los problemas clásicos altamente paralelos. Puede que le resulte más interesante elegir uno con aceleración superlineal.
Considere buscar en una lista sin clasificar y sin indexar. Este problema es trivialmente paralelo. Primero implemente una búsqueda de un solo hilo, luego una ingenua búsqueda paralela. Implementar el robo de trabajo. Genere algunos conjuntos de datos aleatorios y ejecute las tres versiones en los mismos conjuntos de datos. Calcule la aceleración.
fuente
No creo que un libro de texto sea el siguiente mejor paso. Un proyecto es el camino a seguir. Debería ser algo que te entusiasme.
La primera vez que hice subprocesos estaba mejorando el rendimiento de un rastreador web. Puede rastrear mucho más rápido si no está haciendo todas sus IO de red en serie. Para empezar, este es un gran proyecto porque puedes abordarlo de varias maneras, pero no es tan complicado como, por ejemplo, la programación GUI multiproceso. Tampoco requiere mucha habilidad especializada (por ejemplo, material informático pesado).
Por lo tanto, descubra información para raspar y comenzar a hackear. No debería llevarte mucho tiempo poner en marcha algo, será una introducción amable.
fuente
Modele una aplicación simple Spy vs. Spy.
Cada espía se ejecuta en un hilo separado.
Cada espía puede infligir daño al otro espía, pero no directamente.
Cada espía puede robar recursos valiosos del otro espía, pero no directamente.
Ambos espías tienen un grupo limitado de recursos a su disposición y deben compartirlos. Solo un espía puede usar cualquier recurso dado a la vez.
fuente
Fuera de mi cabeza: la cuarta edición del libro de Bruce Eckel "Pensar en Java" tiene un capítulo muy largo sobre el enhebrado (> 100 páginas, casi un pequeño libro en sí mismo). He leído ediciones anteriores del libro, por lo que no leí este capítulo; pero recuerdo una de sus publicaciones en el blog (o las notas de lanzamiento de su libro), donde afirma que escribir esto fue muy difícil y al final fue un verdadero logro para él. Echale un vistazo...
Además de esto, hay un video curso de 2.5 horas en este sitio de capacitación comercial, pero puede obtener una prueba gratuita (debe dejar los datos de la tarjeta de crédito; así que no olvide darse de baja)
http://www.pluralsight-training.net/microsoft/olt/Course/Toc.aspx?n=clr-threading
fuente
Esa es siempre una buena opción y le recomendaría que tome un buen libro de hilos para familiarizarse con los hilos. Aprendí multihilo en Java y el conocimiento se tradujo fácilmente en C #.
Si desea un ejemplo práctico, le recomendaría que pruebe el problema del filósofo gastronómico .
Necesitas aprender varias cosas cuando te estás metiendo en multihilo:
No puedo pensar en otras cosas en este momento. ¡El tutorial de Albahari se ve muy bien!
fuente