Desenvolvimento de linguagem de alto nível para aplicativos móveis - exploração simultânea

Este artigo foi reproduzido da conta pública oficial do WeChat do OpenHarmony TSC " Summit Review No. 9 | Mobile Application Advanced Language Development - Concurrency Exploration "

Palestrante | Li Yongbiao

Revisão e arranjo | Liao Tao

Revisão de composição tipográfica | Li Pingping

Perfil do convidado

Li Yongbiao, membro da linguagem de programação TSG do Comitê de Direção Técnica do grupo de projeto OpenHarmony e especialista no compilador da máquina virtual OpenHarmony da Huawei. De 2021 até agora, o arquiteto da equipe de compilação e tempo de execução da linguagem do sistema operacional do terminal Huawei, responsável pela arquitetura técnica geral da compilação e tempo de execução da linguagem de alto nível OpenHarmony. Trabalhou no Alibaba, participou e liderou a otimização de compilação de máquinas virtuais em linguagem de alto nível AliOS, otimização de gerenciamento de memória, otimização multithread e outros projetos. Atualmente com foco na linguagem de programação e linguagem de máquina virtual de SO móvel.

Origem do conteúdo

O primeiro Open Atom Open Source Foundation OpenHarmony Technology Summit - Subfórum de linguagem de programação e estrutura de aplicativos

revisão de vídeo

Link de vídeo:

Summit Review Edição 9 | Desenvolvimento avançado de linguagem para aplicativos móveis - Exploração de simultaneidade (Li Yongbiao)_哔哩哔哩_bilibili

Conteúdo

Com a desaceleração da Lei de Moore se tornando mais proeminente e o surgimento de arquiteturas de sistemas de computadores multi-core, a programação simultânea continua a atrair muita atenção. Atualmente, quais são as explorações simultâneas no campo das aplicações móveis e quais são as conquistas e planos futuros do OpenHarmony? Li Yongbiao, compilador de terminal e arquiteto de tempo de execução da Huawei, compartilhou alguns pontos com você no primeiro OpenHarmony Technology Summit.

01 ►Fundo simultâneo

A Lei de Moore foi proposta por Gordon Moore, cofundador e ex-CEO da Intel, ou seja, o número de transistores e resistores integrados em um chip semicondutor dobrará a cada dois anos, o desempenho do microprocessador dobrará ou o preço aumentará cair pela metade. Nas últimas décadas, a Lei de Moore deu uma enorme contribuição para o desenvolvimento do poder computacional e até mesmo da produtividade, mas em 2022, à medida que o efeito de escala de Denard encontrou o gargalo da física dos componentes, a indústria gradualmente teve fortes diferenças neste ponto em vista, algumas pessoas pensam que a Lei de Moore está desacelerando gradualmente ou até mesmo tem tendência a falhar, enquanto outras pensam que a Lei de Moore ainda é válida, mas o custo aumentou. Neste contexto, o consumo de energia de um único chip restringe o desempenho de um único núcleo, e a programação simultânea baseada em multi-core tornou-se um importante meio técnico para melhorar o desempenho no campo móvel.

Lei de Moore desacelerando

Então, o que é simultaneidade? Simultaneidade refere-se à capacidade de lidar com múltiplas tarefas ao mesmo tempo. Várias tarefas estão prontas para serem executadas em um período de tempo. Em um dispositivo de núcleo único, apenas uma tarefa pode ser executada a qualquer momento e sua ordem de execução não é fixa ; e Em um cenário com vários núcleos, diversas tarefas podem ser executadas em paralelo ao mesmo tempo.

Simultaneidade e Paralelismo

02Modelos de simultaneidade comuns

2.1 ►►Tópicos e bloqueios

Threads e bloqueios são representações comuns de modelos de simultaneidade. A figura abaixo mostra uma arquitetura típica de CPU multi-core. Pode-se observar que o cache L3 é compartilhado entre vários núcleos, portanto, a consistência do cache L3 é garantir a operação normal dos programas entre múltiplos núcleos.Base. Sob a premissa de garantir que os resultados da execução de thread único permaneçam inalterados, qualquer otimização do compilador pode ser feita, como propagação constante, eliminação de subexpressão comum, inlining, substituição escalar, exclusão de código morto, reordenação de instruções, etc. Como diferentes sistemas operacionais têm diferentes restrições à consistência da memória, é necessário usar semântica de sincronização, como bloqueios, para garantir a consistência da memória multithread. Atualmente, programas multithread com excelente desempenho podem ser realizados por meios como bloqueios otimistas baseados em memória compartilhada, bloqueios de rotação, bloqueios tendenciosos e barreiras de memória precisas, mas também existem alguns problemas: a otimização dos esquemas de thread e bloqueio depende em engenharia de software.Normas de prática de simultaneidade e desenvolvedores de programas simultâneos experientes, e é fácil causar impasses, e o custo de testes e manutenção também é alto.

Uma arquitetura de CPU multi-core

2.2 ►► Modelo de ator

O conceito de modelo de ator tem sido proposto há décadas: um ator é uma unidade básica de computação que se comunica através de mensagens; mantém um estado variável internamente e os dois lados não podem modificar-se diretamente. Sua vantagem é que cada ator é fácil de manter e testar. O desenvolvimento de negócios só precisa se preocupar com o processamento de mensagens de negócios e o teste só precisa cobrir a ordem do fluxo de mensagens. Além disso, sua tolerância a falhas também é boa, adequada para programação distribuída. É claro que o modelo do Ator também tem algumas deficiências: há um problema de caixas de correio cheias, sem compartilhamento de estado e apenas interação por meio de comunicação de mensagens, o que não é adequado para paralelismo refinado.

Modelo de ator

2.3 ►►Programação funcional

A programação funcional tem as seguintes características: funções são cidadãs de primeira classe; sem efeitos colaterais (sem estado mutável compartilhado); funções puras constroem tudo. Na programação funcional, desde que a entrada seja certa, a saída também deve atender às expectativas. A fórmula funcional no mundo real é mais dependente da parametrização, e vai lançar o efeito colateral da função (Side Effect), tentar separar da camada de lógica de negócios escrita pelo desenvolvedor e processá-la dentro da estrutura, e tem dependências estruturais. Este modo tem as vantagens de determinismo, robustez (fácil manutenção e fácil teste) e suporte natural para paralelização, mas a eficiência do desenvolvimento é baixa.É difícil converter diretamente a lógica de negócios real em desenvolvimento funcional, e o desempenho é ruim em alguns cenários. .

programação funcional

2.4 ►► Recursos do modelo de simultaneidade

Os modelos de simultaneidade comuns são divididos principalmente em duas categorias, uma baseada apenas na memória compartilhada e a outra baseada na comunicação de mensagens. O modelo de simultaneidade (threads e bloqueios) baseado em memória compartilhada tem as vantagens de uma ampla gama de aplicações, próxima à natureza dos métodos de trabalho de hardware, e alta eficiência quando usado corretamente, mas há inevitavelmente problemas como testes e manutenção difíceis. , esse modelo foi gradativamente abandonado pelo campo de desenvolvimento de aplicações; o modelo de simultaneidade baseado na comunicação de mensagens (Ator, programação funcional) tem as vantagens de boa tolerância a falhas, bom desempenho em cenários específicos e fácil manutenção e teste, mas também existem cenários de aplicação limitados e não são adequados para pranchinhas refinadas, como paralelismo.

03 ►Simultaneidade de estrutura de aplicativos móveis

3.1 ►► Idioma Dart

Dart é uma nova linguagem de programação. Assim como JAVA e PHP, foi inventada pelo Google para resolver alguns problemas práticos na escrita de aplicativos. Em seus primeiros dias, era principalmente para substituir o JavaScript (doravante denominado JS) no campo da Web. Mais tarde , o Google usou internamente o Dart para escrever e incubar uma estrutura de desenvolvimento móvel Sky, que mais tarde foi chamada de Flutter, que brilhou no campo do desenvolvimento móvel multiplataforma. Os objetivos de simultaneidade do Dart são principalmente permitir que a estrutura suporte a paralelização de tarefas e resolver tarefas simultâneas e necessidades de desenvolvimento multithread dos desenvolvedores. Ele compartilha apenas objetos imutáveis, mas não objetos mutáveis, e fornece APIs de simultaneidade para simultaneidade de thread único (assíncrona) e simultaneidade multithread (Isolate Spawn/Compute).

Arquitetura de simultaneidade Dart

3.2 ►► Rápido

Swift é uma nova linguagem de desenvolvimento lançada pela Apple na WWDC Apple Developer Conference em 2014. Ela pode ser executada junto com Objective-C em plataformas macOS e iOS e é usada para construir aplicativos baseados em plataformas Apple. Na versão Swift 5.5 em 2022, foi lançada a descrição da API de simultaneidade. O objetivo da simultaneidade é principalmente reduzir o tempo que os desenvolvedores de aplicativos devem gastar desde a ideia até a implementação, para que a experiência seja muito superior às soluções existentes (independente de fila, baixo desempenho sustentável e baixa segurança). A filosofia de simultaneidade do Swift é que o estado mutável compartilhado não é bom para os desenvolvedores, não é bom para o hardware e não pode romper um único processo. Portanto, Swift espera fornecer APIs não destrutivas e fáceis de usar e melhorar continuamente em termos de design, capacidade de manutenção, segurança, escalabilidade e desempenho. Atualmente, as APIs fornecidas pelo Swift incluem async/await, Task & TaskGroup, Actor, etc.

3.3 ►►Tendências do modelo de simultaneidade de sistemas operacionais móveis populares

No campo do desenvolvimento de aplicativos móveis, as iterações e atualizações são frequentes e a eficiência do desenvolvimento é um fator chave.No entanto, os bloqueios são de nível muito baixo para desenvolvedores de aplicativos, difíceis de usar e depurar e pertencem ao uso avançado. A fim de fornecer um modelo de simultaneidade fácil de usar, simples e eficiente, o modelo multithreading atualmente fornecido pela indústria aos desenvolvedores de aplicativos tende a evitar a competição de dados e a alcançar a ausência de bloqueios. Por exemplo, na Web, JS usa um mecanismo de comunicação de mensagens em multi-threading (isolamento de memória, adicionando suporte para objetos Builtin transferíveis); no Flutter, Dart usa um mecanismo de comunicação de mensagens em multi-threading (isolamento de memória); no Android, Kotlin propôs nativamente API Worker, compartilhamento imutável, congelamento de transferência de objetos e outras soluções para substituir a solução multi-threading compartilhada (os usuários não usam bloqueios); no IOS, Swift 5.5 implementa programação estruturada e Actor, a evolução da simultaneidade geral do Swift é uma modelo de programação que é seguro por padrão.

04Exploração simultânea da linguagem de alto nível OpenHarmony

Na simultaneidade do mundo JS, o modelo Actor, a arquitetura de simultaneidade JS mencionada acima, tem as vantagens de não ter bloqueio, fácil manutenção e teste, boa tolerância a falhas e programação distribuída, mas começa lentamente e a sobrecarga de instâncias simultâneas é alto. Para a API de simultaneidade JS – Worker, como cada uma de suas instâncias simultâneas não é compartilhada, os desenvolvedores precisam encapsular e analisar comandos de mensagens, preocupar-se com o ciclo de vida das instâncias de Worker e ajustar com precisão o número de Workers sob alta e baixa carga.

Com base nos problemas acima, uma instância simultânea leve - Lite Actor é implementada no OpenHarmony. Esta função suporta o compartilhamento de objetos imutáveis, torna a infraestrutura mais leve, melhora muito o tempo de inicialização e otimiza a memória de inicialização.

Instâncias simultâneas do ArkCompiler são executadas

OpenHarmony também fornece TaskPool. TaskPool é uma API de tarefas simultâneas mais fácil de usar, que permite aos desenvolvedores desenvolver facilmente tarefas simultâneas, reduzir a quantidade de escrita de código e deixá-los não se preocupar com o ciclo de vida de instâncias simultâneas e a carga de tarefas simultâneas em cenários. Além disso, o TaskPool também pode unificar o gerenciamento de recursos de cargas de tarefas, reduzir o consumo de recursos do sistema e melhorar o desempenho geral do sistema. Na arquitetura TaskPool mostrada na figura, funções como agendamento de prioridade, balanceamento de carga e gerenciamento unificado do sistema são realizadas por meio do Task Dispatch Manager, e autoadaptabilidade e escalabilidade são realizadas por meio de Task Worker Threads.

Arquitetura de design de pool de tarefas unificada TaskPool

No desenvolvimento de simultaneidade de linguagem de alto nível, a indústria está mais inclinada a fornecer aos desenvolvedores APIs de simultaneidade mais fáceis de usar, de melhor uso e mais eficientes. A API de simultaneidade fornecida pelo OpenHarmony está atualmente entre Dart e Swift, aproveitando os pontos fortes de ambos e otimizando e melhorando continuamente os problemas existentes. Além disso, o OpenHarmony está considerando a introdução de objetos quase estáticos para um compartilhamento real.

05 ►Resumo _

No modelo de simultaneidade OpenHarmony, a instância simultânea será ainda mais leve no futuro e a simultaneidade sem bloqueio de objetos compartilhados será explorada. Além disso, em termos de agendamento simultâneo OpenHarmony, também projetaremos soluções relacionadas das duas dimensões de tempo e espaço para otimizar e melhorar o problema de inundação de threads no sistema existente.Recursos com estado e executáveis ​​agendam e executam automaticamente tarefas simultaneamente.

Bem-vindos a todos para continuarem prestando atenção ao trabalho de pesquisa de simultaneidade do OpenHarmony e esperamos trabalhar com desenvolvedores da comunidade para construir os recursos de simultaneidade do OpenHarmony.

Clique para seguir para saber mais sobre o conteúdo técnico do OpenHarmony TSC

Acho que você gosta

Origin blog.csdn.net/OpenHarmony_dev/article/details/132538758
Recomendado
Clasificación