Parte I:
- O que é concorrência
- Concorrência x Paralelismo
- Race condition e como Ruby e NodeJS lidam com o problema
Parte II:
- Erlang e Elixir
- Actor Model
- Processos
- Erlang/Elixir vs. Go
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
Complexidade de algoritmos insertion, selection e bubble sort.Júlio Rocha
O documento analisa a complexidade de tempo dos algoritmos de ordenação Bubble Sort, Selection Sort e Insertion Sort, mostrando que todos possuem complexidade quadrática no pior caso (O(n2)). O Bubble Sort realiza aproximadamente n2 trocas no pior caso. O Selection Sort faz (n-1) trocas no pior caso. O Insertion Sort faz n2/2 comparações no pior caso.
O documento descreve o algoritmo de ordenação Insertion Sort, explicando como ele ordena um vetor de maneira crescente e decrescente através de repetidas passagens que movem elementos para suas posições corretas.
O documento descreve microcontroladores, especificamente o PIC, seu funcionamento interno, programação e processo de gravação. O PIC é um microcontrolador produzido pela Microchip que contém um processador, memória e pinos de entrada/saída, permitindo controlar sistemas digitais através da programação.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
Complexidade de algoritmos insertion, selection e bubble sort.Júlio Rocha
O documento analisa a complexidade de tempo dos algoritmos de ordenação Bubble Sort, Selection Sort e Insertion Sort, mostrando que todos possuem complexidade quadrática no pior caso (O(n2)). O Bubble Sort realiza aproximadamente n2 trocas no pior caso. O Selection Sort faz (n-1) trocas no pior caso. O Insertion Sort faz n2/2 comparações no pior caso.
O documento descreve o algoritmo de ordenação Insertion Sort, explicando como ele ordena um vetor de maneira crescente e decrescente através de repetidas passagens que movem elementos para suas posições corretas.
O documento descreve microcontroladores, especificamente o PIC, seu funcionamento interno, programação e processo de gravação. O PIC é um microcontrolador produzido pela Microchip que contém um processador, memória e pinos de entrada/saída, permitindo controlar sistemas digitais através da programação.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
This document discusses flow-based programming with Elixir. It begins with an introduction to the speaker and overview of topics to be covered. It then covers conventional programming versus flow-based programming, using the "telegram problem" as an example. The document discusses using Elixir's new GenStage feature to implement the telegram problem in a flow-based manner, with independent, asynchronous components communicating via message passing. It also discusses how GenStage dispatchers allow for data routing and partitioning in flow-based applications.
IDA Pro is a disassembler that has both graph and text viewing modes. It uses colors to represent different types of jumps in graph mode and allows navigation between functions, cross-references, imports, and other views. The program can recognize functions and arguments, graph cross-references and call flows, and allows renaming locations, adding comments, and other customizations to enhance the disassembly. Plug-ins can also extend IDA's capabilities.
O documento discute a gestão de decisões e regras de negócio no contexto da transformação digital. Aborda como as tecnologias de BPM, DMN e Internet das Coisas estão impulsionando a automação de processos e decisões. Também destaca os desafios de visibilidade, agilidade e consistência quando as regras estão ocultas nos sistemas, e como soluções de gestão de regras de negócio ajudam a superar esses problemas.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
Chord- A Scalable Peer-to-Peer Lookup Service for Internet ApplicationsChandan Thakur
Chord is a peer-to-peer lookup service that provides efficient mapping of keys to nodes. It uses consistent hashing to distribute keys evenly among nodes and ensure minimal disruption when nodes join or leave. Each node maintains routing information about O(log N) other nodes through a finger table. This allows lookups to be routed to the correct node holding a key in O(log N) hops. Chord is decentralized, scalable, and adapts dynamically to changes in the network topology.
O documento discute lógica de programação e algoritmos, definindo-os como sequências lógicas de passos para resolver problemas. Também aborda representações de algoritmos como pseudocódigo e diagramas de blocos, e técnicas como teste de mesa para validar algoritmos.
This document contains code and documentation related to RISC-V target machine configuration in LLVM. It discusses RISC-V architecture types (32-bit and 64-bit), feature strings, code generation options and relocation models for RISC-V. Code snippets show the RISC-VTargetMachine constructor and Triple class for specifying RISC-V configuration.
Este documento apresenta uma introdução à linguagem de programação C. Ele começa explicando o processo de tradução de código fonte para código objeto e as diferenças entre compiladores e interpretadores. Em seguida, descreve brevemente a história da linguagem C e sua estrutura básica de programação. Por fim, apresenta diretivas para pré-processadores, variáveis, entrada e saída de dados e o ambiente de desenvolvimento Dev-C++.
O documento descreve os circuitos de flip-flops JK, D e latch D transparente. Explica como cada um opera, incluindo suas entradas, saídas e como respondem aos pulsos de clock. Também fornece exemplos de suas aplicações em circuitos digitais como contadores e transferência de dados paralela.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
O documento discute princípios de programação concorrente em Ruby, incluindo: 1) o que é concorrência e por que escrever código concorrente; 2) diferentes modelos de concorrência como multiprocessos, multithreading e fibras; 3) desafios de escrever código concorrente como o GIL e deadlocks.
O documento discute padrões de projeto, ferramentas e métodos ágeis. Apresenta padrões de projeto inspirados por Christopher Alexander e o livro "Padrões de Projeto" de Gamma et al. Discutem categorias de padrões como criação, estrutural e comportamental e princípios como programar para interfaces. Exemplos incluem um jogo RPG e o padrão Singleton.
This document discusses flow-based programming with Elixir. It begins with an introduction to the speaker and overview of topics to be covered. It then covers conventional programming versus flow-based programming, using the "telegram problem" as an example. The document discusses using Elixir's new GenStage feature to implement the telegram problem in a flow-based manner, with independent, asynchronous components communicating via message passing. It also discusses how GenStage dispatchers allow for data routing and partitioning in flow-based applications.
IDA Pro is a disassembler that has both graph and text viewing modes. It uses colors to represent different types of jumps in graph mode and allows navigation between functions, cross-references, imports, and other views. The program can recognize functions and arguments, graph cross-references and call flows, and allows renaming locations, adding comments, and other customizations to enhance the disassembly. Plug-ins can also extend IDA's capabilities.
O documento discute a gestão de decisões e regras de negócio no contexto da transformação digital. Aborda como as tecnologias de BPM, DMN e Internet das Coisas estão impulsionando a automação de processos e decisões. Também destaca os desafios de visibilidade, agilidade e consistência quando as regras estão ocultas nos sistemas, e como soluções de gestão de regras de negócio ajudam a superar esses problemas.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
Chord- A Scalable Peer-to-Peer Lookup Service for Internet ApplicationsChandan Thakur
Chord is a peer-to-peer lookup service that provides efficient mapping of keys to nodes. It uses consistent hashing to distribute keys evenly among nodes and ensure minimal disruption when nodes join or leave. Each node maintains routing information about O(log N) other nodes through a finger table. This allows lookups to be routed to the correct node holding a key in O(log N) hops. Chord is decentralized, scalable, and adapts dynamically to changes in the network topology.
O documento discute lógica de programação e algoritmos, definindo-os como sequências lógicas de passos para resolver problemas. Também aborda representações de algoritmos como pseudocódigo e diagramas de blocos, e técnicas como teste de mesa para validar algoritmos.
This document contains code and documentation related to RISC-V target machine configuration in LLVM. It discusses RISC-V architecture types (32-bit and 64-bit), feature strings, code generation options and relocation models for RISC-V. Code snippets show the RISC-VTargetMachine constructor and Triple class for specifying RISC-V configuration.
Este documento apresenta uma introdução à linguagem de programação C. Ele começa explicando o processo de tradução de código fonte para código objeto e as diferenças entre compiladores e interpretadores. Em seguida, descreve brevemente a história da linguagem C e sua estrutura básica de programação. Por fim, apresenta diretivas para pré-processadores, variáveis, entrada e saída de dados e o ambiente de desenvolvimento Dev-C++.
O documento descreve os circuitos de flip-flops JK, D e latch D transparente. Explica como cada um opera, incluindo suas entradas, saídas e como respondem aos pulsos de clock. Também fornece exemplos de suas aplicações em circuitos digitais como contadores e transferência de dados paralela.
NHN NEXT 게임 서버 프로그래밍 강의 자료입니다. 최소한의 필요한 이론 내용은 질문 위주로 구성되어 있고 (답은 학생들 개별로 고민해와서 피드백 받는 방식) 해당 내용에 맞는 실습(구현) 과제가 포함되어 있습니다.
참고로, 서버 아키텍처에 관한 과목은 따로 있어서 본 강의에는 포함되어 있지 않습니다.
O documento discute princípios de programação concorrente em Ruby, incluindo: 1) o que é concorrência e por que escrever código concorrente; 2) diferentes modelos de concorrência como multiprocessos, multithreading e fibras; 3) desafios de escrever código concorrente como o GIL e deadlocks.
O documento discute padrões de projeto, ferramentas e métodos ágeis. Apresenta padrões de projeto inspirados por Christopher Alexander e o livro "Padrões de Projeto" de Gamma et al. Discutem categorias de padrões como criação, estrutural e comportamental e princípios como programar para interfaces. Exemplos incluem um jogo RPG e o padrão Singleton.
Desenvolvimento de aplicações embarcadas utilizando PythonFlávio Ribeiro
Flávio Ribeiro apresenta sobre sistemas embarcados e desenvolvimento de software para esses sistemas usando Python. Ele discute conceitos de sistemas embarcados, por que usar Python, e dicas para desenvolvimento eficiente como desacoplamento, uso de threads e otimização.
Além da programação funcional com Elixir e ErlangElaine Naomi
Elaine Naomi Watanabe compartilha sua jornada de aprendizado de novas linguagens de programação ao longo dos anos, com foco recente em Elixir. Ela descreve brevemente suas experiências com linguagens como Python, Java, C++ e PHP, e atualmente tem se dedicado a Elixir e Ruby. O documento então detalha os principais pontos sobre Elixir, incluindo sua herança de Erlang, processos, concorrência, tolerância a falhas e produtividade.
Domando a irreversibilidade com feature flagsHugo Bessa
1) O documento discute o uso de feature flags para permitir a ativação e desativação de funcionalidades no código sem alterá-lo. 2) As feature flags podem ser armazenadas em arquivos de configuração, variáveis de ambiente ou bancos de dados e serviços em nuvem para permitir alterações em tempo real. 3) É importante testar ambos os estados das flags, evitar códigos longos dentro de if/else e agendar a remoção das flags para manter o código limpo e legível.
O documento discute a linguagem de programação Erlang, que suporta concorrência, distribuição e tolerância a falhas. O Erlang é usado principalmente para sistemas de telecomunicações robustos e confiáveis. Apresenta exemplos de programação funcional em Erlang e discute como a linguagem facilita a programação concorrente e distribuída através de processos e mensagens.
O documento fornece 12 dicas para se tornar um melhor desenvolvedor de software: 1) Aprenda lógica de programação antes de linguagens específicas, 2) Planeje projetos antes de começar a codificar, 3) Experimente novas tecnologias e tendências da área.
Palestra: Introdução à TypeScript & Features Ts 2.x Glaucia Lemos
O documento introduz o TypeScript, uma linguagem de programação que adiciona tipagem estática ao JavaScript. TypeScript compila para código JavaScript limpo e interoperável, tornando-o uma opção popular para aplicativos da web e móveis. O documento discute como o TypeScript resolve problemas comuns do JavaScript, como erros de tempo de execução, e apresenta recursos como classes, interfaces, módulos e tipos para tornar o código mais previsível, legível e fácil de depurar.
O documento discute a ferramenta Vagrant, que permite criar e configurar ambientes de desenvolvimento virtualizados de forma consistente. Vagrant usa arquivos VagrantFile e boxes para automatizar a configuração de máquinas virtuais, eliminando diferenças entre ambientes de desenvolvimento e produção. O documento lista alguns dos principais comandos do Vagrant como vagrant up, vagrant ssh e vagrant destroy.
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
Este documento apresenta o framework PHP CodeIgniter. Resume as seguintes informações essenciais:
1) Apresenta a história do PHP e como o CodeIgniter ajuda a resolver problemas comuns em projetos PHP grandes;
2) Explica os principais recursos e benefícios do CodeIgniter como MVC, facilidade de uso, documentação, entre outros;
3) Demonstra como o CodeIgniter organiza controllers, models, views e URLs de forma simples e padronizada.
Apresentação Introdução Typescript - .Net Caxias do SulGlaucia Lemos
1) O documento introduz o TypeScript e suas principais características como tipagem estática, classes, interfaces e suporte a programação orientada a objetos.
2) TypeScript foi criado para lidar com a complexidade de códigos JavaScript modernos e torna o código mais previsível e fácil de depurar.
3) Apesar de TypeScript adicionar tipagem estática, JavaScript continua sendo o futuro e pode ser usado em diversos ambientes como front-end, back-end, mobile e IoT.
O documento resume as principais características da linguagem de programação Python. Em particular, ele descreve Python como uma linguagem de alto nível, de uso geral e que suporta múltiplos paradigmas de programação, com foco em legibilidade do código. Além disso, fornece exemplos de como calcular fatoriais recursivamente e iterativamente em Python.
O documento discute o conceito de threads, explicando que elas permitem executar múltiplas tarefas simultaneamente dentro de um mesmo processo, compartilhando os mesmos recursos de memória. Também aborda como criar, gerenciar e fazer comunicação entre threads, bem como problemas de concorrência que podem ocorrer.
O documento discute três pontos sobre programação e multimédia: 1) plataformas e tecnologias disponíveis, 2) a importância da aprendizagem contínua em um campo em constante mudança, e 3) boas práticas de workflow para maior eficiência.
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorDickson S. Guedes
Este documento discute como aprender várias linguagens de programação pode tornar alguém um melhor DBA (administrador de banco de dados) e desenvolvedor. Aprender novas linguagens ajuda a conectar pontos entre diferentes tecnologias e abordagens, melhorando a comunicação, percepção e pensamento crítico. É importante considerar por que cada linguagem surgiu para escolher aquelas que agregam mais valor.
Overview de Grails: O Java em alta produtividadeCleórbete Santos
Apresentação utilizada em 04 de março de 2013 para um repasse de Grails envolvendo as equipes de Desenvolvimento de Sistemas, Infraestrutura e demais interessados do Tribunal Superior Eleitoral.
Coders on beer javascript de ponta a pontaKirmayr tomaz
Este documento resume uma apresentação sobre trabalhar com Javascript em todas as camadas de um projeto. Ele discute a motivação para essa abordagem, as tecnologias usadas no back-end, front-end e QA, e problemas comuns enfrentados ao longo do desenvolvimento, como atrasos e falta de comunicação entre equipes. Finalmente, sugere melhorias como respeitar limites de trabalho em andamento, programação em pares e melhorar a comunicação entre times remotos.
O case da Plataformatec com o Elixir - Como uma empresa brasileira criou uma ...Hugo Baraúna
O documento descreve a história da criação da linguagem de programação Elixir pela empresa brasileira Plataformatec. Resume as principais ideias em 3 frases:
1) A Plataformatec criou o Elixir em 2011 para facilitar a programação concorrente em resposta aos desafios de escalabilidade do Ruby on Rails e da evolução das CPUs multicore.
2) O Elixir cresceu rapidamente após seu lançamento em 2012, impulsionado pelo apoio de figuras como o criador da linguagem Erlang e o autor Dave Thomas, e pela
O documento discute a jornada de aprendizado de orientação a objetos, desde os primeiros passos com classes, objetos e métodos até a aplicação de padrões de projeto e princípios como SOLID. Também aborda desafios como código legado e a importância de testes.
Semelhante a Concorrência e Paralelismo em Elixir (e outras linguagens) (20)
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
Em determinadas ocasiões, dependendo dos requisitos de uma aplicação, pode ser preciso percorrer todos os elementos de uma árvore para, por exemplo, exibir todo o seu conteúdo ao usuário. De acordo com a ordem de visitação dos nós, o usuário pode ter visões distintas de uma mesma árvore.
Imagine que, para percorrer uma árvore, tomemos o nó raiz como nó inicial e, a partir dele, comecemos a visitar todos os nós adjacentes a ele para, só então, começar a investigar os outros nós da árvore. Por outro lado, imagine que tomamos um nó folha como ponto de partida e caminhemos em direção à raiz, visitando apenas o ramo da árvore que leva o nó folha à raiz. São maneiras distintas de se visualizar a mesma árvore.
Tome a árvore binária a seguir como base para realizar percursos que partirão sempre da raiz (nó 1).
Figura 1 - Árvore binária
Fonte: OLIVEIRA, P. M. de; PEREIRA, R. de L. Estruturas de Dados II. Maringá: UniCesumar, 2019. p. .
Com base na árvore anterior, responda quais seriam as ordens de visitação, partindo da raiz:
a) Percorrendo a árvore pelo algoritmo Pré-Ordem.
b) Percorrendo a árvore pelo algoritmo Em-Ordem.
c) Percorrendo a árvore pelo algoritmo Pós-Ordem.
Obs.: como resposta, informar apenas os caminhos percorridos em cada Situação:
a) Pré-ordem: X - Y - Z.
b) Em-ordem: X - Y - Z.
c) Pós-ordem: X - Y - Z.
ATENÇÃO!
- Você poderá elaborar sua resposta em um arquivo de texto .txt e, após revisado, copiar e colar no campo destinado à resposta na própria atividade em seu STUDEO.
- Plágios e cópias indevidas serão penalizados com nota zero.
- As perguntas devem ser respondidas de forma adequada, ou seja, precisam ser coerentes.
- Antes de enviar sua atividade, certifique-se de que respondeu todas as perguntas e não se esqueceu nenhum detalhe. Após o envio, não são permitidas alterações. Por favor, não insista.
- Não são permitidas correções parciais no decorrer do módulo, isso invalida seu processo avaliativo. A interpretação da atividade faz parte da avaliação.
- Atenção ao prazo de entrega da atividade. Sugerimos que envie sua atividade antes do prazo final para evitar transtornos e lentidão nos servidores. Evite o envio de atividade em cima do prazo.
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...Faga1939
Este artigo tem por objetivo apresentar como ocorreu a evolução do consumo e da produção de energia desde a pré-história até os tempos atuais, bem como propor o futuro da energia requerido para o mundo. Da pré-história até o século XVIII predominou o uso de fontes renováveis de energia como a madeira, o vento e a energia hidráulica. Do século XVIII até a era contemporânea, os combustíveis fósseis predominaram com o carvão e o petróleo, mas seu uso chegará ao fim provavelmente a partir do século XXI para evitar a mudança climática catastrófica global resultante de sua utilização ao emitir gases do efeito estufa responsáveis pelo aquecimento global. Com o fim da era dos combustíveis fósseis virá a era das fontes renováveis de energia quando prevalecerá a utilização da energia hidrelétrica, energia solar, energia eólica, energia das marés, energia das ondas, energia geotérmica, energia da biomassa e energia do hidrogênio. Não existem dúvidas de que as atividades humanas sobre a Terra provocam alterações no meio ambiente em que vivemos. Muitos destes impactos ambientais são provenientes da geração, manuseio e uso da energia com o uso de combustíveis fósseis. A principal razão para a existência desses impactos ambientais reside no fato de que o consumo mundial de energia primária proveniente de fontes não renováveis (petróleo, carvão, gás natural e nuclear) corresponde a aproximadamente 88% do total, cabendo apenas 12% às fontes renováveis. Independentemente das várias soluções que venham a ser adotadas para eliminar ou mitigar as causas do efeito estufa, a mais importante ação é, sem dúvidas, a adoção de medidas que contribuam para a eliminação ou redução do consumo de combustíveis fósseis na produção de energia, bem como para seu uso mais eficiente nos transportes, na indústria, na agropecuária e nas cidades (residências e comércio), haja vista que o uso e a produção de energia são responsáveis por 57% dos gases de estufa emitidos pela atividade humana. Neste sentido, é imprescindível a implantação de um sistema de energia sustentável no mundo. Em um sistema de energia sustentável, a matriz energética mundial só deveria contar com fontes de energia limpa e renováveis (hidroelétrica, solar, eólica, hidrogênio, geotérmica, das marés, das ondas e biomassa), não devendo contar, portanto, com o uso dos combustíveis fósseis (petróleo, carvão e gás natural).
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
Este certificado confirma que Gabriel de Mattos Faustino concluiu com sucesso um curso de 42 horas de Gestão Estratégica de TI - ITIL na Escola Virtual entre 19 de fevereiro de 2014 a 20 de fevereiro de 2014.
Em um mundo cada vez mais digital, a segurança da informação tornou-se essencial para proteger dados pessoais e empresariais contra ameaças cibernéticas. Nesta apresentação, abordaremos os principais conceitos e práticas de segurança digital, incluindo o reconhecimento de ameaças comuns, como malware e phishing, e a implementação de medidas de proteção e mitigação para vazamento de senhas.
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
17. E se a gente só não
compartilhasse estado?
Tipo, de verdade? 🤯
18. Episódio II
De Volta para o Futuro
| “Reject modernity; embrace tradition.”
Algum conservador no twitter
19. Erlang
● Quase 40 anos de existência
● Pensada para resolver problemas de alta disponibilidade em telecom:
○ Distribuição
○ Tolerância a Falhas
BEAM
● Máquina virtual do Erlang
● Modelo de runtime desenhado para resolver os problemas citados
21. Processos: Erlang Actors
● Unidades vivas e encapsuladas (como Processos do SO)
● Tudo é um Processo
● Se comunicam por meio de mensagens
● Não compartilham memória (!!!!)
● São muito leves (rodando em uma máquina comum pode chegar a milhões de processos)!
● Caso não consigam fazer o que precisam, eles morrem 💣
23. Mensagens de processos e Mailboxes ✉
● Mensagens podem ser qualquer coisa (um inteiro, um `map` ou até uma função)
● São não-bloqueantes
● Sabendo o id do processo (ou o nome dele), é possível enviar mensagens para qualquer um
● O processo destinatário nem precisa estar na mesma máquina que o remetente (!)
27. Então, se processos são...
● Atômicos
● Se comunicam por mensagens
● Não compartilham estado
28. Então, se processos são...
● Atômicos
● Se comunicam por mensagens
● Não compartilham estado
Quer dizer que podemos fazer um
código concorrente de verdade? 🤔
39. Características
● Implementação em semáforos
● Arquitetura de threads parecida com a do Erlang
● Co-operative scheduling
● Goroutines são opcionais da linguagem
● Simples de implementar: `go func()`
40. Possíveis problemas
● Co-operative scheduling == block?
● Estado compartilhado ainda é possível
● Não há comunicação entre nodes
● Comunicação em channels não é 100% async
● Goroutines não se conhecem
41. Go e erlang possuem focos diferentes
● Golang:
○ Rápido deploy e execução
○ Fácil adoção
● Erlang/Elixir:
○ Tolerância a falhas
○ Distribuição
Em Go, concorrência é um detalhe de design;
em Erlang, é o ponto central da arquitetura
.
46. Referências
- Exploring Ruby’s Multi-threaded Weirdness (21/03/2021)
- Introdução ao Node.js (Single-Thread, Event-Loop e mercado) (19/03/2021)
- Frequently Asked Questions about Erlang (21/03/2021)
- JURIC, Sasa. Elixir in Action, 2019
- Erlang Scheduler Details and Why It Matters (21/03/2021)
- Who Supervises The Supervisors? (22/03/2021)
- Elixir is Safe (07/04/2021)
- Websocket Shootout: Clojure, C++, Elixir, Go, NodeJS, and Ruby (22/03/2021)
- COSTA, Gabriel et al. Escalabilidade de sistemas web em diferentes arquiteturas. TCC. 2020. (22/03/2021)
- Effective Go - The Go Programming Language (04/04/2021)
- Go vs Elixir: A concurrency comparison (03/04/2021)
Notas do Editor
boas práticas: - É ótimo, mas um dev desavisado pode acabar fazendo 💩
evitar concorrência: Sacrifica performance
forks: copia o estado da aplicação e roda paralelamente. custa muita memória e não abre espaço pra microcomunicação