Concorrência e Paralelismo (Parte 1) | Entendendo Back-End para Iniciantes (Parte 3)
ฝัง
- เผยแพร่เมื่อ 26 ส.ค. 2024
- 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 TH-cam. 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!
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!
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!
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ê 🎉
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!
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!
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! 😊
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 TH-cam 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
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).
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
Isso foi uma aula de ciências da Computação
Muito obrigado professor
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.
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!
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!!!
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)
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).
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.
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
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!
Lembrando aqui das minhas aulas de Computação Paralela. E meu TCC será nesse tema, é muito interessante
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.
As melhores explicações da área de programação no TH-cam. Por favor não pare!
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
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!
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!
Terceira vez que assisto este video e sempre tem algo que não havia entendi antes e agora consigo pegar melhor.
Eu acho que esse cara trabalha no vale do silício kkk, você é foda Akita
Mais um espetáculo de explicação. Akita o professor mais completo do universo, nunca vi ninguem igual.
Vou assistindo "picado".... Fantástico vídeo Akita, obrigado 🙏
Tera algum video sobre codificacao de caracteres? Acho um tema bem importante tambem. Otimo trabalho.
Tem em inglês. Sobre unicode.
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
Um maestro tecnológico. Tô curtindo muito o canal amigo. Gratidão 🙏🏼 Maratonando tudo Aki.
Uma coisa é vc pesquisar o assunto fragmentadamente. Outra é vc passar por todos os assuntos e ter uma ideia geral e relativizada! Muito bom!
Akita é monstro demais!! Conteúdo extremamente complexo sendo mostrado com analogias simples! Show!
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
Parabéns! Excelente conteúdo!
Privilégio poder consumir esse conteúdo de altíssima qualidade. Muito obrigado mesmo!
Muito legal! Parabéns pelo trabalho, Akita!
Muito obrigado pelo conteúdo.
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.
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!! 👏🏼👏🏼👏🏼👏🏼
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.
Mano do ce'u. Eu assistindo em 2x tive que diminuir para 1.5x para entender tudo. Parabens Fabio. Muito bom o conteudo.
Melhor que minhas aulas de OS na faculdade muitooo bom.
Lembrei das minhas aulas da faculdade.... Sempre digo isso para os mais jovens, foquem nos conceitos...
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
Fascinante ! Espetacular ! Uma aula Magistral ! Totalmente Esclarecedor !
melhor conteúdo br.
AKITA sua didática e muito boa em explicar, e qualidade em gravação
Vc é o cara
Esse cara explica nos minimos detalhes show muito bom mestre tive uma materia sobre SO na faculdade me recordei dela
Rapaz, fiquei até com dor de cabeça com tanta informação, hahahaha
Uma dica a quem passar por aqui e é iniciante(como eu): não achem que isso é tutorial, pois não é, e ele também não caga regra, eu instalei direto o ubuntu como sistema principal(nada de dual boot, tirei o windows da minha vida), to sofrendo com algumas coisas(quase espanquei minha impressora hoje, mas de tanto ser ameaçada deu certo, hahahaha), e dispensei o arch linux que ele sugeriu por exemplo!
Quem quer seguir tudo que ele passa à risca vai no vídeo: não terceirize suas decisões, pois vocês entenderam errado, hahahahahahaha(indico esse vídeo pra todo mundo)
Abraços Akita, excelente conteúdo!
Obrigado! Que bom que vocês entenderam o objetivo dos vídeos e é isso mesmo, não é passo a passo escrito em pedra.
Muito, muito bom! Obrigado por compartilhar.
34:47 "A terceira opção, como já imaginaram (...)" Ah, claro! rsrs
Conteúdo de alta qualidade. Aprendo muito com esse canal.
apredendo um pouco mais aqui, curtindo bastante essa série, valeu.
Sempre vídeos de grande qualidade!.
Ansioso por esse video.
Incrível é a definição mais acertava para essa sua séries vídeos 😁💪💪👊
soco direto no queixo do like .
conteúdo de qualidade.👍👍👍👍
Cara, a sua didática é coisa de outro nível
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.
Parabéns 👏🏻👏🏻👏🏻👏🏻
Melhor explicação sobre deadlock que já vi
Essa série é uma faculdade , fiz CC e algumas coisas estou revendo mas outras coisas não vi nem na faculdade. Parabéns Akita.
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
Mais um vídeo sensacional da série e como sempre, extremamente detalhado! #AquitaFlix
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.
Fantástico, obrigado pela dedicação e pela qualidade dos seus vídeos! AkitaBomDeMais!
Caraaaaaaaa, a cada vídeo eu aprendo mais valeu Akita !
Agora sim a semana começou hahaha
Lembrei do livro Sistemas Operacionais Modernos.
Vlw Akita!
Que aula meus amigos. Akita é fera demais!
Bem didático o exemplo da mesa! 👏👏👏
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
Primeira vez que fiquei feliz do meu browser dar pau, já que aconteceu exatamente na parte da explicação sobre os crashes em navegadores.
9:50 me pegou de surpresa, KKKK.
ri demais... talvez eu seja doido
esse cara é bom
Que série fantástica, valeu Akita!
Simplesmente incrível 🚀
Excelente canal.
Fique c Deus
Boa sorte Ana
Simplesmente o melhor!
Muito bom Akita!! Parabéns pelo trabalho consiste e o conciso.
seria interessante se no exemplo o tamanho da mesa representasse a memoria, mas enfim. o video está incrivel!
Awesome classes teacher! Nowdays keep what is usefull... But theres a lot of update content.
É a segunda vez que venho nesse vídeo, a diferença é que agora eu tô com bagagem pra entender
muito bom, parabens, voce conseguiu resumiu umas 300 paginas do tanembaum em apenas um video
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.
Rapaz, anos de faculdade em 40 minutos. Show de bola!
Que aula 👏🏻👏🏻👏🏻
Adoro esse episódio!
Show !
Opa! Chegando em casa, vou preparar a 🍿 e assistir o Akita.
E por isso estou tentando entender como utilizar os thread. ....estou pensando utilizar o Open Suse ....e configurar montar a minha naquina
Parabéns..muito bem explicado
Se poder fazer alguns cursos de programação, certo que já tem em alguns canais
Mas queria ver você ensinando, como Node.Js
Python
C#
ou outras é ferramentas essenciais que todo programador tem que saber hoje para iniciar
Parabens pelo video,otimo conteudo,muito bem explicado.
Muito boa a explicação, deixa muitos Doutor em TI, no chinelo...