비동기 이벤트 및 동시성
Azure Sphere 플랫폼은 이벤트 루프 및 POSIX pthreads를 포함하여 비동기 이벤트 및 동시성을 처리하는 몇 가지 일반적인 POSIX 및 Linux 메커니즘을 지원합니다.
이 샘플에서는 Azure Sphere 이벤트 루프를 사용하여 이벤트 기반 시나리오를 안전하게 관리하는 방법을 보여 줍니다. 예를 들어 UART 샘플은 디바이스가 UART를 통해 데이터를 받거나 UART를 통해 데이터를 보내기 위해 단추를 누를 때까지 일시 중지됩니다.
이벤트 루프는 대부분의 그래픽 사용자 인터페이스와 표준 Linux 패턴의 표준 부분입니다. Azure Sphere 이벤트 루프는 Azure Sphere 애플리케이션이 업데이트와 관련된 이벤트와 같은 시스템 알림을 받을 수 있도록 하는 이벤트 루프의 특정 구현입니다.
다음과 같은 이유로 이벤트 루프 패턴을 사용하는 것이 좋습니다.
AZURE Sphere 이벤트 루프는 OS 및 애플리케이션 업데이트 알림과 같은 시스템 이벤트를 관리하는 데 필요합니다. 이벤트 루프를 사용하여 디바이스 업데이트를 연기해야 합니다.
이벤트 루프는 비동기 프로그래밍을 허용하므로 여러 태스크가 동시에 진행될 수 있습니다.
이벤트 루프는 메모리 오버헤드를 최소화합니다. 모든 스레드는 별도의 스택의 메모리 오버헤드를 전달합니다. Linux 스택은 가상 메모리와 함께 할당되고 주문형을 상한값으로 증가하므로 고정 비용이 없습니다. 따라서 추가 리소스 비용으로 인해 Azure Sphere MT3620과 같은 제한된 시스템에서 스레드를 구현하기가 더 어렵습니다.
스레드 간의 동기화는 복잡하며 교착 상태와 같은 문제가 발생할 수 있습니다. 이와 관련하여 이벤트 루프는 더 간단합니다.
연습 가능한 경우 이벤트 루프를 사용하는 것이 좋습니다. 애플리케이션에 스레드가 필요한 경우 Azure Sphere는 POSIX pthreads를 지원합니다. 스레드로부터 안전한 실행을 보장하는 것은 애플리케이션의 책임입니다. 일부 applibs 함수에 대한 애플리케이션 호출은 스레드로부터 안전하지만 헤더 파일에 표시된 것처럼 다른 호출은 안전하지 않습니다. 헤더 파일이 스레드 안전을 멘션 않는 경우 관련 함수 또는 라이브러리가 스레드로부터 안전하지 않다고 가정해야 합니다.