Atualmente, sou um desenvolvedor de C # com uma compreensão bastante instável do encadeamento.
Ambos os links foram sugeridos em outros posts:
http://www.yoda.arachsys.com/csharp/threads/
http://www.albahari.com/threading/
Devo voltar ao básico e talvez examinar alguns textos de ciência da computação sobre o assunto?
Eu realmente sinto que, se eu pular e usar as bibliotecas c #, não terei realmente uma base sólida de conhecimento para desenvolver. Acho que preciso aprender esse assunto do zero como um estudante de ciências, depois usar as bibliotecas C #.
Alguém pode sugerir uma abordagem para o aprendizado de threads, talvez alguns links e / ou idéias de projetos?
Desde já, obrigado!
Editar, obrigado por todas as respostas. Algumas pessoas mencionaram que um livro pode ser uma boa ideia, alguém pode sugerir um? Eu preferiria algo agnóstico na linguagem. Alguém sabe em que classe esse material seria coberto em um diploma de Ciência da Computação? Estou tentando pesquisar no Google algumas anotações e tarefas on-line gratuitas.
Respostas:
Escreva um servidor web multiencadeado. Você aprenderá uma tonelada . E não apenas sobre rosqueamento.
fonte
O problema produtor-consumidor é um exemplo clássico e ajuda você a entender não apenas o encadeamento, mas o agendamento do processador (pode ser demonstrado usando o fork () para processos filho em oposição aos encadeamentos) e como seus programas interagem com o sistema operacional por trás as cenas.
Aqui está um resumo das coisas importantes que você deve entender sobre o encadeamento / bifurcação 1. Como o sistema operacional agenda tarefas (algoritmo round robin, por exemplo) 2. Bloqueio de recursos (se vários encadeamentos estão utilizando o mesmo recurso, você não deseja que eles acessá-los ao mesmo tempo - coisas ruins acontecem)
Aqui está um artigo da wiki sobre esse problema clássico: http://en.wikipedia.org/wiki/Producer-consumer_problem
Basicamente, crie um "Produtor" que gera tópicos de "Consumidores". O produtor produz um "recurso" e os consumidores o consomem. Coloque-o em um loop e observe o que acontece (você ficará surpreso que, eventualmente, os consumidores consumirão mais recursos do que os disponíveis devido a métodos não sincronizados).
fonte
Escolha um dos problemas clássicos altamente paralelos. Você pode achar mais interessante escolher um com aceleração super-linear.
Considere pesquisar em uma lista não classificada e não indexada. Esse problema é trivialmente paralelo. Primeiro implemente uma pesquisa encadeada única, depois uma pesquisa paralela ingênua. Implementar roubo de trabalho. Gere alguns conjuntos de dados aleatórios e execute as três versões nos mesmos conjuntos de dados. Calcule a aceleração.
fonte
Não acho que um livro seja o próximo melhor passo. Um projeto é o caminho a percorrer. Você deve estar animado com isso.
Na primeira vez em que fiz rosqueamento, estava melhorando o desempenho de um rastreador da web. Você pode rastrear muito mais rápido se não estiver fazendo todas as suas E / S de rede em série. Este é um ótimo projeto para começar, porque você pode abordá-lo de várias maneiras, mas não é tão complicado quanto, por exemplo, programação GUI multithread. Também não requer muita habilidade especializada (por exemplo, material computacional pesado).
Então, descubra algumas informações para raspar e começar a invadir. Não demorará muito para você começar algo, será uma introdução suave.
fonte
Modele um aplicativo Spy vs. Spy simples.
Cada espião é executado em um thread separado.
Cada espião pode causar danos ao outro espião, mas não diretamente.
Cada espião pode roubar recursos valiosos do outro espião, mas não diretamente.
Ambos os espiões têm um conjunto limitado de recursos à sua disposição e devem compartilhá-los. Somente um espião pode usar qualquer recurso de cada vez.
fonte
De cabeça para baixo : a 4ª edição do livro "Thinking in Java" de Bruce Eckel tem um capítulo muito longo sobre threading (> 100 páginas - quase um livrinho em si). Eu li edições mais antigas do livro e, portanto, não li este capítulo; mas lembro-me de uma das postagens de seu blog (ou das notas de lançamento de seu livro), onde ele afirma que escrever isso foi muito difícil e, no final, foi uma conquista real para ele. Confira...
Além disso, há este curso em vídeo de 2,5 horas neste site de treinamento comercial, mas você pode obter uma avaliação gratuita (deve deixar os dados do cartão de crédito; portanto, não se esqueça de cancelar a inscrição)
http://www.pluralsight-training.net/microsoft/olt/Course/Toc.aspx?n=clr-threading
fonte
Essa é sempre uma boa escolha e eu recomendo que você escolha um bom livro de encadeamento para se familiarizar com o encadeamento. Aprendi multithreading em Java e o conhecimento foi traduzido facilmente em C #.
Se você quiser um exemplo prático, recomendo que tente o problema do filósofo de restaurantes .
Você precisa aprender várias coisas ao entrar no multithreading:
Não consigo pensar em outras coisas no momento. O tutorial Albahari parece muito bom!
fonte