3DS의 비선점형 멀티태스킹(Non-Preemptive Multitasking) 환경에서 AsyncIO Executor 구현의 필요성을 제기함
Rust를 사용하여 AsyncIO Executor를 구축하고, `Future`와 `Executor`의 기본 개념을 설명함
Waker와 Executor를 활용하여 비동기 작업의 실행 흐름을 제어하는 방법을 제시함
3DS 환경에서의 구현 세부 사항(Implementation Details)은 다음 파트에서 다룰 예정
3DS는 비선점형 멀티태스킹(Non-Preemptive Multitasking)을 사용하므로, 하나의 스레드가 CPU를 독점하면 다른 작업이 실행되지 않는 문제가 발생한다. 이러한 문제를 해결하기 위해 저자는 AsyncIO Executor를 구현하여, 각 작업을 작은 단위로 나누어 실행하고, 작업 간의 전환을 관리한다. 이를 통해 3DS 환경에서도 부드러운 멀티태스킹(Smooth Multitasking)을 가능하게 한다.
저자는 Rust를 사용하여 AsyncIO Executor를 구현하며, `Future`와 `Executor`의 핵심 개념을 설명한다. `Future`는 비동기 작업의 결과를 나타내며, `Executor`는 이러한 `Future`를 관리하고 실행하는 역할을 한다. 특히, `Sleep` 구조체를 예시로 들어, `Future`의 `poll` 함수를 구현하는 방법을 보여준다. 구체적인 구현 코드는 본문에 포함되지 않았다.
Rust의 Waker와 Executor를 사용하여 비동기 작업의 실행 흐름을 제어한다. Waker는 Executor에게 특정 작업을 다시 실행하도록 요청하는 역할을 하며, Executor는 Waker의 요청에 따라 작업을 실행한다. 저자는 `TaskWaker` 구조체를 통해 Waker를 구현하고, `Executor`의 `poll_task` 함수를 통해 작업을 실행하는 과정을 설명한다. 이를 통해 CPU 자원을 효율적으로 사용하고, 3DS 환경의 제약 사항을 극복한다.
저자는 최소 실행 가능(Minimum Viable) Executor의 구조를 제시하며, `Executor`, `Task`, `TaskWaker` 등의 구조체를 정의한다. `Executor`는 작업 큐(Task Queue)를 관리하고, `Task`는 실행할 비동기 작업을 나타내며, `TaskWaker`는 Executor에게 작업을 다시 실행하도록 요청하는 역할을 한다. 이러한 구조를 통해 3DS 환경에서 비동기 작업을 효율적으로 관리하고 실행할 수 있다.