Eventos assíncronos e simultaneidade
A plataforma do Azure Sphere suporta vários mecanismos POSIX e Linux comuns para lidar com eventos assíncronos e simultaneidade, incluindo ciclos de eventos e pthreads POSIX.
Os exemplos demonstram como utilizar os ciclos de eventos do Azure Sphere para gerir em segurança cenários orientados por eventos. Por exemplo, o exemplo UART é colocado em pausa até que o dispositivo receba dados através de UART ou até que seja premido um botão para enviar dados através de UART.
Os ciclos de eventos são uma parte padrão da maioria das interfaces de utilizador gráficas e um padrão padrão do Linux. Os ciclos de eventos do Azure Sphere são uma implementação específica de ciclos de eventos que permitem que as aplicações do Azure Sphere recebam notificações do sistema, como eventos relacionados com atualizações.
Recomendamos o padrão do ciclo de eventos pelos seguintes motivos:
Os ciclos de eventos do Azure Sphere são necessários para gerir eventos do sistema, como notificações de atualização de aplicações e SO. Tem de utilizar ciclos de eventos para diferir as atualizações do dispositivo.
Os ciclos de eventos permitem uma programação assíncrona para que múltiplas tarefas possam progredir em simultâneo.
Os ciclos de eventos minimizam a sobrecarga da memória. Cada thread carrega a sobrecarga de memória de uma pilha separada. As pilhas do Linux são alocadas com memória virtual e aumentam a pedido para um limite superior, pelo que não há custos fixos. Por conseguinte, os threads são mais difíceis de implementar num sistema restrito, como o MT3620 do Azure Sphere devido ao custo adicional do recurso.
A sincronização entre threads é complexa e pode originar problemas como impasses. Os ciclos de eventos são mais simples a este respeito.
Embora recomendemos a utilização de ciclos de eventos sempre que possível, se a sua aplicação necessitar de threads, o Azure Sphere suporta pthreads POSIX. É da responsabilidade da aplicação garantir a execução segura de threads. As chamadas da aplicação para algumas funções de applibs são seguras para threads, mas outras não, como indicado nos ficheiros de cabeçalho. Se o ficheiro de cabeçalho não mencionar a segurança do thread, deve assumir que a função ou biblioteca relevante não é segura para threads.