## 0.1 rclpy 비동기 라이브러리(asyncio) 기반 코루틴 스케줄링 및 무결성 한계
Python 생태계의 비동기 프로그래밍 모델은 코루틴(Coroutine)과 이벤트 루프(Event Loop)를 융합한 asyncio 표준 라이브러리를 통해 진화해왔다. rclpy 프레임워크는 이러한 Python 고유의 비동기 패러다임을 수용하여, 서비스 클라이언트(Service Client) 호출이나 액션 클라이언트(Action Client) 피드백 대기와 같이 응답 시간이 불완전한 네트워크 바운드(Network-bound) 작업에 대해 async/await 예약어를 통한 코루틴 형태의 콜백 처리를 공식적으로 지원한다. 그러나 이러한 고수준의 런타임 추상화는 GIL(Global Interpreter Lock) 체제가 지배하는 CPython 환경에서 필연적인 처리량 한계와 타이밍 무결성(Timing Integrity) 문제를 동반한다.
0.1.1 코루틴 기반 비동기 대기(Await) 메커니즘
전통적인 콜백 방식이 함수의 포인터를 이그제큐터 큐에 등록하는 방식이라면, 비동기 async def 기반의 코루틴은 함수의 실행 흐름을 언제든 일시 정지(Suspend)하고 다른 태스크에 제어권을 양보(Yield)할 수 있는 협력적 멀티태스킹(Cooperative Multitasking) 구조를 제공한다.
예를 들어 특정 드론 노드가 /takeoff라는 이름의 장기 실행 서비스(Long-running Service)를 비동기식으로 호출(call_async)하고 await로 응답을 대기하면, 제어권은 즉각적으로 rclpy 이그제큐터의 메인 루프로 반환된다. 메인 스레드는 블로킹(Blocking) 상태에 빠지지 않으므로 다른 센서 데이터의 구독 콜백이나 내부 타이머 연산들을 중단 없이 스케줄링할 수 있다. 이는 복잡한 로직을 순차적인 절차적 코드 흐름(Procedural Flow)처럼 자연스럽게 작성하면서도 이그제큐터의 정체를 방지하는 매우 우수한 소프트웨어 설계 패턴이다.
0.1.2 asyncio 모듈과 rclpy 싱글 스레드 이그제큐터 간의 스케줄링 충돌
학술적으로 주의해야 할 가장 큰 문제점은 rclpy 자체가 보유한 C 계층의 대기 집합(WaitSet) 폴링 루프와, Python asyncio 모듈이 자체적으로 운용하는 태스크 스케줄링 루프 간의 간섭(Interference) 현상이다. rclpy.spin()은 rclcpp와 마찬가지로 RMW의 대기 함수를 호출하여 스레드를 시스템 콜 레벨에서 동기적으로 수면(Sleep)시킨다.
만약 개발자가 asyncio.sleep()이나 asyncio.gather()와 같은 순수 asyncio 기반의 이벤트 루티닝을 rclpy 콜백 안에 무분별하게 혼합할 경우, Python 가상 머신의 이벤트 루프는 rclpy 블로킹 메커니즘에 의해 제어권을 박탈당해 코루틴들이 제때 스케줄링되지 않는 교착 상태(Deadlock)에 빠질 수 있다. 이를 회피하기 위해서는 순수 asyncio 태스크들을 별도의 백그라운드 스레드에서 격리 실행하거나, rclpy가 제공하는 고유의 타이머 및 비동기 퓨처(Future) 객체를 철저하게 준수해야 한다.
0.1.3 GIL 체제 하에서의 코루틴 병렬성 환상 및 무결성 제약 조건
rclpy 환경에서 MultiThreadedExecutor 위에 다수의 async 코루틴을 스케줄링한다 하더라도, 이는 진정한 듀얼 코어 이상의 물리적 코어 점유(Parallel Computation)를 의미하지 않는다. Python의 GIL은 다수의 스레드가 CPython 가상 머신의 내부 상태를 동시에 수정하는 것을 방지하기 위해 존재하므로, 오직 한 번에 하나의 스레드만이 바이트코드(Bytecode)를 해석할 수 있다.
결과적으로 코루틴 간의 스위칭(Context Switching) 연산 자체가 단일 코어 위에서 시분할(Time-sharing) 방식으로 쪼개져 수행된다. 입출력 지연(I/O Latency)을 마스킹(Masking)하는 데에는 코루틴이 효과적이지만, 비전 SLAM(Simultaneous Localization and Mapping) 알고리즘의 행렬 최적화와 같이 프로세서 자원 점유가 높은 코루틴이 하나라도 스케줄링 루프에 끼어들면 전체 이그제큐터의 실행 주기가 기하급수적으로 밀리는 치명적 구조 결함이 나타난다. 따라서 강한 시간적 결정론(Deterministic Real-time)이 요구되는 핵심 피드백 제어 루프나, 진정한 병렬 연산이 필요한 무결성 중심 모듈은 절대 rclpy의 비동기 코루틴에 의존해서는 안 되며, rclcpp의 네이티브 스레딩 체계로 격리하여 개발되어야 한다는 것이 현대 자율 에이전트 드론 아키텍처의 학술적 원칙이다.