2010-02-01 8 views
9

Me considero un desarrollador bastante decente, sin embargo cuando se trata de multihilo, soy un n00b total. Me refiero a que el único multihilo que he hecho en el trabajo fue lo más básico, como generar múltiples hilos utilizando el ThreadPool para hacer un poco de trabajo de fondo. No fue necesaria la sincronización, y nunca hubo necesidad de crear subprocesos manualmente.Buscando un buen ejercicio para ayudarme a mejorar en Multithreading

Entonces, mi pregunta es esta; Quiero escribir alguna aplicación que necesite ser muy multiproceso y que necesite hacer todas las cosas avanzadas como la sincronización, etc. No puedo pensar en nada para escribir. He pensado en intentar escribir mi propio ThreadPool, pero creo que necesito aprender a caminar antes de poder correr. Entonces, ¿qué ideas puede sugerir alguien? No tiene que tener ningún uso en el mundo real, puede ser totalmente inútil e inútil, pero solo quiero mejorar. He leído toneladas de artículos y tutoriales sobre toda la teoría, pero la única manera de REALMENTE mejorar es hacerlo. Entonces, ¿alguna idea?

+5

Pruebe enhebrar la máquina de coser serger de mi esposa. Eso funciona más hilos que M $ Office 2000 –

+0

ba-dum, tishhhh. – QueueHammer

Respuesta

7
  1. Recursive Quick Sort. Compare el tiempo de ordenamiento en función del número de hilos.
  2. Simulador de dados. ¿Cuántas tiradas de dados puedes hacer por minuto?
  3. rastreador de la página web. Déle una URL y descargue todas las páginas e imágenes secundarias. Observe las páginas que se referencian entre sí para no entrar en un ciclo infinito. Tenga en cuenta que los subprocesos bloquearán la espera de la respuesta de la red, proporcionándole una utilización diferente de la CPU que los subprocesos puramente basados ​​en cálculos. Use una cola para realizar un seguimiento de las páginas no leídas y un diccionario para realizar un seguimiento de los hilos activos. Los hilos que exceden el tiempo vuelven a la cola.
  4. servidor web WCF. Genera un nuevo hilo para cada solicitud. Escriba un cliente WPF multiproceso que actualice la interfaz del usuario en tiempo real.

¿Es eso suficiente?

+1

Escribió el rastreador web uno. ¡Gran idea genial! Fue muy divertido también. Tener que hacer que el hilo de Queue fuera seguro, así como el caché que mantenía un registro de las URL ya marcadas, era solo el ejercicio que necesitaba. ¡Gracias! Voy a probar el servidor web de WCF a continuación. – BFree

3

¿Qué tal un tipo de aplicación de procesamiento por lotes sin sentido? Genere una horrenda cantidad de datos en un único hilo y cárguelo en un archivo, luego comience a dividir el trabajo en hilos de diferentes tamaños y transfiéralos a otro archivo, cítelos y compare los archivos al final para garantizar el orden es el mismo. Esto te llevaría a múltiples subprocesos, bloqueos, exclusiones mutuas y lo que no, y también muestra los beneficios de varias tareas de subprocesamiento frente a procesamiento en un solo subproceso.

Lo primero que me vino a la cabeza. Podría ser aburrido y/o sin sentido, ¡pero no dispares al messenger! :)

+0

Sugerencia interesante. Sin embargo, no estoy seguro de entender por completo lo que quiere decir con "cronometrarlos y comparar los archivos al final para asegurar que el orden sea el mismo" – BFree

+0

Lo siento, me refiero al tiempo empleado en un solo hilo, luego el tiempo empleado en el 2, 3, 4, n hilos, etc. –

3

creo que debe llamar la atención de esta libros:

  1. Windows via C/C++ por Jeffrey Richter. Este es uno de los mejores libros sobre multihilo
  2. Concurrent Programming on Windows de Joe Duffy. Otro libro excelente sobre multithreading

artículos Excelentes por Herb Sutter (hierba, todos a la espera de su nuevo libro!)

Effective Concurrency serie

Algunos blogs:

  1. Herb Sutter's blog.
  2. Parallel programming with .Net
  3. Jeffrey Richter's Blog
  4. Joe Duffy's blog

P. S. ¿Qué hay de Power Threading como ejemplo de multihilo (y la implementación de ThreadPool)?

+0

+1 para jeffrey ritcher; encanta sus libros ... –

+0

Excelente material de lectura, pero realmente quiero escribir un código. He leído lo suficiente ... – BFree

+0

¿Quizás intente implementar un servidor de socket multiproceso? ¿O algunos cálculos simples multiproceso? –

Cuestiones relacionadas