异步事件和并发
Azure Sphere 平台支持多种常见的 POSIX 和 Linux 机制来处理异步事件和并发性,包括事件循环和 POSIX pthread。
这些示例演示如何使用 Azure Sphere 事件循环 安全地管理事件驱动方案。 例如,UART 示例会暂停,直到设备通过 UART 接收数据或按下按钮以通过 UART 发送数据。
事件循环是大多数图形用户界面的标准部分,也是标准 Linux 模式。 Azure Sphere 事件循环是事件循环的特定实现,允许 Azure Sphere 应用程序接收系统通知,例如与更新相关的事件。
出于以下原因,建议使用事件循环模式:
管理 OS 和应用程序更新通知等系统事件需要 Azure Sphere 事件循环。 必须使用事件循环来延迟设备更新。
事件循环允许异步编程,以便多个任务可以同时进行。
事件循环将内存开销降至最低。 每个线程都承载单独堆栈的内存开销。 Linux 堆栈分配有虚拟内存,并按需增长到上限,因此没有固定成本。 因此,线程更难在受约束的系统(如 Azure Sphere MT3620)上实现,因为需要额外的资源成本。
线程之间的同步很复杂,可能会导致死锁等问题。 在这方面,事件循环更简单。
尽管我们建议在可行的情况下使用事件循环,但如果应用程序需要线程,Azure Sphere 支持 POSIX pthreads。 应用程序负责确保线程安全执行。 对某些 applibs 函数的应用程序调用是线程安全的,但其他调用则不是,如头文件中所示。 如果头文件未提及线程安全性,则应假定相关函数或库不是线程安全的。