Asynchrone Ereignisse und Parallelität

Die Azure Sphere-Plattform unterstützt mehrere gängige POSIX- und Linux-Mechanismen zur Behandlung asynchroner Ereignisse und Parallelität, einschließlich Ereignisschleifen und POSIX-Pthreads.

Die Beispiele veranschaulichen, wie Sie Azure Sphere-Ereignisschleifen verwenden, um ereignisgesteuerte Szenarien sicher zu verwalten. Beispielsweise wird das UART-Beispiel angehalten, bis das Gerät Daten über UART empfängt oder bis eine Schaltfläche zum Senden von Daten über UART gedrückt wird.

Ereignisschleifen sind ein Standardteil der meisten grafischen Benutzeroberflächen und ein Linux-Standardmuster. Azure Sphere-Ereignisschleifen sind eine bestimmte Implementierung von Ereignisschleifen, mit denen Azure Sphere-Anwendungen Systembenachrichtigungen wie Ereignisse im Zusammenhang mit Updates empfangen können.

Das Ereignisschleifenmuster wird aus den folgenden Gründen empfohlen:

  • Azure Sphere-Ereignisschleifen sind für die Verwaltung von Systemereignissen wie Betriebssystem- und Anwendungsupdatebenachrichtigungen erforderlich. Sie müssen Ereignisschleifen verwenden, um Geräteupdates zurückzuweisen.

  • Ereignisschleifen ermöglichen eine asynchrone Programmierung, sodass mehrere Aufgaben gleichzeitig ausgeführt werden können.

  • Ereignisschleifen minimieren den Arbeitsspeicheraufwand. Jeder Thread trägt den Arbeitsspeichermehraufwand eines separaten Stapels. Linux-Stapel werden mit virtuellem Arbeitsspeicher zugeordnet und werden bei Bedarf auf eine Obergrenze anwachsen, sodass keine Fixkosten anfallen. Threads sind daher aufgrund der zusätzlichen Ressourcenkosten schwieriger auf einem eingeschränkten System wie dem Azure Sphere MT3620 zu implementieren.

  • Die Synchronisierung zwischen Threads ist komplex und kann zu Problemen wie Deadlocks führen. Ereignisschleifen sind in dieser Hinsicht einfacher.

Obwohl wir die Verwendung von Ereignisschleifen empfehlen, sofern dies praktikabel ist, unterstützt Azure Sphere POSIX-Pthreads, wenn Ihre Anwendung Threads erfordert. Es liegt in der Verantwortung der Anwendung, die threadsichere Ausführung sicherzustellen. Anwendungsaufrufe für einige applibs-Funktionen sind threadsicher, andere jedoch nicht, wie in den Headerdateien angegeben. Wenn die Headerdatei keine Threadsicherheit Erwähnung, sollten Sie davon ausgehen, dass die relevante Funktion oder Bibliothek nicht threadsicher ist.