“Os resultados empíricos são apenas para publicação, os reais motivos do trabalho são estéticos.” Ótima entrevista com Michael Scott

“Os resultados empíricos são apenas para publicação, os reais motivos do trabalho são estéticos.” Ótima entrevista com Michael Scott Michael Scott - por 34 anos Ele é professor de ciência da computação na Universidade de Rochester e atuou como reitor por cinco anos em sua alma mater, a Universidade de Wisconsin-Madison. Realiza pesquisas em programação paralela e distribuída e em design de linguagens, além de lecionar essas disciplinas para estudantes.

O mundo conhece Michael dos livros didáticos. "Pragmática da Linguagem de Programação"e trabalho "Algoritmos para sincronização escalável em multiprocessadores de memória compartilhada" Ele recebeu o Prêmio Dijkstra, sendo um dos mais renomados na área de computação distribuída. Você também pode conhecê-lo como o autor desse algoritmo. Michael-Scott.

Juntamente com Doug Lee, ele desenvolveu os algoritmos não bloqueantes e as filas síncronas que dão suporte às bibliotecas Java. estruturas de dados duais O JavaSE 6 apresentou uma melhoria de desempenho de 10 vezes. ThreadPoolExecutor.

Conteúdo:

  • Início de carreira, Universidade de Rochester. Projeto Charlotte, linguagem do lince;
  • Interface coerente escalável IEEE, bloqueio MCS;
  • Sobrevivência em um mundo em constante mudança;
  • Os alunos estão ficando mais burros? Tendências globais, internacionalização;
  • Trabalho eficaz com os alunos;
  • Como se manter atualizado sobre os últimos desenvolvimentos na preparação de novos cursos e livros;
  • Conexão entre o mundo empresarial e o acadêmico;
  • Colocando ideias em prática. MCS, MS, CLH, JSR 166, trabalhando com Doug Lee e muito mais;
  • Memória transacional;
  • Novas arquiteturas. A memória transacional está prestes a triunfar;
  • Memória não volátil, Optane DIMM, dispositivos ultrarrápidos;
  • A próxima grande tendência. Estruturas de dados duais. Hydra.

A entrevista é conduzida por:

Vitaly Aksenov — atualmente é pós-doutorando no IST Áustria e membro do Departamento de Ciência da Computação da Universidade ITMO. Sua pesquisa concentra-se na teoria e prática de estruturas de dados concorrentes. Antes de ingressar no IST, ele obteve seu doutorado pela Universidade Paris Diderot e pela Universidade ITMO, sob a supervisão do Professor Petr Kuznetsov.

Alexey Fedorov - Produtor do JUG Ru Group, empresa russa que organiza conferências para desenvolvedores. Alexey participou da preparação de mais de 50 conferências e seu currículo inclui desde o cargo de engenheiro de desenvolvimento na Oracle (JCK, Java Platform Group) até o cargo de desenvolvedor na Odnoklassniki.

Vladimir Sitnikov - Engenheiro na Netcracker. Dez anos de trabalho no desempenho e escalabilidade do NetCracker OS, software utilizado pelas operadoras de telecomunicações para automatizar processos de gerenciamento de redes e equipamentos de rede. Interessado em problemas de desempenho de Java e Oracle Database. Autor de mais de uma dúzia de melhorias de desempenho no driver PostgreSQL JDBC oficial.

Início de carreira, Universidade de Rochester. Projeto Charlotte, linguagem Lynx.

AlexeyPrimeiramente, gostaria de dizer que nós, na Rússia, somos todos muito apaixonados por Ciência da Computação, Ciência de Dados e algoritmos. É quase indecente. Todos nós já lemos livro de Cormen, Leiserson e RivestPortanto, a próxima conferência, a escola e esta entrevista em si devem ser muito populares. Recebemos inúmeras perguntas para esta entrevista de estudantes, programadores e membros da comunidade, por isso estamos muito gratos por esta oportunidade. A Ciência da Computação é tão popular nos EUA?

MichaelNosso campo é tão diverso, tem tantos ramos e impacta a sociedade de tantas maneiras, que é difícil para mim dar uma resposta definitiva. Mas o fato é que ele impulsionou mudanças enormes nos negócios, na indústria, nas artes e na sociedade como um todo nos últimos 30 anos.

VitaliVamos começar com algo mais remoto. Muitas universidades têm uma espécie de especialização em uma área específica. Para a Carnegie Mellon, é computação paralela; para o MIT, é criptografia, robótica e multithreading. A Universidade de Rochester tem uma especialização semelhante?

MichaelSinceramente, eu diria que a CMU e o MIT se especializam em tudo. Nosso departamento sempre foi focado em inteligência artificial. Metade dos nossos funcionários trabalha com IA ou interação humano-computador — uma proporção maior do que em outros departamentos, e sempre foi assim. Mas quando eu estava na CMU, não cursei nenhuma disciplina de IA e nunca trabalhei na área. Então, meu departamento se especializa em um problema com o qual não tenho nenhuma ligação. A boa notícia é que o segundo problema mais importante no nosso departamento é programação concorrente e multithread, que é a minha área de especialização.

VitaliVocê começou a trabalhar em ciência da computação quando o campo da programação multithread estava apenas surgindo. A julgar pela sua lista de publicações, seus primeiros trabalhos abrangeram uma gama bastante ampla de tópicos: gerenciamento de memória em sistemas multithread, sistemas de arquivos distribuídos e sistemas operacionais. Por que tanta versatilidade? Você estava tentando encontrar seu lugar na comunidade de pesquisa?

MichaelComo estudante, participei de Projeto Charlotte na Universidade de Wisconsin, onde foi desenvolvido um dos primeiros sistemas operacionais distribuídos. Lá, trabalhei com Raphael Finkel (Rafael Finkel) e Marvin Solomon (Marvin SolomonMinha dissertação foi sobre o desenvolvimento de uma linguagem de software de sistema para sistemas distribuídos — felizmente, hoje em dia está praticamente esquecida. Criei a linguagem de programação Lynx, que tinha como objetivo simplificar a criação de servidores para um sistema operacional distribuído com baixo acoplamento. Como eu trabalhava principalmente com sistemas operacionais na época, presumi que minha carreira também se concentraria neles. Mas a Universidade de Rochester era muito pequena e, por isso, os diferentes grupos interagiam muito entre si. Não havia uma dúzia de outros especialistas em sistemas operacionais com quem eu pudesse interagir, então todos os meus contatos eram com pessoas que trabalhavam em áreas completamente diferentes. Eu realmente gostei disso; ser generalista foi uma grande vantagem para mim. Quanto a estruturas de dados multithread e algoritmos de sincronização especificamente, comecei a trabalhar com eles completamente por acaso.

Interface coerente escalável IEEE, bloqueio MCS.

VitaliVocê poderia explicar isso um pouco mais a fundo?

MichaelEssa é uma história engraçada que eu nunca me canso de contar para todo mundo. Aconteceu em uma conferência. ASPLOS Em Boston - foi no final dos anos 80 ou início dos anos 90. John Mellor-Crummie estava presente na conferência (John Mellor-Crummey), um graduado do nosso departamento. Eu o conhecia, mas não havíamos realizado pesquisas conjuntas anteriormente. Mary Vernon (Maria Vernon) do Wisconsin fez uma apresentação sobre o sistema multiprocessador que estavam desenvolvendo no Wisconsin: Multicubo de WisconsinEste Multicube tinha um mecanismo de sincronização de hardware chamado Q on Sync Bit, que mais tarde foi renomeado para Q on Lock Bit porque soava como queijo Colby, então era um trocadilho. Se você entende de multithreading, provavelmente sabe que o Colby acabou se tornando o mecanismo de sincronização para o padrão IEEE Scalable Coherent Interface. Era um mecanismo de bloqueio que criava ponteiros de um cache para outro no nível do hardware, de forma que cada detentor do bloqueio soubesse de quem era a vez. Quando John e eu ouvimos falar disso, nos entreolhamos e dissemos: por que fazer isso no nível do hardware? Não podemos conseguir o mesmo resultado com compare-and-swap? Pegamos um dos cadernos que estavam na sala de aula e esboçamos um. Fechadura MCSEnquanto Mary continuava sua apresentação, nós a implementamos, experimentamos, a ideia se mostrou bem-sucedida e publicamos o artigo. Na época, o tema me pareceu apenas uma distração divertida, após a qual eu planejava retornar aos sistemas operacionais. Mas então surgiu outro problema na mesma área e, eventualmente, sincronização, multithreading e estruturas de dados se tornaram minha principal especialidade. Como você pode ver, tudo aconteceu por acaso.

VitaliJá conheço o sistema de bloqueio MCS há bastante tempo, mas até agora não sabia que era um trabalho de vocês, e nem me dei conta de que era uma sigla para os seus sobrenomes.

Como sobreviver em um mundo em constante mudança?

AlexeyTenho uma pergunta relacionada. Há trinta ou quarenta anos, havia mais liberdade entre as diferentes especialidades. Se você quisesse iniciar uma carreira em multithreading ou sistemas distribuídos, ia em frente; se quisesse trabalhar com sistemas operacionais, sem problemas. Cada área tinha muitas questões em aberto e poucos especialistas. Agora, surgiram especializações restritas: não existem apenas especialistas em sistemas operacionais em geral, existem especialistas em sistemas específicos. O mesmo acontece com multithreading e sistemas distribuídos. Mas o problema é que nossas vidas são finitas; cada pessoa só pode dedicar algumas décadas à pesquisa. Como sobreviveremos neste novo mundo?

MichaelNão somos especiais nesse aspecto; o mesmo aconteceu em outras áreas em algum momento. Tive a sorte de começar a trabalhar em ciência da computação quando a área ainda estava em seus primórdios. Algumas bases já haviam sido lançadas, mas tudo ainda era muito imaturo. Oportunidades como essa não surgem com frequência. A engenharia elétrica existe há muito tempo, a física ainda mais, e a matemática praticamente desde o início dos tempos. Mas isso não significa que ninguém mais esteja fazendo descobertas interessantes em matemática. Ainda existem muitos problemas em aberto, mas, ao mesmo tempo, precisamos aprender mais. Você tem razão ao dizer que existem muito mais especializações agora do que costumavam existir, mas isso só significa que estamos na mesma situação que a maioria das outras áreas da atividade humana.

AlexeyEstou interessado em um aspecto mais prático da questão. Tenho formação em matemática e, durante meus estudos, frequentei conferências e trabalhei em diversos temas científicos. Percebi que ninguém na plateia entendia minhas apresentações e, da mesma forma, as apresentações de outras pessoas eram compreensíveis apenas para elas mesmas. Isso não acontece com tanta frequência em tópicos mais complexos, mas assim que você começa a se aprofundar em algo, a plateia não consegue acompanhar. Como superar esse problema?

MichaelNem sempre com sucesso. Recentemente, preparei uma palestra na qual me aprofundei demais em detalhes técnicos. Conforme a palestra avançava, ficou claro que a maioria da plateia não me entendia, então tive que improvisar. Os slides não podiam ser alterados, então não foi muito bem-sucedido — por isso, de modo geral, tento não usar slides. No geral, meu conselho é considerar seu público. Você precisa saber para quem está falando, o nível de conhecimento deles e o que eles precisam ouvir para apreciar seu trabalho.

VitaliVocê poderia me dar uma dica sobre o que era essa palestra?

MichaelSinceramente, prefiro não me aprofundar nesse assunto para preservar o anonimato das pessoas envolvidas. A questão é que muitas vezes nos aprofundamos demais nas complexidades do problema em que estamos trabalhando, o que dificulta explicar, no início de uma apresentação, por que o problema é interessante e importante e como ele se relaciona com questões que o público já conhece. Na minha experiência, essa é a habilidade com a qual os alunos mais têm dificuldade. E foi uma fragilidade na minha apresentação recente. Uma apresentação bem estruturada deve criar uma conexão com o público desde o início, explicando exatamente qual é o problema e como ele se relaciona com tópicos que eles já conhecem. O nível de tecnicidade dessa introdução depende do público. Se for muito diverso, a apresentação pode ser dividida em várias etapas. A introdução deve ser acessível a todos e, ao final, pode ser difícil acompanhar tudo, mas pessoas relativamente familiarizadas com a sua área conseguirão entender tudo.

Os estudantes estão ficando mais burros? Tendências globais, internacionalização.

AlexeyVocê observa estudantes há várias décadas. Os estudantes ficam mais burros ou mais inteligentes de década para década, ou de ano para ano? Na Rússia, os professores reclamam constantemente que os alunos estão ficando mais burros a cada ano, e não se sabe ao certo o que fazer a respeito.

MichaelÉ possível perceber muita negatividade vinda de nós, os veteranos. Subconscientemente, tendemos a esperar que os alunos absorvam toda a nossa experiência de 30 anos. Se eu tenho um conhecimento mais profundo do que tinha em 1985, por que os alunos não o têm? Provavelmente porque eles têm 20 anos, não é? Acho que a mudança mais significativa nas últimas décadas diz respeito à composição demográfica: agora temos muito mais estudantes internacionais, com exceção dos canadenses. Antes havia muitos canadenses porque estamos muito perto da fronteira com o Canadá, e os estudantes de lá podiam voltar para casa nos fins de semana. Mas agora o Canadá tem muitas universidades boas, e os canadenses preferem estudar em casa; eles viajam muito menos para os EUA.

AlexeyVocê acha que isso é uma tendência local ou global?

MichaelNão me lembro exatamente quem, mas alguém disse que a Terra é plana. Nossa área de atuação se tornou significativamente mais internacional. Conferências da ACM Anteriormente, os Jogos Olímpicos eram realizados exclusivamente nos Estados Unidos, depois decidiram realizá-los em outros países a cada quatro anos, e agora são realizados em todo o mundo. Essas mudanças tiveram um impacto ainda maior. IEEEPorque sempre foi uma organização mais internacional do que a ACM. E há coordenadores de programa da China, Índia, Rússia, Alemanha e muitos outros países, porque há muita coisa acontecendo em todos os lugares agora.

AlexeyMas provavelmente existem alguns aspectos negativos nessa internacionalização?

MichaelEu diria que todos os aspectos negativos são políticos, não tecnológicos. Antigamente, o principal problema era os EUA roubarem as pessoas mais inteligentes e talentosas de países ao redor do mundo. Agora, o principal problema são os jogos políticos entre diferentes países em relação a vistos e imigração.

AlexeyOu seja, barreiras e coisas do gênero. Entendido.

VladimirPessoalmente, tenho curiosidade em saber qual é a sua abordagem ao ensinar um novo assunto aos alunos. Existem diferentes abordagens: você pode se concentrar em inspirá-los a experimentar algo novo ou pode se concentrar mais nos detalhes de como uma determinada tecnologia funciona. Qual você prefere?

Trabalho eficaz com alunos

AlexeyE como é que se encontra o maldito equilíbrio entre o primeiro e o segundo?

MichaelO problema é que as aulas nem sempre correm como eu gostaria. Normalmente, entrego aos alunos material de leitura com antecedência para que possam absorvê-lo, compreendê-lo da melhor forma possível e formular perguntas sobre quaisquer pontos que não tenham entendido. Depois, em aula, podemos nos concentrar nos pontos mais difíceis e explorá-los juntos. É assim que gosto de ensinar. Mas, dada a carga de trabalho atual, nem sempre tenho a oportunidade de garantir que eles se preparem com antecedência. Como resultado, acabo gastando muito mais tempo com resumos gerais do que gostaria. Apesar disso, tento manter nossas aulas interativas. Caso contrário, é mais fácil simplesmente gravar um vídeo para que os alunos possam assistir em casa. O objetivo das aulas presenciais é a interação humana. Em sala de aula, prefiro usar giz e quadro em vez de slides, exceto em raros casos em que um diagrama é muito complexo para ser mostrado no quadro. Isso me liberta da necessidade de seguir um plano de aula rígido. Como não há uma ordem definida para apresentar o conteúdo, isso me permite adaptar-me ao público com base nas perguntas que recebo. De modo geral, tento tornar as aulas o mais interativas possível, para que o material que apresento dependa das perguntas que me são feitas.

VladimirQue ótimo! Na minha experiência, é bem difícil conseguir perguntas dos ouvintes. Mesmo que você pergunte com antecedência, não importa o quão bobas ou inteligentes sejam as perguntas, eles continuam em silêncio. Como você lida com isso?

MichaelVocê vai rir, mas se ficar em silêncio por tempo suficiente, mais cedo ou mais tarde todos ficarão desconfortáveis ​​e alguém fará uma pergunta. Ou você pode fazer uma simples pergunta técnica de sim/não para determinar se as pessoas entenderam o que foi dito. Por exemplo, existe uma condição de corrida no exemplo dado? Quem acha que sim? Quem acha que não? Quem não entendeu nada, já que apenas metade das mãos se levantou?

VitaliE se você responder incorretamente, será expulso da aula :)

MichaelSe você não respondeu nada, então eu preciso fazer uma pergunta. Preciso descobrir o que o aluno precisa saber para responder à pergunta que acabei de fazer. Eles precisam me ajudar a ajudá-los. Estou disposto a me adaptar a eles para que consigam resolver o problema. Mas se eu não souber o que se passa na cabeça deles, não consigo fazer isso. E se eu mantiver os alunos atentos por tempo suficiente, às vezes eles acabam fazendo as perguntas certas — perguntas que me permitem ver o que se passa na cabeça deles. 

AlexeyEssas perguntas às vezes levam a ideias que você não havia considerado antes? Elas são inesperadas? Permitem que você veja um problema sob uma nova perspectiva?

MichaelHá perguntas que abrem novas perspectivas para a apresentação do conteúdo. Frequentemente, essas perguntas levam a problemas interessantes que eu não havia planejado abordar. Os alunos costumam me dizer que, quando isso acontece, eu me desvio do tema da aula. E, segundo eles, essa é geralmente a parte mais interessante da aula. Muito raramente, apenas algumas vezes, os alunos fizeram perguntas que levaram a uma nova direção de pesquisa e resultaram em um artigo. Isso acontece com muito mais frequência em conversas com os alunos do que em sala de aula, mas já ocorreu ocasionalmente durante as aulas. 

AlexeyEntão, os alunos fizeram perguntas que poderiam ser usadas posteriormente como base para um artigo?

Michael: Sim 

VitaliCom que frequência você tem esse tipo de conversa com os alunos? Quando eles querem aprender mais do que foi abordado em sala de aula?

MichaelCom meus alunos de pós-graduação, isso acontece o tempo todo. Tenho uns cinco ou seis, e estamos sempre conversando sobre diversos assuntos. Conversas assim com alunos que apenas frequentam minhas aulas não são muito frequentes. Embora eu gostaria que acontecessem com mais frequência. Suspeito que eles simplesmente tenham receio de vir ao meu gabinete durante o horário de atendimento. Todo semestre, alguns alunos conseguem superar essa barreira psicológica, e é sempre muito interessante conversar com eles depois da aula. No entanto, se todos os alunos fossem tão corajosos, eu simplesmente não teria tempo. Então, talvez tudo esteja funcionando como deveria. 

VitaliComo você encontra tempo para interagir com os alunos? Pelo que sei, nos EUA, os professores são muito ocupados — com pedidos de financiamento e coisas do gênero. 

MichaelSinceramente, trabalhar com alunos é o aspecto do meu trabalho que mais me agrada. Por isso, estou bastante motivada. A maior parte do tempo que passo no escritório é dedicada a diversas reuniões. Agora é verão, então minha agenda está menos cheia, mas durante o ano letivo, minha agenda fica lotada todos os dias, das 9h às 17h. Pesquisas, revisões, solicitações de financiamento — só tenho as noites e os fins de semana para tudo isso. 

Como se manter atualizado sobre os últimos desenvolvimentos na preparação de novos cursos e livros.

AlexeyVocê ainda ministra alguma das disciplinas que lecionava há muito tempo? Algo como Introdução à Ciência da Computação.

MichaelA primeira coisa que me vem à mente é um curso de linguagens de programação. 

AlexeyQuão diferente é a versão atual deste curso em comparação com a versão de 10, 20 ou 30 anos atrás? Talvez a tendência geral seja mais interessante do que os detalhes de um curso específico.

MichaelMeu curso sobre linguagens de programação era um tanto incomum na época em que o criei. Comecei a lecioná-lo no final da década de 1980, substituindo meu colega, Doug Baldwin (Douglas BaldwinO tema do curso tinha apenas uma relação tangencial com a minha especialização, mas quando ele saiu, percebi que era o candidato ideal para lecioná-lo. Não gostei de nenhum dos livros didáticos existentes, então acabei escrevendo o livro didático do curso eu mesmo. (Nota do editor: Este texto é sobre o livro.) "Pragmática da Linguagem de Programação"Atualmente, é utilizado em mais de 200 universidades em todo o mundo. Minha abordagem é incomum, pois combina deliberadamente o design da linguagem com as preocupações de implementação, focando nas interações entre esses aspectos em todos os domínios possíveis. A abordagem central permaneceu inalterada, assim como muitos dos conceitos fundamentais: abstrações, namespaces, modularidade e tipos. No entanto, o conjunto de linguagens usado para demonstrar esses conceitos mudou completamente. Quando o curso foi criado, incluía muitos exemplos em Pascal, mas hoje muitos dos meus alunos nunca ouviram falar dessa linguagem. Mas eles conhecem Swift, Go e Rust, então preciso falar sobre as linguagens que estão em uso atualmente. Além disso, os alunos agora são bem versados ​​em linguagens de script, enquanto que, quando comecei a lecionar este curso, ele era inteiramente dedicado a linguagens compiladas. Agora, porém, precisamos de muito material sobre Python, Ruby e até mesmo Perl, porque é com essas linguagens que as pessoas escrevem código hoje em dia, e muitas coisas interessantes estão acontecendo nessas linguagens, inclusive na área de design de linguagens. 

VitaliEntão, minha próxima pergunta está relacionada à anterior. Como você se mantém atualizado nessa área? Imagino que atualizar um curso como este exija muito trabalho — você precisa entender novas linguagens e assimilar os conceitos básicos. Como você consegue fazer isso?

MichaelNão posso dizer que sempre consigo fazer isso com 100% de sucesso. Mas, na maioria das vezes, faço o que todo mundo faz: leio na internet. Se quero entender Rust, pesquiso no Google, vou ao site da Mozilla e leio o guia lá. Isso para acompanhar o que está acontecendo no desenvolvimento comercial. Já para assuntos acadêmicos, preciso acompanhar as palestras em grandes conferências. 

Conexões entre negócios e academia

VitaliVamos falar sobre a conexão entre negócios e pesquisa acadêmica. Encontrei vários artigos sobre coerência de cache na sua lista de trabalhos. Pelo que entendi, na época da publicação deles, os algoritmos de coerência de cache eram instáveis? Ou não eram amplamente utilizados? Qual foi o grau de aceitação prática das suas ideias?

MichaelNão tenho certeza exatamente de quais publicações você está falando. Eu já trabalhei bastante com meus alunos, Bill Bolosky (William Bolosky) e Leônidas Kontotanassis (Leonidas KontothanassisNo início da década de 1990, eu trabalhava com gerenciamento de memória para máquinas Neumann. Naquela época, o mercado ainda não entendia como construir um sistema multiprocessador adequadamente: se deveria implementar suporte para acesso remoto à memória em nível de hardware, se deveria distribuir a memória, se deveria carregar o cache da memória remota ou se deveria mover páginas no sistema operacional. Bill e Leonidas trabalhavam nessa área e exploravam abordagens que não envolviam o carregamento remoto de cache. Isso não estava diretamente relacionado à coerência de cache, mas ainda era um trabalho sobre gerenciamento de memória NUMA e, posteriormente, tornou-se a base para as abordagens modernas de alocação de páginas em sistemas operacionais modernos. No geral, Bill e Leonidas fizeram um trabalho importante, embora não tenham sido os mais influentes na área — muitas outras pessoas estavam trabalhando na mesma coisa na época. Mais tarde, trabalhei com coerência de cache no contexto de memória transacional de hardware. O grupo com o qual trabalhei nesse problema acabou recebendo várias patentes. Há algumas ideias interessantes por trás delas, mas não acho que serão implementadas. De qualquer forma, é difícil para mim avaliar sua rentabilidade. 

AlexeyNesse sentido, uma pergunta mais pessoal: qual a importância que você tem de ver suas ideias colocadas em prática? Ou você não pensa nisso?

MichaelAdoro fazer essa pergunta em entrevistas com outras pessoas, sejam elas candidatos ou interessados ​​em trabalhar no departamento. Não acho que exista uma resposta certa. As pessoas que fazem coisas incríveis podem ter motivações muito diferentes. Eu me interesso por problemas porque os acho interessantes, não por sua aplicação prática. Mas, por outro lado, quando algo interessante encontra uma utilidade, eu realmente gosto. Então, não é tão simples assim. No início de um projeto, sou motivado não pela ideia de sua aplicação final no mundo, mas pela coerência da ideia e pelo desejo de explorá-la e ver o que resulta dela. Se, no fim, gerar benefícios práticos, ótimo. 

AlexeyGraças à sua formação e experiência, você está em melhor posição do que muitos para avaliar o valor das ideias de outras pessoas. Você pode compará-las e determinar quais funcionam melhor em conjunto. Tenho certeza de que você tem uma opinião sobre as tecnologias atualmente utilizadas na prática por grandes fabricantes como a Intel. Na sua opinião, o caminho que essas empresas estão seguindo é o correto?

MichaelA prática sempre gira em torno do que pode ser comercialmente bem-sucedido, ou seja, gerar lucro, e é melhor perguntar a outra pessoa sobre isso. Meu trabalho resulta principalmente em publicações e, na área de sistemas operacionais, elas são avaliadas por métricas de desempenho: velocidade, consumo de energia, tamanho do código. Mas sempre me pareceu que esses resultados empíricos são adicionados aos artigos apenas para que possam ser publicados, enquanto os verdadeiros motivos do trabalho das pessoas são estéticos. Os pesquisadores avaliam soluções de uma perspectiva artística; eles se importam com a elegância de suas ideias e tentam criar algo melhor do que as abordagens existentes. Os pesquisadores são movidos por motivos pessoais, subjetivos e estéticos. Mas você não pode escrever sobre isso no próprio artigo; essas coisas não são argumentos para o comitê de programa. Felizmente, soluções elegantes costumam ser também rápidas e baratas. Cerca de dez colegas meus e eu discutimos esse tópico há uns 15 anos e acabamos escrevendo um artigo sobre ele. Acho que ainda pode ser encontrado; chama-se "Como avaliar a pesquisa de sistemas" ou algo parecido, tem mais de uma dúzia de autores. Este é o único artigo em que sou autor, juntamente com Sasha FedorovPortanto, se você procurar o nome dela na minha lista de publicações, encontrará o que procura. O artigo aborda a avaliação de pesquisas de sistemas e a importância da elegância. 

AlexeyPortanto, existe uma diferença entre os padrões para o que é considerado um bom resultado na ciência e nos negócios. Na ciência, avalia-se o desempenho, o consumo de energia, o TDP (Produto Transversal Total), a facilidade de implementação e muitos outros fatores. Você tem a oportunidade de conduzir esse tipo de pesquisa na universidade? Vocês possuem um laboratório com diferentes máquinas e arquiteturas onde experimentos poderiam ser realizados?

MichaelSim, nosso departamento possui muitas máquinas interessantes. Geralmente são pequenas; temos um pequeno cluster e muitos sistemas multiprocessadores com diversos aceleradores. Também temos um enorme centro de computação no campus que atende pesquisadores de dezenas de disciplinas diferentes. Ele possui cerca de mil nós e vinte mil núcleos, todos rodando Linux. Se necessário, podemos sempre adquirir recursos da AWS. Portanto, não temos limitações significativas de hardware. 

AlexeyQual era a situação há trinta anos? Havia algum problema naquela época?

MichaelAs coisas eram um pouco diferentes naquela época. Em meados e no final da década de 1980, acreditava-se que a ciência carecia de recursos computacionais. Para remediar essa situação, a Fundação Nacional de Ciência (NSF) criou um programa de computação de alta resolução. (Fundação Nacional de Ciências)O programa de Pesquisa Experimental Coordenada (CER) foi criado. Seu objetivo era fornecer infraestrutura computacional para departamentos de ciência da computação, e fez uma diferença significativa. Com o dinheiro fornecido, compramos um BBN Butterfly de 128 nós na Universidade de Rochester em 1984, um ano antes da minha chegada. Na época, era o maior sistema multiprocessador de memória compartilhada do mundo. Possuía 128 processadores, cada um em uma placa-mãe separada, ocupando quatro racks. Cada processador tinha um megabyte de memória; 128 megabytes de RAM eram uma quantidade inimaginável na época. Implementamos o bloqueio MCS pela primeira vez nessa máquina. 

AlexeyEntão, se entendi corretamente, o problema de hardware foi resolvido? 

MichaelDe modo geral, sim. Há algumas ressalvas: primeiro, se você estiver trabalhando com arquitetura de computadores em nível de chip, é difícil fazer isso na academia, porque existem ferramentas muito mais sofisticadas para isso no mercado. Se você precisar de algo menor que 10 nanômetros, terá que terceirizar. É muito mais fácil ser um pesquisador na Intel nessa área. Se você estiver trabalhando com comunicações ópticas em chips ou memória de estado sólido, encontrará tecnologias no mercado que ainda não estão disponíveis na academia, então você precisa formar alianças. Por exemplo, Stephen Swanson (Steven Swanson) criado tal parceria para novas tecnologias de memória. Essa abordagem nem sempre funciona, mas em alguns casos pode ser bastante bem-sucedida. Além disso, desenvolver os sistemas de computação mais poderosos é mais difícil na ciência. Os maiores projetos de supercomputadores atualmente em andamento nos EUA, Japão e China estão todos concentrados no setor empresarial. 

Colocando ideias em prática. MCS, MS, CLH, JSR 166, trabalhando com Doug Lee e muito mais.

VitaliVocê já falou sobre como começou a trabalhar com algoritmos de sincronização. Você tem dois artigos muito conhecidos sobre o assunto. Bloqueio MCS и filas Michael-Scott (MS), que, em certo sentido, foram implementadas em Java. (Nota do editor: todas as publicações podem ser visualizadas) по ссылкеLá, esse bloqueio foi implementado com algumas alterações e acabou sendo Bloqueio de CLHE a fila foi implementada conforme planejado. Mas muitos anos se passaram entre a publicação de seus artigos e sua aplicação prática. 

AlexeyParece que já faz uns 10 anos no caso da fila.

MichaelAntes que esses recursos aparecessem na biblioteca padrão do Java?

VitaliSim. O que você fez para que isso acontecesse? Ou você não fez nada?

MichaelPosso te contar como a fila MS entrou no Java 5. Alguns anos antes do lançamento, eu trabalhava com o grupo do Mark Moyers na Sun Microsystems, no laboratório deles perto de Boston. Ele organizou um workshop para alguns amigos que estavam trabalhando em problemas interessantes de multithreading, porque queria encontrar tópicos que pudessem ser vendidos para a empresa. Foi lá que conheci o Doug Lea. Eu, o Doug e mais umas 25 pessoas da Sun estávamos discutindo a apresentação dele sobre JSR 166, que mais tarde se tornou java.util.concurrent. Durante o processo, Doug mencionou que queria usar a fila MS, mas precisava de um contador para a interface para lidar com o número de elementos na fila. Isso significava que um método separado, atômico, preciso e rápido, teria que fazer isso. Sugeri simplesmente somar os números de série dos nós, pegar o número de série do primeiro nó e do último, e subtrair um do outro. Doug coçou a cabeça, disse: "Por que não?", e acabou fazendo exatamente isso. Discutimos a implementação dessa abordagem em uma biblioteca, mas Doug fez a maior parte do trabalho sozinho. Por fim, ele conseguiu estabelecer um excelente suporte a multithreading em Java. 

AlexeyEntão, se entendi corretamente, o método .size() deveria ter feito parte da interface padrão da fila e deveria ter uma complexidade algorítmica de O(1)?

MichaelSim, e além disso, é necessário um medidor separado.

AlexeyPorque se você chamar o método .size() em Java, espera-se que o resultado esteja disponível imediatamente, e não com base no tamanho real da coleção. Entendi, obrigado.

MichaelAlguns anos depois, trabalhei em estruturas de dados duais com meu aluno Bill Scherer - é sobre isso que meu artigo tratará. Relatório sobre a HidraDoug nos procurou e disse que poderia usá-los no Java Executor Framework. Juntamente com Bill, ele criou duas implementações, as chamadas filas justas e injustas. Prestei consultoria nesse projeto, embora não tenha participado da escrita do código. Como resultado, a velocidade dos executores aumentou significativamente. 

VladimirVocê já se deparou com implementações incorretas de seus algoritmos ou com solicitações de novas funcionalidades? Geralmente, a prática deveria corresponder à teoria, mas elas frequentemente divergem. Digamos que você escreveu um algoritmo que funciona no papel, mas as pessoas que o implementam começam a pedir mais funcionalidades ou alguma personalização. Você já se deparou com situações assim?

MichaelO único exemplo em que alguém me abordou perguntando "como implementar isso" foi a pergunta do Doug, que já mencionei. Mas houve vários casos em que mudanças interessantes foram feitas para atender a necessidades práticas. Por exemplo, a equipe K42 da IBM converteu o bloqueio MCS e criou uma interface padrão que eliminou a necessidade de passar o nó da fila de um lado para o outro entre as rotinas de aquisição e liberação. Essa interface padrão tornou a ideia, brilhante na teoria, viável na prática. Surpreendentemente, eles nunca publicaram um artigo sobre isso e, embora tenham recebido uma patente, ela foi posteriormente abandonada. O conceito era genial e tento falar sobre ele sempre que possível. 

Houve outros casos em que as pessoas aprimoraram os algoritmos que publiquei. Por exemplo, a fila MS possui um mecanismo de configuração em dois estágios, o que significa que havia duas operações atômicas complexas (CASs) no caminho crítico da fila. Em máquinas antigas, as CASs eram bastante custosas. A Intel e outros fabricantes as otimizaram recentemente, mas, naquela época, eram instruções de 30 ciclos, então ter mais de uma no caminho crítico era indesejável. Como resultado, uma fila excelente foi desenvolvida, semelhante à fila MS, mas com apenas uma operação atômica no caminho crítico. Isso foi alcançado permitindo que uma operação levasse tempo O(n) em vez de O(1) dentro de um determinado intervalo de tempo. Isso era improvável, mas possível. Isso acontecia porque, em certos pontos, o algoritmo percorria a fila do início até a posição atual. No geral, o algoritmo se mostrou muito bem-sucedido. Pelo que sei, ele não é muito utilizado, em parte porque as operações atômicas exigem significativamente menos recursos do que antes. Mas a ideia era ótima. Eu também gosto muito do trabalho de Dave Dice na Oracle. Tudo o que ele faz é muito prático, e ele usa o hardware de forma muito inteligente. Ele teve participação significativa nos algoritmos de sincronização com suporte a NUMA e nas estruturas de dados multithread. 

VladimirAo escrever algoritmos ou ensinar alunos, os resultados do seu trabalho não são imediatamente visíveis. A comunidade científica leva algum tempo para se familiarizar, por exemplo, com um novo artigo. Um novo algoritmo não encontra aplicação imediata. 

MichaelNão é nada óbvio se um artigo será influente ou não. Acho que seria interessante realizar um estudo de artigos premiados em conferências. Ou seja, analisar os artigos que os membros dos comitês de programa da época consideraram os melhores. Deveríamos tentar calcular, com base no número de citações e no impacto comercial, o quão influentes esses artigos realmente foram 10, 20, 25 anos depois. Duvido que haja uma forte correlação entre esses dois parâmetros. Não será zero, mas provavelmente será significativamente mais fraca do que gostaríamos. Muitas ideias permanecem sem reconhecimento por muito tempo antes de ganharem força. Por exemplo, considere a memória transacional. Mais de 10 anos se passaram desde a publicação do artigo original até que as pessoas realmente começassem a construir máquinas com ela. E 20 anos se passaram antes que essa memória aparecesse em produtos comerciais. Por muito tempo, ninguém prestou atenção ao artigo, e então o número de citações aumentou drasticamente. Seria difícil prever isso com antecedência. Por outro lado, às vezes as ideias encontram implementação imediata. Há alguns anos, fui coautor de um artigo com Joe Izraelevitz para a DISC, que propunha uma nova definição formal de correção para estruturas de dados persistentes que pudessem ser usadas mesmo após a falha do computador que as executava. Gostei do artigo desde o início, mas ele acabou sendo muito mais popular do que eu esperava. Vários grupos diferentes o adotaram e, eventualmente, ele se tornou a definição padrão de estruturas de dados persistentes. O que certamente é ótimo.

VladimirVocê utiliza alguma técnica de avaliação? Você chega a avaliar seus artigos ou seus alunos? Em termos de saber se a pessoa a quem você deu aula está no caminho certo?

MichaelComo todos os outros, estou mais focado no que estou trabalhando no momento. Como todos os outros, ocasionalmente consulto o Google Acadêmico para ver se meus artigos anteriores são citados, mas isso é mais por curiosidade. Estou imerso principalmente no que meus alunos estão fazendo agora. Quanto à avaliação do trabalho atual, é em parte uma questão de estética — o que é elegante e o que não é. E no dia a dia, perguntas em aberto desempenham um papel importante. Por exemplo, um aluno pode me apresentar um gráfico com alguns resultados, e tentamos descobrir por que o gráfico está se comportando de maneira estranha. Em geral, em nosso trabalho, estamos constantemente tentando descobrir coisas que ainda não entendemos. 

Memória transacional

VitaliTalvez devêssemos falar um pouco sobre memória transacional?

MichaelAcho que vale a pena dizer pelo menos um pouco, porque me dediquei muito a isso. É o tema sobre o qual mais publiquei. Mas, ao mesmo tempo, por mais estranho que pareça, sempre fui bastante cético em relação à memória transacional. Na minha opinião, Artigo de Herlihy e Moss O artigo de M. Herlihy e J.E.B. Moss foi publicado antes de seu tempo. No início da década de 1990, eles propuseram que a memória transacional poderia ajudar programadores talentosos que trabalhavam com estruturas de dados multithread, de modo que essas estruturas pudessem ser usadas como bibliotecas por programadores comuns. Em outras palavras, seria uma dádiva para Doug Lees, que trabalhava em seu JSR 166. Mas a memória transacional não foi concebida para facilitar a programação multithread. E, no entanto, foi exatamente assim que ela foi percebida no início dos anos 2000, quando ganhou popularidade. Ela foi apresentada como uma forma de resolver o problema da programação paralela. Essa abordagem sempre me pareceu sem esperança. A memória transacional só poderia simplificar a escrita de estruturas de dados paralelas. E isso, na minha opinião, foi o que ela conseguiu. 

Sobre a complexidade de escrever código multithread.

AlexeyMuito interessante. Parece haver uma certa barreira entre programadores comuns e aqueles que sabem escrever código multithread. No ano passado, conversei diversas vezes com pessoas que estavam implementando algum framework algorítmico. Por exemplo, com Martin Thompson, assim como com programadores que trabalham em bibliotecas multithread. (Nota do editor: Martin Thompson é um desenvolvedor muito conhecido; ele escreveu disruptor и AeronE ele também tem reportar em nossa conferência Joker 2015, gravação em vídeo Disponível no YouTubeEle é o mesmo. aberto esta conferência, gravação da palestra principal (Também acessível). Segundo eles, o principal desafio é tornar os algoritmos rápidos e fáceis de usar. Por isso, estão tentando superar essa barreira e atrair o máximo de pessoas possível para essa área. O que você acha disso?

MichaelEste é o principal problema da multithreading: como alcançar alto desempenho sem aumentar a complexidade do sistema. 

AlexeyPorque, ao tentar evitar a complexidade, o algoritmo se torna menos geral.

MichaelA chave aqui são as abstrações bem projetadas. Acho que essa é a chave para os sistemas de computação como um todo. Butler Lampson gosta de usar esse termo e nos chama de "mercadores de abstrações". Tecnologias simples não existem hoje. Os processadores que usamos contêm 10 bilhões de transistores — simplicidade está fora de questão. Ao mesmo tempo, a ISA (Interface de Software de Algoritmo) é significativamente mais simples que o processador, já que trabalhamos muito para garantir alto desempenho e uma interface relativamente simples para ele. Mas mesmo assim, nem tudo são flores. O mesmo problema existe com os aceleradores que estão surgindo no mercado. Surgem perguntas: como criar a interface certa para a GPU, o mecanismo de criptografia, a compressão, o mecanismo de transcodificação, o mecanismo de álgebra linear ou até mesmo um FPGA mais flexível? Como criar uma interface que garanta facilidade de uso e oculte a complexidade? Não para eliminá-la, mas sim para escondê-la do programador médio. 

AlexeyEntendo que ainda temos uma barreira para a compreensão de abstrações. Considere o modelo de memória; em nosso estágio de desenvolvimento científico e tecnológico, é uma das abstrações mais importantes. Ele divide todos os programadores em dois grupos: a maioria — aqueles que não o entendem — e a minoria — aqueles que o entendem, ou pensam que entendem. 

MichaelÉ uma boa pergunta: será que algum de nós realmente entende o modelo de memória?

VitaliEspecialmente em C++.

MichaelConverse com Hans Boehm algum dia. Ele é uma das pessoas mais inteligentes que conheço, um dos maiores especialistas em modelos de memória. Ele mesmo dirá que não entende muita coisa sobre o assunto. Mas, voltando à questão das abstrações, acredito que a ideia mais importante na área de modelos de memória nos últimos 30 anos foi expressa por na dissertação de Sarita Adwe(Nota do editor: uma lista completa das publicações está disponível) по ссылке).

AlexeyMinha pergunta é: essa barreira decorre da própria natureza do conceito? 

MichaelNão. Sarita concluiu que, com a abordagem correta, é possível ocultar toda a complexidade, alcançar alto desempenho e fornecer ao programador uma API simples. E, seguindo essa API, é possível obter consistência sequencial. Acredito que esse seja o modelo correto. Escreva código sem condições de corrida e você obterá consistência sequencial. Claro que, para reduzir a probabilidade de condições de corrida, você precisa de ferramentas especializadas, mas isso é outra questão. 

VladimirHouve alguma situação na sua carreira em que um problema que parecia resolvido de repente se transformou em um desastre, ou se revelou insolúvel? Por exemplo, em teoria, é possível fatorar qualquer número ou determinar se um número é primo. Mas, na prática, isso pode ser difícil; com o hardware atual, é difícil fatorar números. Algo parecido já aconteceu com você?

MichaelNão consigo pensar em nada assim de imediato. Houve momentos em que pensei que não havia mais nada a fazer em determinada área, e então algo novo e interessante aconteceu. Por exemplo, achei que o campo das filas ilimitadas já havia atingido a maturidade. Depois de algumas melhorias na fila MNS, nada de especial aconteceu. E então Morrison (Adam Morrison) e Afek (Yehuda Afek) inventaram... fila LCRQFicou claro que uma fila multithread ilimitada era possível, com apenas a instrução de busca e incremento no caminho crítico na maior parte do tempo. E isso permitiu uma melhoria de desempenho de uma ordem de magnitude. Não que já não soubéssemos que a busca e o incremento eram um recurso muito útil. Eric Freudenthal escreveu sobre isso em seu artigo sobre o Ultracomputador com Allan Gottlieb no final da década de 1980, mas aquilo se referia a filas limitadas. Morrison e Afek conseguiram usar a busca e o incremento em uma fila ilimitada.

Novas arquiteturas: a memória transacional está perto da vitória?

VladimirVocê acompanha novas soluções arquitetônicas que possam ser úteis para algoritmos? 

MichaelClaro, há muitas coisas que eu gostaria de ver implementadas. 

VladimirE quais, por exemplo?

MichaelPrimeiramente, algumas extensões simples para nossa memória transacional em nível de hardware nos processadores Intel e IBM. Em particular, gostaria de tornar as operações de carga e armazenamento não transacionais imediatamente disponíveis dentro das transações. Elas levam imediatamente a loops na sequência de eventos anteriores, então podem ser complicadas. Mas se mantivermos camadas de abstração, há muitas coisas interessantes que podem ser feitas fora de uma transação enquanto ela está em andamento. Não sei o quão difícil seria implementar isso, mas seria muito útil. 

Outra funcionalidade útil é o carregamento de cache a partir de memória remota. Acredito que isso será implementado mais cedo ou mais tarde. Essa tecnologia permitirá a criação de sistemas com memória desagregada. Será possível armazenar, digamos, 100 terabytes de memória não volátil em um rack, e o sistema operacional decidirá dinamicamente quais seções dessa memória devem ser mapeadas para o espaço de endereçamento físico dos processadores. Isso seria extremamente útil para computação em nuvem, pois permitiria que grandes quantidades de memória fossem alocadas às tarefas que as exigem. Acho que alguém acabará implementando isso.

VitaliPara concluir a discussão sobre memória transacional, tenho mais uma pergunta relacionada. A memória transacional acabará por substituir as estruturas de dados multithread padrão?

MichaelNão. Transações são um mecanismo especulativo. No nível de programação, elas são bloqueios atômicos, mas internamente, são especulações. Esse tipo de previsão só funciona se a maioria das suposições estiver correta. É por isso que a memória transacional funciona bem quando as threads quase não interagem entre si e você só precisa garantir que não haja interação. Mas se uma mensagem é iniciada entre threads, as transações são de pouca utilidade. Deixe-me esclarecer: estamos falando do caso em que as transações envolvem toda a operação atômica. Elas ainda podem ser usadas com sucesso como blocos de construção para estruturas de dados multithread. Por exemplo, se você precisa de um CAS de três palavras e precisa executar três pequenas operações em multithread no meio de um algoritmo verdadeiramente multithread que funciona com vinte threads simultaneamente. Resumindo, as transações podem ser úteis, mas não eliminam a necessidade de projetar adequadamente estruturas de dados multithread. 

Memória não volátil, Optane DIMM, dispositivos ultrarrápidos.

VitaliPor fim, gostaria de abordar seu tema de pesquisa atual: memória não volátil. O que podemos esperar nessa área em um futuro próximo? Você tem conhecimento de alguma implementação eficiente já existente? 

MichaelNão sou especialista em hardware, só sei o que leio nas notícias e o que meus colegas me dizem. Todo mundo já ouviu falar que a Intel está vendendo DIMM OptaneAs memórias não voláteis têm latências de leitura cerca de 3 vezes maiores e latências de gravação 10 vezes maiores que as da RAM dinâmica. Em breve, estarão disponíveis em capacidades muito grandes. É curioso pensar que você poderá ter um laptop com vários terabytes de RAM endereçável por byte. É bem possível que, daqui a 10 anos, decidamos usar essa nova tecnologia da mesma forma que usamos a DRAM — simplesmente adicionando mais capacidade. Mas a não volatilidade abre possibilidades totalmente novas. Podemos mudar fundamentalmente a pilha de armazenamento para que não haja separação entre a memória de trabalho endereçável por byte e a memória persistente estruturada em blocos. Isso significa que não precisamos serializar tudo o que precisamos em arquivos estruturados em blocos — transferindo os dados de uma execução de programa para a próxima. Isso tem muitas implicações importantes para sistemas operacionais, ambientes de execução e armazenamento de dados distribuído. É uma área muito interessante para se trabalhar. Pessoalmente, é difícil para mim prever aonde tudo isso vai levar, mas os problemas aqui são extremamente interessantes. Podem ocorrer mudanças revolucionárias aqui, e elas decorrem naturalmente do trabalho em multithreading, visto que a recuperação de falhas é um processo "multithread" que ocorre paralelamente à operação normal do sistema. 

O segundo tópico principal em que estou trabalhando atualmente é o gerenciamento de dispositivos ultrarrápidos e o acesso seguro a eles a partir do espaço do usuário com controle de políticas em nível de sistema. Nos últimos anos, tem havido uma tendência de mover o acesso a dispositivos para o espaço do usuário. Isso ocorre porque a pilha TCP/IP do kernel não consegue funcionar sobre uma interface de rede que exige um novo pacote a cada 5 microssegundos; simplesmente não acompanha o ritmo. Portanto, os fornecedores oferecem acesso direto aos dispositivos. No entanto, isso significa que o sistema operacional perde o controle sobre o processo e não pode garantir o acesso adequado ao dispositivo para aplicativos concorrentes. Nosso grupo de pesquisa acredita que essa desvantagem pode ser evitada. Apresentaremos um artigo sobre isso na USENIX ATC deste mês. Está relacionado ao trabalho em persistência, já que a memória persistente durável e endereçável por byte é essencialmente um dispositivo com E/S ultrarrápida que precisa ser acessado no espaço do usuário. Esses estudos possibilitam novas abordagens para microkernels, exokernels e outras tentativas tradicionais de mover com segurança a funcionalidade do kernel do sistema operacional para o espaço do usuário. 

VladimirA memória endereçável por byte é ótima, mas tem um limite físico: a velocidade da luz. Isso significa que haverá inevitavelmente um atraso ao interagir com o dispositivo. 

MichaelExatamente certo.

VladimirHaverá capacidade suficiente para lidar com as novas demandas?

MichaelEssa é uma ótima pergunta, mas é difícil para mim respondê-la. A ideia de processamento em memória existe há bastante tempo; é muito interessante, mas também muito complexa. Eu não trabalhei nessa área, mas seria ótimo se algumas descobertas fossem feitas. Receio não ter mais nada a acrescentar. 

VladimirHá outro problema. Novas quantidades de RAM, significativamente maiores, serão impossíveis de acomodar na CPU. Portanto, devido a limitações físicas, essa RAM precisa ser isolada. 

MichaelAqui, tudo depende do número de defeitos na produção de circuitos integrados. Se fosse possível criar wafers semicondutores totalmente isentos de defeitos, um microchip completo poderia ser fabricado a partir deles. Mas, no momento, não conseguimos produzir microchips maiores que selos postais. 

VladimirMas ainda estamos falando de tamanhos enormes, centímetros. Isso inevitavelmente afeta a latência. 

MichaelSim. Não há nada que você possa fazer em relação à velocidade da luz. 

Vladimir: Infelizmente. 

A próxima grande tendência. Estruturas de dados duais. Hydra.

VitaliPelo que entendi, você adota novas tendências com muita facilidade. Foi um dos pioneiros no trabalho com memória transacional e outro com memória não volátil. Qual você acha que será a próxima grande tendência? Ou será que é segredo?

MichaelSinceramente, não sei. Espero conseguir identificar algo novo quando surgir. Não tive a sorte de inventar sozinho nenhum campo novo, mas tive a sorte de sair na frente em campos criados por outros. Espero poder continuar fazendo isso no futuro.

AlexeyA última pergunta desta entrevista é sobre sua apresentação na Hydra e sua aula na faculdade. Se entendi corretamente, sua palestra na faculdade será sobre algoritmos sem bloqueio e sua palestra na conferência será sobre estruturas de dados duais. Você poderia falar um pouco sobre essas palestras?

MichaelJá abordamos alguns desses tópicos nesta entrevista. Trata-se de um trabalho que desenvolvi com meu aluno Bill Scherer. Ele escreveu sua dissertação sobre o assunto, e Doug Lee também contribuiu. O projeto acabou se tornando parte das filas síncronas multithread da biblioteca Java. Suponha que você esteja lendo e escrevendo em uma estrutura de dados sem bloqueio, o que significa que cada operação tem um número limitado de instruções no caminho crítico. Se você tentar recuperar dados de um contêiner vazio ou tentar recuperar dados específicos que não estão nesse contêiner, você será imediatamente informado de que não é possível. Mas esse comportamento pode ser inaceitável se uma thread realmente precisar desses dados. A primeira coisa que vem à mente é criar um loop que verifica constantemente se os dados necessários chegaram. Mas isso cria interferência para todos os outros. Além disso, com essa abordagem, você pode esperar 10 minutos e, então, alguma outra thread pode chegar e obter os dados necessários acidentalmente primeiro. As estruturas de dados duais ainda não possuem bloqueios, mas permitem a espera adequada entre threads. O termo "dual" significa que a estrutura contém dados ou solicitações de dados — vamos chamá-las de anti-dados. Assim, se você tentar recuperar algo de um contêiner vazio, uma solicitação será colocada no contêiner em vez disso. Agora, uma thread pode esperar por uma solicitação sem interromper nenhuma outra. Além disso, a estrutura de dados prioriza as solicitações, de modo que, ao recebê-las, as repassa para a thread apropriada. Isso resulta em um mecanismo sem bloqueio que possui uma especificação formal e bom desempenho na prática. 

AlexeyQuais são as suas expectativas para essa estrutura de dados? Ela melhorará o desempenho em todos os casos típicos ou é mais adequada para situações específicas? 

MichaelÉ útil quando, em primeiro lugar, é necessário um contêiner sem bloqueio e, em segundo lugar, é preciso esperar para recuperar dados do contêiner que ainda não estão presentes. Pelo que sei, nossa estrutura oferece um comportamento ideal quando essas duas condições são atendidas. Portanto, recomendo seu uso nesses casos. A principal vantagem das estruturas de dados sem bloqueio é evitar problemas de desempenho. E a espera é muito importante em muitos algoritmos quando os dados são transferidos de uma thread para outra.

VitaliSó para esclarecer: vocês vão abordar o mesmo assunto tanto na escola quanto na conferência?

MichaelNa escola Eu falarei Esta aula se concentrará em estruturas de dados multithread em geral, com uma introdução aos princípios básicos. Pressuponho que o público saiba o que são threads e esteja familiarizado com locks. Partindo dessa base, discutirei estruturas de dados sem locks. Apresentarei uma visão geral das questões mais importantes nessa área, abordando tópicos como gerenciamento de memória. Não creio que haverá nada mais complexo do que a fila MS.

AlexeyVocê planeja abordar estruturas de dados duais no final do seu curso na escola?

MichaelVou mencioná-los, mas não me deterei muito neles. Darei uma palestra sobre eles no Hydra. A palestra abordará o projeto que eventualmente se tornou parte do Java, bem como meu trabalho com Joe Israelevich na criação de uma variante de fila dupla da LCRQ e a criação de uma construção quase universal para estruturas de dados duais.

AlexeyEntão, a aula teórica pode ser recomendada para iniciantes, e a aula sobre estruturas de dados duais no Hydra para pessoas com alguma experiência?

MichaelCorrijam-me se eu estiver errado, mas o público do Hydra será bastante diversificado, incluindo muitos especialistas em Java e pessoas que não trabalham especificamente com programação multithread. 

VitaliSim, isso é verdade.

AlexeyPelo menos, é o que esperamos.

MichaelNeste caso, vou enfrentar o mesmo problema com o qual começamos esta entrevista: como fazer uma reportagem que seja suficientemente rica em detalhes técnicos e, ao mesmo tempo, acessível a todos os ouvintes.

VitaliVocê apresentará sua apresentação como se fosse uma palestra? Ou seja, você interagirá com o público e se adaptará à situação?

MichaelReceio que isso não funcione, pois a apresentação terá slides. Os slides são importantes quando o público fala inicialmente línguas diferentes. Muitos terão dificuldade em me entender em inglês, especialmente se eu falar muito rápido. Escolhi esses tópicos especificamente porque Peter Kuznetsov Ele me pediu para falar sobre estruturas de dados sem bloqueio na Escola SPTDC; depois, precisaram de uma palestra para a conferência do Grupo de Usuários Java, e eu queria escolher algo que fosse de interesse específico para programadores Java. A maneira mais fácil foi falar sobre os recursos da biblioteca Java nos quais eu havia trabalhado de alguma forma. 

AlexeyPartimos do pressuposto de que o público da Hydra já conhece algo sobre programação sem bloqueios e talvez tenha alguma experiência nessa área. Mas isso é apenas uma suposição; a situação ficará mais clara durante a própria conferência. De qualquer forma, agradecemos o seu tempo. Tenho certeza de que nossos leitores acharão a entrevista muito interessante. Muito obrigado!

VitaliObrigado. 

MichaelTerei o maior prazer em encontrá-lo(a) em São Petersburgo. 

AlexeyNós também temos uma cidade linda. Você já esteve aqui?

MichaelNão, eu nunca nem estive na Rússia. Mas São Petersburgo sempre esteve na minha lista de lugares que eu nunca visitei, mas que realmente quero conhecer, então fiquei muito feliz em receber o convite. 

AlexeyAliás, ofereceremos um programa de visitas guiadas para os palestrantes. Muito obrigado pela entrevista e tenha um bom dia!

Você poderá continuar a conversa com Michael na conferência Hydra 2019, que será realizada nos dias 11 e 12 de julho de 2019, em São Petersburgo. Ele apresentará um relatório. Estruturas de dados duais. Os ingressos podem ser adquiridos no site oficial.

Fonte: habr.com

Adicionar um comentário