9
votes

À la recherche d'un bon exercice pour m'aider à aller mieux à Multhreading

Je pense à moi-même comme un développeur assez décent, cependant, quand il s'agit de multithreading, je suis un N00b total. Je veux dire que la seule multithreading que j'ai faite au travail était la chose très basique, comme le frai de plusieurs threads à l'aide de la threadpool pour effectuer des travaux d'arrière-plan. Aucune synchronisation n'était nécessaire et il n'y avait jamais besoin de créer des discussions manuellement.

Alors, ma question est celle-ci; Je tiens à écrire une demande qui devra être fortement multithreadée et qui devra faire toutes les choses avancées telles que la synchronisation, etc. Je ne peux pas penser à rien à écrire. J'ai pensé à essayer d'essayer d'écrire ma propre épove threadpool, mais je pense avoir besoin d'apprendre à marcher avant de pouvoir courir. Alors, quelles idées peuvent-elles suggérer? Il ne doit pas nécessairement avoir d'usine de monde réel, il peut être totalement inutile et sans valeur, mais je veux juste aller mieux. J'ai lu des tonnes d'articles et de didacticiels sur toute la théorie, mais le seul moyen de vraiment aller mieux est de faire. Donc, toutes les idées?


1 commentaires

Essayez de fileter la machine à coudre Serger de ma femme. Cette chose gère plus de threads que M $ Office 2000


3 Réponses :


3
votes

Que diriez-vous d'une sorte d'application de traitement par lots inutile? Générez une quantité horrible de données dans un seul thread et déposez-le à un fichier, puis commencez à scinder l'œuvre dans des threads de différentes tailles et de les jeter à un autre fichier, de les mettre à la fois et de comparer les fichiers à la fin pour assurer la commande pour assurer la commande pour assurer la commande. est le même. Cela vous mènerait à la multi-threading, à la verrouillage, aux mutiles et à ce qui ne vise pas et montrez également les avantages de la multiplication de certaines tâches par rapport au traitement dans un seul fil.

première chose qui est tombée dans ma tête. Pourrait être terne et / ou inutile, mais ne tirez pas sur le messager! :)


2 commentaires

Suggestion intéressante. Je ne sais pas que je comprends tout à fait ce que vous voulez dire, ce que vous voulez dire avec "les temps et comparez les fichiers à la fin pour que la commande soit la même"


Désolé - je veux dire le temps passé sur un seul fil, puis le temps passé sur 2, 3, 4, n threads, etc.



3
votes

Je pense que vous devriez attirer l'attention sur ces livres:

  1. Windows via C / C ++ par Jeffrey Richter. C'est l'un des meilleurs livres sur Multhreading
  2. Programmation simultanée sur Windows par Joe Duffy . Un autre livre Excelent sur Multhreading

    Excelent articles de Herb Sutter (Herb, nous attendons tous votre nouveau livre!)

    Concurrence efficace série

    Certains blogs:

    1. Blog de Herb Sutter .
    2. Programmation parallèle avec .NET
    3. Blog de Jeffrey Richter
    4. Blog de Joe Duffy

      P.s. Que diriez-vous de Filetage d'alimentation comme exemple de multithreading (et de mise en œuvre threadpool)?


2 commentaires

Grand matériel de lecture, mais je veux vraiment écrire du code. J'ai fait assez de lecture ...


Peut-être essayer d'implémenter le serveur de socket multithreaded? Ou certains calculs multithreads simples?



7
votes
  1. Tri rapide récursif. Comparez le temps de tri en fonction du nombre de threads.
  2. Simulateur Craps. Combien de rouleaux de dés pouvez-vous faire par minute?
  3. page Web Crowler. Donnez-lui une URL et téléchargez toutes les pages et images de l'enfant. Surveillez les pages qui se font référence pour que vous n'entrez pas dans une boucle infinie. Notez que les threads bloqueront l'attente de la réponse du réseau, vous offrant une utilisation différente de la CPU que des fils à base de calculs pure. Utilisez une file d'attente pour garder une trace des pages non lues et un dictionnaire pour garder une trace des threads actifs. Threads que le délai d'attente redevient à la file d'attente.
  4. Server WCF Web. Apwn un nouveau fil pour chaque demande. Écrivez un client WPF multi-threadé qui met à jour l'interface utilisateur en temps réel.

    est-ce suffisant?


1 commentaires

A écrit le châleur Web One. Grande bonne idée! Était vraiment amusant aussi. Devoir que le fil de la file d'attente soit sûr, ainsi que le cache qui a gardé la trace des URL déjà vérifiées était juste l'exercice dont j'avais besoin. Merci! Je vais essayer le serveur Web WCF un essai suivant.