
Como você já notou, o formato do seminário evoluiu e assumiu uma nova forma: cada seminário subseqüente agora é dedicado inteiramente a um tópico. O quinto foi dedicado ao tópico Garbage Collector e, em 10 horas, revelou tudo o que é possível, deixando questões absolutamente privadas para trás. E seu ponto culminante foi um relatório sobre aplicação prática (uma pergunta que interessa a todos - "por que saber tudo isso?")
A segunda pergunta, que eu acho que todo mundo quer saber, mas, como regra, não há tempo para isso, é a questão de trabalhar em código multiencadeado e a questão de planejar e suportar sua arquitetura. Essas perguntas são bastante complexas, assustadoras e geralmente repulsivas em geral. E é exatamente por isso que o desenvolvedor comum não vai além das construções mais simples de sincronização. Mas há tantas coisas interessantes por aí :)
Há pouco tempo, eu entendi uma verdade aparentemente simples: para entender como funcionam as abstrações de nível superior, é preciso entender como as abstrações de nível inferior funcionam. Em outras palavras, para entender como trabalhar com código multithread no nível assíncrono / espera, é necessário conhecer pelo menos as primitivas de sincronização e outras noções básicas de código multithread no .NET. E o que é ainda melhor - um pouco do nível do sistema operacional. Depois disso, a maioria das abstrações de nível superior ficará clara automaticamente.
No novo seminário, que desta vez diz respeito não apenas à plataforma .NET, como era antes, mas essencialmente abrange qualquer plataforma (afinal, o código multithread funciona com base em abstrações de nível inferior), revelaremos este tópico com mais detalhes:
Plano de oficina
O básico
Para começar, consideraremos a base: tudo o que remonta ao sistema operacional e ao processador. Afinal, qualquer mecânica de nível superior funciona com base nas regras da parte inferior. Isso incluirá os conceitos básicos da arquitetura do processador, primitivas de sincronização e APIs do sistema operacional Windows e Linux. Você sabia que existem vários tipos de processos sozinhos?
BCL, Agendadores, Locais de segmentos, STA / MTA ...
Depois de examinar essas abstrações e examinar as regras para trabalhar com elas, focaremos nas abstrações básicas da própria plataforma: BCL, Locals de Threads, pools de threads e outros princípios básicos. Essas abstrações estão por toda parte, mas os exemplos serão para a plataforma .NET. Veremos o relacionamento com o sistema operacional, seu desempenho e a aplicabilidade em várias situações. Por fim, entenderemos muitos problemas que não foram alcançados: contextos de sincronização, STA / MTA, como os Thread Locals funcionam e muito mais.
A cada nova abstração, além do fato de que tudo será contado lado a lado: em um dia, você começará a relacionar todo o conhecimento e alternaremos suavemente para vários mecanismos de um nível superior: planejadores, segundo plano, modelos de desenvolvimento de código multithread.
Algoritmos sem bloqueio
todo o caminho para assíncrono / aguardar. E no final, veremos algoritmos multithreading mais avançados. Analisaremos um par de algoritmos sem bloqueio para que cada um de vocês possa criá-los. Depois disso, aprenderemos a criar requisitos para o nosso próprio desenvolvimento.
PLINQ / espera assíncrona
Além disso, tendo absorvido o conhecimento básico, começaremos a estudar bibliotecas de altos níveis de abstração: do PLINQ até o assíncrono / espera, analisando os recursos de trabalhar com cada um. Aqui, quero dizer que você está aproximadamente familiarizado com as próprias bibliotecas e vamos nos aprofundar em cada uma delas em um nível um pouco mais grave.
Obviamente, não poderemos descobrir o tópico Concorrência em um dia: esse tópico é muito extenso e multifacetado. É por esse motivo que o CLRium # 6 continuará por dois dias.
Detalhes de contato