Concorrência e Paralelismo (Parte 1) | Entendendo Back-End para Iniciantes (Parte 3)
HTML-код
- Опубликовано: 10 фев 2025
- De volta à série Começando aos 40, estamos já no oitavo episódio! E ela é a Parte 3 do tema de Back-end, mas desta vez vou precisar me alongar mais explicando conceitos antes de retornar às ferramentas.
Concorrência e Paralelismo é algo que todo iniciante hoje em dia já esbarra logo cedo. Nós vivemos num mundo que é naturalmente paralelo e concorrente. Já estamos no ponto onde nos definimos como "multi-tarefas".
Mesmo assim, ainda existe mais superstição e "misticismo" do que real noção do que esse conceito realmente significa. E ao contrário do que possa parecer, na realidade o básico não é tão complicado assim.
Preste bastante atenção na explicação de hoje, porque isso vai ser base pra todo o resto que vou explicar até o fim desta série.
Se você já conhece os detalhes do que estou explicando, obviamente pra caber num vídeo para iniciantes, estou simplificando BASTANTE muitos conceitos pra ilustrar. Infelizmente não cabe tudo num episódio só, mas não deixem de comentar se achar que faltou alguma coisa muito importante!
Links:
The Linux Scheduler: a Decade of Wasted Cores (blog.acolyer.o...)
The C10K problem (www.kegel.com/c...)
Transcript: www.akitaonrai...
Audio: anchor.fm/dash...
O MELHOR CONTEÚDO DE COMPUTAÇÃO BRAZUCA NO RUclips. OBRIGADO
Eu concordo, mas só Brazuca não, eu pessoalmente nunca encontrei alguém que explicasse do jeito que o Akita faz nem em Ingles nem em Italiano, ficaria muito feliz se alguém pudesse me indicar algum canal que foi feito desde o começo pra funcionar como uma curadoria de conteúdo, organizado pra ser assistido desde o começo até o final em ordem, referenciando os conteúdos anteriores e cobrindo uma base bem respeitável de conhecimento gerais necessários de cada assunto.
To assistindo esse vídeo 4 anos depois da criação dele e é 100% atual, isso é fantástico.
Resumiu minha matéria de SO da graduação em menos de 1 horas. Akita, não tenho perdido nenhum dos seus vídeos hahaha, fica aqui meus agradecimentos pela qualidade do conteúdo do seu canal. Abraço. vlw.
Tô é ficando desesperado com tanta informação, haha!
22:25 fork... copy on write
24:18 pthreads... bugs... 1 pra 1, linux 2.6
25:58 scheduling... macOS, multimídia
29:35 c10k... async events
33:30 apache
35:45 nginx
36:40 event loop, reactor pattern
39:57 concorrência x paralelismo
Vou confessar algo. Sou público alvo desta série. 42 anos e iniciando em progamação. Agora a confissão: tenho de assistir cada vídeo da série mais de uma vez. Não dou conta de assimilar toda esta informação. Ufa falei. Com isto não penso estar fazendo uma crítica direta. Considero que a série é excelente e tem me ajudado muito. Também não saberia dizer como simplificar. Gosto do percursso histórico e das metáforas que os acompanham. Até me identifico muitas vezes. Também eu usei monitores em tons de verde e o Msdos. Também fiquei surpreso com a interface gráfica do windows e a possibilidade de navegar entre as pastas com o cursor. Me encantei com a chegada do open source e a revolução extraordinária do universo mobile. Enfim, dou força ao #akitando. Vamos em frente. Ainda que, no meu caso ao menos, isso signifique retornar aos vídeos antetiores uma, duas, ou sei lá quantas vezes :-)
Não é nenhuma vergonha isso não!! Muito pior seria assistir tudo sem ter entendido e nunca voltar pra ver os pontos de dúvida. Valeu!
Fabio Akita, mt obrigado de verdade, eu sou um rapaz de 25 anos com metade de um curso de SI em uma federal do nordeste que por acaso do destino arranjei um trabalho e fiquei encarregado de lidar com tarefas como scraping de dados das plataformas da empresa como (salesforce, Zendesk, etc) e o desenvolvimento de algumas a
APIS the conexão como sharepoint, Google drive para armazenamento e manipulação dos arquivos dos scraps pos processados, tudo isso em nuvem e não tem ninguém para me ensinar nesta empresa.
Gosto bastante de programar e graças aos seus vídeos estou sabendo me direcionar para fazer algo que minimamente funcione.
Muito obrigado.
Espero aprender muito mais com você 🎉
Fui assistindo, relembrando as aulas de Sistemas Operacionais da faculdade, e finalmente tapando buracos de conhecimento que tinham ficarado de lá pra cá. Bom trabalho, Fábio!
A gente que é mais nova usa o computador hoje de uma forma tão fluida e nem imagina o tanto de coisa que já aconteceu para termos isso hoje. Parabéns, Akita!
Um curso de sistemas operacionais em 42 minutos, muito bom parabéns mesmo. Ministro aula de sistemas operacionais e não chego a detalhes que você comentou, muito por que as vezes os estudantes não veem a importância disso para ser um bom profissional. Parabéns por sua série e gostaria que não parasse de trazer videos muito importantes como esse.
Fico muito contente quando um real profissional do ensino manda feedback. Obrigadão! 😊
Adicionando um pouco ao tópico: se você tem paralelismo, é imposto que você tem concorrência, mas nem sempre quando você tem concorrência você tem paralelismo, como o Fabio Akita falou sobre o time slicing. Assincronia também impõe concorrência.
Assincronia é basicamente uma situação onde uma instrução possui tasks que podem iniciar dela, sem precisar ficarem bloqueadas por outras(você pode forçar um bloqueio, com o conceito de await). Você pode obter assincronia tanto na forma single thread(com event/message loops, por exemplo) quanto na forma de multi threading. De uma forma geral, existem 2 tipos de situações bloqueantes: relacionados a I/O, e CPU. Problemas de I/O sempre foram pertinentes, como o Fabio Akita falou em 30:54, de nada adianta ter um processador com concorrência se o barramento de I/O vira um gargalo.
Por ultimamente a maioria dos bloqueios no mundo de desenvolvimento web/sass serem ocasionados por I/O, o javascript+web api/node.js trouxeram mais a tona o conceito de assincronia, através do I/O assíncrono, usando event loop. Agora assíncronia não é estritamente relacionado única e exclusivamente a I/O. Existem tasks que podem ser bastante intensivos pra CPU: pensem num processamento da ordenação de uma lista gigantesca de números. Um exemplo de algoritmo para resolver isso é o merge sort, que aplica o conceito de "dividir e conquistar" usando multi threading e paralelismo quando disponível. Nesse esquema uma programação I/O assíncrona single threaded de nada adianta para ajudar no processamento, os callbacks com os cálculos serão executados de forma síncrona na call stack por ser justamente single thread. Esse tipo de bloqueio mais limitado a CPU é mais presente em machine learning, data science, inteligência artificial e etc.
Portanto, cada macaco no seu galho.
O java nativamente por exemplo pode fazer assincronia somente através da utilização de threads, pois a jvm não possui por exemplo um event loop(existem libs como vertx.io e spring webflux que adicionam essa possibilidade). O node.js faz assincronia de I/O em single thread utilizando o event loop + API do C++ + fila de callback, pra trabalhos mais CPU bound o node está em fase experimental desde a versão 10.5 no uso de multi threading. O C# além de threads também pode através do async/await(compilador + state machine).
Estou vendo o vídeo pela terceira vez, anotando cada detalhe para poder pesquisar mais afundo. Eu sinceramente estou maravilhado com esse conteúdo raro! Fiquei também impressionado sobre Reactor Pattern já possui tanto tempo de amadurecimento. Certeza que depois desses vídeos serei um programador melhor, obrigado por despertar a curiosidade com um foco plausivel, abrir meus olhos e enxergar um mundo que não é demonstrado devidamente em faculdades quanto menos em mercado.
Fábio Akita, parabéns por compartilhar seu conhecimento e se dedicar tanto pelo canal e conteúdo!
Essa comparação entre Chef+Garçon com o epoll foi a mais pedagógica que já vi!
Achei justa a fala sobre o NGINX, mas fiquei com vontade de provocar sobre o Varnish, que também tem seu lugar ao sol quando se trata de entrega de conteúdos estáticos.
Fábio já pensou em disponibilizar seus vídeos em formato podcast? Por exemplo no Spotify.
Digo isso por que seria muito bom poder ouvir o conteúdo desse vídeo (que é super longo) no metrô por exemplo. Esse video foi muito útil pra mim pois estou estudando sistemas operacionais pra poder entender paralelismo descentemente. Ver todo conteúdo resumido de forma simples me ajudou a entender e montar uma road lógica do que estudar pra masterizar paralelismo. Muito bom!
Tamer, uma solução para você seria baixar o RUclips Go, fazer o download desse video lá e escutar no metro sem consumir dados. :o)
Sonho realizado, busca Akitando no spotify
Solicitação atendida com sucesso hahahaha
@ Sério? Aí sim
@@miguellopes9177 sim, ele posta o áudio dos vídeos no spotify
Esse vídeo é absurdo. Que isso. Qualidade pura.
Esse canal é um tesouro para uma pessoa curiosa como em querer entender mais afundo as coisas, sou assim a ponto de no dia a dia eu ter que me segurar em não pesquisar mais afundo algo que usei e não apenas entender o necessário para poder aplicar e resolver algum problema, muito obrigado akita por ter criado esse canal.
Melhor conteúdo q já encontrei falando sobre multi-processo e multi-thread.
Sempre ensinei as pessoas das minhas equipes nesse tópico quando se aprofundavam em C, mas realmente me faltava essa noção das diferenças de custo e problemas entre os sistemas operacionais.
Uma coisa que é muito importante ressaltar é que existia um ponto negativo no uso de threads no que tange o uso de memória. Em um sistema compilado em 32 bits, cada processo só podia alocar no máximo 4 GB de memória. Se vc utilizasse multi-thread, o limite de 4 GB valia para todas as threads.
Dando fork, cada processo tinha seu próprio espaço de memória e podia alocar até 4 GB, o que viabilizava trabalhar com um volume maior de dados em memória em cada processo (e podia fazer com que ele finalizasse antes de atingir o limite, caso houvesse um memory leak).
É incrível como esses vídeos conseguem me fazer ficar pensando sobre por dias. Obrigado, Akita.
Lembrando aqui das minhas aulas de Computação Paralela. E meu TCC será nesse tema, é muito interessante
Relembrando muita coisa com seus vídeos.
LLVM, scheduler, etc...
Tinha coisas da história que nem lembrava mais...
Assisti três vídeos que eu estava atrasado, agora estou em dia no canal.
Parabéns pelas aulas!
FOGOS!!! NA VIDA REAL ACHEI UM ÍDOLO!!! PARABÉNS!!!
Caramba Fábio, sou estudante de ciências da computação e já acompanho a um bom tempos seus vídeos. Por algum motivo acabei vendo este somente hoje e tenho que tirar o chapéu 10x pela didática e objetividade que você tratou o tema. Da pra ver que tem um carinho imenso na elaboração do conteúdo. Quem me dera ter visto esse vídeo quando estava estudando SO1 xD.
Isso foi uma aula de ciências da Computação
Muito obrigado professor
Akita, ja assisti 2 vezes, nesta segunda tomando nota, criando infograficos, fluxos e etc e provavelmente tera uma 3, talvez agora estou conseguindo criar a imagem na cabeça de como isso funciona, nada na pratica ainda mas ja ajuda muitoo!!!
Não sei exatamente sua motivação de criar este conteudo, mas fica aqui sinceramente o meu MUITO OBRIGADO!!!
Muito, mas muito bom. Tô maratonando seus vídeos aqui. Achei que já sabia uns 2%, depois do terceiro vídeo teu vi que devo saber uns 0,02% kkkk. Muito bom aprender dessa forma vindo de gente que realmente sabe o que está falando e em português ainda. Valeu. Abraço.
Cara, tu me ajudou a entender um problema que ninguém conseguia me explicar até hoje de maneira simples:
Por que o NodeJS consegue atender milhões de conexões possuindo apenas uma thread e o Java não, sendo multi thread.
O multi thread fazia todo o sentido pois em processadores multi core/ multi thread, todos os recursos de hardware seriam utilizados e as threads seriam processadas em paralelo. Mas utilizando threads bloqueantes, há gastos enormes com a troca de contexto (Tanto de processamento quanto de memória) e isso limita o número de conexões que uma aplicação Java baseada em Servelets pode atender. O Node pode atender muito mais pois esses recursos não ficam bloqueados, eles ficam pendentes de eventos do S.O.
Então isso significa que no Java há paralelismo real e mais rápido em processar um certo número de conexões e que o Node mais lento (Pois não há paralelismo real, já que o Event Loop é single thread) mas consegue atender mais conexões concorrentes. Cero?
Em resumo, não há nada que o node.js faça que Java, ou C, out C++, out Python também não consiga fazer. Por isso muitos componentes de servidor importantes são feitos em Java ou C (como um NGINX ou Cassandra). A diferença mais é que Node é mais "facinho" de começar. Só isso. Mas ele não chega até onde outras linguagens mais decentes chegam pelas várias limitações que ele tem (falta de thread nativa sendo só uma delas)
Uma coisa é vc pesquisar o assunto fragmentadamente. Outra é vc passar por todos os assuntos e ter uma ideia geral e relativizada! Muito bom!
Terceira vez que assisto este video e sempre tem algo que não havia entendi antes e agora consigo pegar melhor.
Muito legal sua didática e otimas analogias. Continue sempre fazendo conteúdo legais assim.
No minuto 30:11 você disse: "um servidor do WhatsApp hoje serve mais de 2 milhões de conexões simultaneas", mas os protocolos tcp ou udp so podem endereçar 2^16=65535 que seria o maximo de conexões que poderia ficar estabelecidas ao mesmo tempo.
Um maestro tecnológico. Tô curtindo muito o canal amigo. Gratidão 🙏🏼 Maratonando tudo Aki.
Eu estava estudando a infra estrutura do Telegram e me deparei com esse event looper e uso de epoll do linux para conseguir responder a quantidade de requisicoes que eles recebiam.
Isso me ajudou a criar meu aplicativo utilizando esta implementacao no codigo nativo JNI para controle de notificacoes push e ping pong de servidor cliente com sincronizacoes off-line first.. foi a unica forma que consegui resolver
Parabens pelo video, conteudo muuito complexo visto de uma forma clara e sem paixão voce é demais
Caraca...uma palestra a Jato...cada vídeo daria uma palestra de 2 horas ou mais com certeza.... parabéns ao Akita pela eficiência em agrupar tanta informação de forma sequencial, seguindo a linha de raciocínio...TOP
Mais um espetáculo de explicação. Akita o professor mais completo do universo, nunca vi ninguem igual.
Eu fiz um trabalho da faculdade esses dias que era sobre sistemas operacionais , mais especificamente sobre threads , programação multithreads , estados de threads e por ai vai ... e essa sua playlist de entendendo back-end ajudou muito cara . Vlw kkk
Que video sensacional. Há alguns meses virei entusiasta em usar threads em aplicações Java. Acho uma tecnologia incrível e facilita mto o serviço em cargas pesadas de trabalho. Ótima explicação!
As melhores explicações da área de programação no RUclips. Por favor não pare!
Esse assunto é cabeludo mesmo, mas depois de ver o vídeo 2x e anotar tudo, até um noob como eu consegui entender :D Vlw Akita!
Muito massa, me lembrou do capítulo do livro de Delphi do Cantu que falava de programação em thread... Muito interessante e o teste era fazer contadores em paralelo e você via a diferença de velocidade em função do escopo de variáveis e as diferenças das várias estratégias de programação paralela... Sugestão: faça um vídeo detalhando o Minix do Tanembaum... Abraços!
Akita é monstro demais!! Conteúdo extremamente complexo sendo mostrado com analogias simples! Show!
Curioso ver tudo isso na faculdade mas, pela falta de experiência naquela época, não fazer tanto sentido como agora. Sempre bom revisitar as bases.
Muito obrigado pelo conteúdo!! 👏🏼👏🏼👏🏼👏🏼
Mano do ce'u. Eu assistindo em 2x tive que diminuir para 1.5x para entender tudo. Parabens Fabio. Muito bom o conteudo.
Privilégio poder consumir esse conteúdo de altíssima qualidade. Muito obrigado mesmo!
Melhor que minhas aulas de OS na faculdade muitooo bom.
akita SEM PALAVRAS estes teus videos, cara eu leio pra caralho e NÃO SABIA deste BO das threads no linux até 2006, lembro que voltei a usar linux ali por 2008 , alias TENTEI e incrivel saber que hoje ele é MUITO MELHOR e aqui vemos um porque e ai nestes teus videos estou vendo algumas explicações, surreal, foda mesmo, obrigado.
Como meu pai sempre falou, a gente está sempre aprendendo algo, incrivel mesmo.
Incrivel como quanto mais estudamos, mais vemos que pouco sabemos kkkkk, é foda ... vamos que vamos kkkkkk
Há e quando digo que é muito melhor não falo de ser melhor que windows ou macos , e sim que ele melhorou em relação a si mesmo, incrivel.
Fascinante ! Espetacular ! Uma aula Magistral ! Totalmente Esclarecedor !
As ferramentas CAD com que eu trabalho tem vários problemas de performance devido a concorrências e paralelismos.. Essa aula me ajudou a entender um pouco mais as limitações que elas possuem.
Lembrei das minhas aulas da faculdade.... Sempre digo isso para os mais jovens, foquem nos conceitos...
Parabéns! Excelente conteúdo!
Meu professor de sistemas operacionais da faculdade em 2013 certa vez falou:
"Décadas atrás, os recursos de uma máquina era disputado a tapa pelos processos"
Ainda é kkkk especialmente se rodar um tanto de aba do Chrome kkkk
@@Akitando não para o Mac Pro [ o Max foi 6 mil abas do Chrome ] .... se bem que travou também né hehe
@@renanborges9167 6 mil abas na guerra dos chrome de 2019
No momento agora estou nos EUA sem PC notebook só o Note 8 da Samsung Galaxy note agora só assistir ou interagir simples mas em junho estarei com certeza procurando esse gênio humilde porém nunca bobo.
Muito bom assistir esses vídeos do Akita. Recordei me das aulas de sistemas operacionais, onde vi conceitos de região crítica semáforos. Processos e Threads. Problemas do filósofos comendo macarrão. Kkk
Simplesmente incrível 🚀
Vou assistindo "picado".... Fantástico vídeo Akita, obrigado 🙏
AKITA sua didática e muito boa em explicar, e qualidade em gravação
Vc é o cara
Parabéns 👏🏻👏🏻👏🏻👏🏻
Esse cara explica nos minimos detalhes show muito bom mestre tive uma materia sobre SO na faculdade me recordei dela
Bem didático o exemplo da mesa! 👏👏👏
Muito legal! Parabéns pelo trabalho, Akita!
Conteúdo de alta qualidade. Aprendo muito com esse canal.
Muito, muito bom! Obrigado por compartilhar.
apredendo um pouco mais aqui, curtindo bastante essa série, valeu.
Simplesmente o melhor!
Muito obrigado pelo conteúdo.
Sempre vídeos de grande qualidade!.
Ansioso por esse video.
Que aula 👏🏻👏🏻👏🏻
Essa série é uma faculdade , fiz CC e algumas coisas estou revendo mas outras coisas não vi nem na faculdade. Parabéns Akita.
Cara, a sua didática é coisa de outro nível
Muita gente se achando burro por ter que assistir mais de uma vez pra aprender. Porém, isso é exatamente o que você tem que fazer. Pra entender, talvez você precise assistir uma ou duas vezes, mas pra aprender você vai ter que assistir dezenas de vezes. E convenhamos, você não tem nada melhor pra fazer...XD
Que aula meus amigos. Akita é fera demais!
Melhor explicação sobre deadlock que já vi
Adoro esse episódio!
Tera algum video sobre codificacao de caracteres? Acho um tema bem importante tambem. Otimo trabalho.
Tem em inglês. Sobre unicode.
Incrível é a definição mais acertava para essa sua séries vídeos 😁💪💪👊
Excelente canal.
Eu acho que esse cara trabalha no vale do silício kkk, você é foda Akita
Caraaaaaaaa, a cada vídeo eu aprendo mais valeu Akita !
Lembrei do livro Sistemas Operacionais Modernos.
Vlw Akita!
melhor conteúdo br.
Mais um vídeo sensacional da série e como sempre, extremamente detalhado! #AquitaFlix
Parabéns..muito bem explicado
Agora sim a semana começou hahaha
Fantástico, obrigado pela dedicação e pela qualidade dos seus vídeos! AkitaBomDeMais!
Primeira vez que fiquei feliz do meu browser dar pau, já que aconteceu exatamente na parte da explicação sobre os crashes em navegadores.
É a segunda vez que venho nesse vídeo, a diferença é que agora eu tô com bagagem pra entender
Que série fantástica, valeu Akita!
muito bom, parabens, voce conseguiu resumiu umas 300 paginas do tanembaum em apenas um video
34:47 "A terceira opção, como já imaginaram (...)" Ah, claro! rsrs
esse cara é bom
Parabens pelo video,otimo conteudo,muito bem explicado.
Rapaz, anos de faculdade em 40 minutos. Show de bola!
Com tantos exemplos da vida real, utilizados para exemplificar a computação, fica ainda mais claro que estamos imitando a vida real ao escrever sistemas :)
Parabéns Akita, sempre com conteúdo excelente. PS: tive a oportunidade de ver você falando sobre esse assunto em uma panificadora de manhã cedo após um evento :)
Panificadora?? Mds kkkk
obs: Quando se fala de troca de contexto, basicamente está se falando em salvar o contexto dos registradores para uma thread. Basicamente é salvar os valores dos registradores da cpu na estrutura da thread. Isso é o context switch feito por software, mas existe o salvamento feito em tss e esse é o context switch feito por hardware. Por fim, é importante lembrar que quando o sistema operacional possui estrutura de thread e estrutura de processo, então o processador vai lidar com threads. Mas sistemas antigos só tinham estrutura de processo e o contexto dos registradores eram salvos na estrutura de processo mesmo.
Lembro até hj como simular as threads preemptivas no Windows 95/98 usando processador single-cores, era só tocar uma música no media player e abrir o browser em seguida, q era notavel como o scheduler de processos trabalhava, pois para dar conta dos dois processos intercalando de tempos em tempos em cada um dos processos, o som do media player sofria varios cortes a cada segundo enquanto estava carregando o browser.
Quando comprei meu primeiro Mac em 1999, um PowerPC G3 233MHz, ele fazia, com o MacOS 9 algo que parecia bruxaria à época: Ele conseguia gravar audio ao mesmo tempo que executava vários arquivos de audio ao mesmo tempo.
Esse vídeo é TOP!
Muito bom Akita!! Parabéns pelo trabalho consiste e o conciso.
Show !
Opa! Chegando em casa, vou preparar a 🍿 e assistir o Akita.
Excelente!