피드로 돌아가기
Rust Async Patterns in Tauri — Keeping the UI Responsive While Rust Does Heavy Work
Dev.toDev.to
Frontend

Tauri UI 프리징 해결을 위한 Rust Async 기반 비동기 처리 설계

Rust Async Patterns in Tauri — Keeping the UI Responsive While Rust Does Heavy Work

hiyoyo2026년 5월 5일4intermediate

Context

Main Thread에서 CPU 집약적 작업 수행 시 발생하는 UI 프리징 및 Frontend Timeout 문제 분석. 단일 스레드 기반의 Blocking Command 호출로 인한 사용자 경험 저하 해결 필요.

Technical Solution

  • spawn_blocking을 통한 CPU-heavy 작업을 전용 Thread Pool로 분리하여 Async Executor의 가용성 확보
  • tauri::Window::emit 기반의 Event Driven 구조를 설계하여 1초 이상의 장기 작업에 대한 실시간 Progress Reporting 구현
  • Arc<AtomicBool> 기반의 CancelToken을 도입하여 사용자 요청에 따른 장기 실행 작업의 즉각적인 중단 메커니즘 구축
  • tokio::sync::Semaphore를 활용한 동시성 제어로 시스템 자원 고갈을 방지하는 Parallel Processing 구조 설계
  • Async Command와 비동기 런타임을 조합하여 UI 응답성을 유지하는 Non-blocking 아키텍처 적용

1. #[tauri::command] 내 Blocking 작업 존재 시 반드시 async 선언 및 spawn_blocking 적용 여부 검토

2. 1초 이상 소요되는 작업에 대해 Event 기반의 상태 업데이트 로직 구현

3. Shared State 기반의 취소 플래그를 통한 Long-running Task 제어권 확보

4. 무분별한 tokio::spawn 대신 Semaphore를 통한 동시 실행 수 제한 설정

원문 읽기