Je suis actuellement un développeur C # avec une compréhension assez fragile du threading.
Ces deux liens ont été suggérés dans d'autres articles:
http://www.yoda.arachsys.com/csharp/threads/
http://www.albahari.com/threading/
Dois-je revenir à l'essentiel et peut-être regarder quelques textes informatiques sur le sujet?
Je pense vraiment que si je me lance et que j'utilise les bibliothèques c #, je n'aurai pas vraiment une base solide de connaissances sur laquelle bâtir. Je pense que j'ai besoin d'apprendre ce sujet à partir de zéro comme un étudiant en science-fiction, puis d'utiliser les bibliothèques C #.
Quelqu'un peut-il suggérer une approche de l'apprentissage du filetage, peut-être des liens et / ou des idées de projet?
Merci d'avance!
Modifier, merci pour toutes les réponses. Certaines personnes ont mentionné qu'un livre pourrait être une bonne idée, quelqu'un peut-il en suggérer un? Je préférerais quelque chose de langue agnostique. Est-ce que quelqu'un sait dans quelle classe ces matières seraient couvertes par un diplôme en informatique? J'essaye de google pour quelques notes et devoirs en ligne gratuits.
Réponses:
Écrivez un serveur Web multithread. Vous apprendrez une tonne . Et pas seulement sur le filetage.
la source
Le problème producteur-consommateur est un exemple classique, et il vous aide à comprendre non seulement le threading, mais la planification du processeur (il peut être démontré en utilisant fork () pour les processus enfants par opposition aux threads) et comment vos programmes interagissent avec le système d'exploitation derrière les scènes.
Voici un aperçu des choses importantes que vous devez comprendre en ce qui concerne le threading / forking 1. Comment le système d'exploitation planifie les tâches (algorithme de tourniquet par exemple) 2. Verrouillage des ressources (si plusieurs threads utilisent la même ressource, vous ne voulez pas qu'ils y accéder en même temps - BAD THINGS HAPPEN)
Voici un article wiki sur ce problème classique: http://en.wikipedia.org/wiki/Producer-consumer_problem
Fondamentalement, créez un "producteur" qui génère des fils de "consommateurs". Le producteur produit une «ressource» et les consommateurs la consomment. Mettez-le en boucle et regardez ce qui se passe (vous serez surpris que les consommateurs consomment finalement plus de ressources, puis sont disponibles en raison de méthodes non synchronisées).
la source
Choisissez l'un des problèmes classiques hautement parallèles. Vous pourriez trouver plus intéressant d'en choisir un avec une accélération super-linéaire.
Envisagez de rechercher dans une liste non triée et non indexée. Ce problème est trivialement parallèle. Implémentez d'abord une recherche unique, puis une recherche parallèle naïve. Mettre en œuvre le vol de travail. Générez des ensembles de données aléatoires et exécutez les trois versions sur les mêmes ensembles de données. Calculez l'accélération.
la source
Je ne pense pas qu'un manuel soit la prochaine meilleure étape. Un projet est la voie à suivre. Cela devrait être quelque chose qui vous passionne.
La première fois que j'ai fait du filetage, j'améliorais les performances d'un robot d'exploration Web. Vous pouvez explorer beaucoup plus rapidement si vous ne faites pas toutes vos E / S réseau en série. C'est un excellent projet pour commencer, car vous pouvez l'aborder de plusieurs façons, mais ce n'est pas aussi compliqué que, par exemple, la programmation GUI multithread. Cela ne nécessite pas non plus beaucoup de compétences spécialisées (par exemple, des trucs informatiques lourds).
Alors, découvrez quelques informations à gratter et commencez à pirater. Il ne devrait pas vous falloir longtemps pour que quelque chose se passe, ce sera une douce introduction.
la source
Modélisez une simple application Spy vs Spy.
Chaque espion s'exécute sur un thread distinct.
Chaque espion peut infliger des dégâts à l'autre espion, mais pas directement.
Chaque espion peut voler de précieuses ressources à l'autre espion, mais pas directement.
Les deux espions disposent d'un bassin limité de ressources et doivent les partager. Un seul espion peut utiliser une ressource donnée à la fois.
la source
Du haut de ma tête: la 4e édition du livre de Bruce Eckel "Penser en Java" a un très long chapitre sur le filetage (> 100 pages - presque un petit livre en soi). J'ai lu des éditions plus anciennes du livre et je n'ai donc pas lu ce chapitre; mais je me souviens d'un de ses articles de blog (ou des notes de sortie de son livre), où il prétend que l'écriture a été très difficile et qu'en fin de compte, c'était une véritable réussite pour lui. Vérifiez-le...
En plus de cela, il y a ce cours vidéo de 2,5 heures sur ce site de formation commerciale, mais vous pouvez obtenir un essai gratuit (vous devez laisser les données de votre carte de crédit, alors n'oubliez pas de vous désinscrire)
http://www.pluralsight-training.net/microsoft/olt/Course/Toc.aspx?n=clr-threading
la source
C'est toujours un bon choix et je vous recommande de prendre un bon livre de filetage afin de vous familiariser avec le filetage. J'ai appris le multithreading en Java et les connaissances se traduisent assez facilement en C #.
Si vous voulez un exemple pratique, je vous recommande d'essayer le problème du philosophe de la salle à manger .
Vous devez apprendre plusieurs choses lorsque vous vous lancez dans le multithreading:
Je ne peux pas penser à autre chose pour le moment. Le tutoriel Albahari a l'air vraiment bien!
la source